问题是这样出现的:按照平时的要求,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之前的数据库参数配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
[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中还是能看到数据库的参数配置的。-_-!
一条评论
可以用strings命令看spfile的内容
strings spfilename