oracle 另存pfile,挽救丢失的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'

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@standby1dbs]$catspfileoradg.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中还是能看到数据库的参数配置的。-_-!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值