挽救丢失的pfile


问题是这样出现的:按照平时的要求,spfile应该写入到一个裸设备中,由于裸设备所在的路径没有控制好权限,而create spfile的时候,弄错了大小写:裸设备为spfile_128m_01,而误操作成了create spfile=’spfile_128M_01′ from pfile。将原来的pfile的内容删除,改成指向的spfile_128m_01。于是,在文件系统中就有了一个spfile:spfile_128M_01,且同时还有一个裸设备spfile_128m_01。

因此,系统正在使用的是spfile:spfile_128M_01,但是存在一个裸设备的spfile:spfile_128m_01,内容为空 。

迁移的时候,将裸设备的lv全部迁移到了b机,但是文件系统文件’spfile_128M_01′ 没有迁移,因此,在启动的时候,根据pfile的指向去找spfile:spfile_128m_01,却发现内容为空。

此时源机器数据库已经shutdown,pfile的内容也早已更改成指向spfile,从哪里去找数据库shutdown前的启动参数呢?别急,虽然spfile是个二进制文件,但是我们还是可以看到里面的启动参数的内容的,且里面的内容就是shutdown之前的数据库参数配置:

[oracle@standby1 dbs]$ cat spfileoradg.ora
¡¤¡¤
(&*.aq_tm_processes=1<-------------------------注意此处开头部分有乱码!
*.
background_dump_dest='/oracle/admin/oradg/bdump'
*.
compatible='9.2.0.0.0'
*.
control_files='/oracle/oradata/oradg/control01.ctl','/oracle/oradata/oradg/control02.ctl','/oracle/oradata/oradg/control03.ctl'
*.
core_dump_dest='/oracle/admin/oradg/cdump'
*.
db_block_size=8192
*.
db_cache_size=186646528
*.
db_domain=''
*.
db_file_multiblock_read_count=16
*.
db_name='oradg'
*.
dispatchers='(PROTOCOL=TCP) (SERVICE=oradgXDB)'
*.
fal_client='standby'
*.
fal_server='primary'
*.
fast_start_mttr_target=300
*.
filesystemio_options='directIO'
*.
hash_join_enabled=TRUE
*.
instance_name='oradg'
*.
java_pool_size=20971520
*.
job_queue_processes=10
*.
large_pool_size=36700160
*.
log_archive_dest_1='location=/oracle/arch'
*.
log_archive_dest_2='SERVICE=standby ARCH SYNC AFFIRM REOPEN=5'
*.
log_archive_format='oradg_%T_%S.arc'
*.
log_archive_start=TRUE
*.
open_cursors=300
*.
pga_aggregate_target=82837504
*.
processes=150
*.
query_rewrite_enabled='FALSE'
*.
remote_login_passwordfile='EXCLUSIVE'
*.
shared_pool_size=61865984
*.
sort_area_size=524288
*.
standby_archive_dest='/oracle/arch'
*.
standby_file_management='auto'
*.
star_transformation_enabled='FALSE'
*.
timed_statistics=TRUE
*.
undo_management='AUTO'
*.
undo_retention=10800
*.
undo_tablespace='UNDOTBS1'
*.
user_dump_dest='/oracle/admin/oradg/udump'

我们看到,除了开头的一点乱码外,后面的内容还是一样的,因此,我们可以手工的把spfile的内存去掉前面的乱码部分,手工的copy出来,再放到一个pfile中,用此pfile启动数据库,将spfile建到正确的裸设备上,在改掉pfile的内容,使其指向裸设备。

其实还有一个做法的,需要主机方面的知识了,将文件系统的spfile用dd的方式复制到裸设备的spfile,将pfile的内容指向裸设备的spfile即可。

其实,说了那么多,就一句话而已:丢了pfile,spfile中还是能看到数据库的参数配置的。-_-!

· 【文章发布信息】发表于: 2007-12-22 @ 01:41:36 · ||分类: ..experience, Working case

1 条评论 »

  1. justin 于 2007-12-25 @ 03:26:03 留言

    可以用strings命令看spfile的内容

    strings spfilename

RSS 为此帖反馈评论 · 反向跟踪 网站

留条评论