`
swbssd
  • 浏览: 55900 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

Oracle归档路径改变辛苦实践

阅读更多
今天得到消息,公司全面预算项目有数据库服务器的磁盘有坏道,为了保险起见需要修改它的归档路径.于是以下为实践内容备忘记录:
--登陆oracle进入mount模式
D:/>sqlplus / as sysdba
SQL>shutdown immediate
SQL>startup  mount
--设置归档日志的格式
SQL>alter system set log_archive_format='TRP%s%t%r.log' scope=spfile;
--不小心设置路径错误(没有这个目录)
SQL>alter system set log_archive_dest_1 = 'location=/oracle/arch/ora10g' scope=spfile;
--结果..oracle挂了(真脆弱)数据库启动不了,报错
SQL> startup nomount
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file 'E:\oracle\product\10.2.0\db_1/dbs/spfileTRP.ora'
ORA-27041: unable to open file
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
--哎,怎么办?搞了半天没办法,先使用原始监听文件启动数据库(init.ora.872011152544为最原始的ora文件)
D:/>startup pfile='E:\oracle\product\10.2.0\admin\TRP\pfile\init.ora.872011152544'
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             167775108 bytes
Database Buffers          436207616 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL> exit
---使用RMAN进入,恢复备份控制文件
D>rman target /
--恢复到该文件(但是报错,可能是因为我9号改了log_archive_dest导至)
RMAN> restore spfile from 'G:\Trp_work\backup\database\TRPTOONE_20120708_340.BAK';
--干脆恢复到最新的10号凌晨的备份(autobackup 默认最新)
RMAN> restore spfile from autobackup;
启动 restore 于 10-7月 -12
使用通道 ORA_DISK_1

恢复区域目标: E:\oracle\product\10.2.0/flash_recovery_area
用于搜索的数据库名 (或数据库的唯一名称): TRP
通道 ORA_DISK_1: 在恢复区域中找到自动备份
通道 ORA_DISK_1: 已找到的自动备份: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TRP\AUTOBACKUP\2012_
07_10\O1_MF_S_788233257_7ZP60R1K_.BKP
通道 ORA_DISK_1: 从自动备份复原 SPFILE 已完成
完成 restore 于 10-7月 -12
***************************************终于还原了,靠..
--恢复之后结束了,继续设置log_archive_dest_1吧。。
--看了个什么XX蛋疼的文章,按它来弄下吧
SQL> alter system set db_recovery_file_dest = '' scope=spfile;
系统已更改。
SQL> alter system set log_archive_dest = '' scope=spfile;
系统已更改。
--记得加location=,不然会报错
SQL> alter system set log_archive_dest_1 = 'location=G:\Trp_work\ORACLE_ARCHIVE\TRP' scope=spfile;
--需要重新启动数据库(用alter database open没效果)
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
---1.查看修改效果
SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            G:\Trp_work\ORACLE_ARCHIVE\TRP
最早的联机日志序列     818
下一个存档日志序列   820
当前日志序列           820
---2.查看修改效果(执行一个修改事务改张表,然后手动写下日志)
SQL> alter system switch logfile;
系统已更改。
*********(这个时候去查看G:\Trp_work\ORACLE_ARCHIVE\TRP下面已经生成归档文件)
******但是一看,咋怎么才一个地方呢?..而且看了下闪回区居然发现是空的..
SQL>show parameter db_recovery
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string
db_recovery_file_dest_size           big integer 2G
--没办法,只能重新再设置回去。。
SQL> alter system set db_recovery_file_dest = 'E:\oracle\product\10.2.0\flash_recovery_area' scope=spfile;
--然后要重新启动数据库OK(这个时候才发现db_recovery_file_dest闪回区根本不用改..)
*************************分割线
************当时在想,我设置了log_archive_dest_1,再设置个log_archive_dest不就2个归档目录了吗?哈哈,我太聪明了..(事实证明是傻)
SQL> alter system set log_archive_dest = 'E:\oracle\product\10.2.0\flash_recovery_area\TRP\ARCHIVELO
G' scope=spfile;
--结果悲剧,结果又挂了。。(这是一个很经典的问题,主要是由于log_archive_dest与log_archive_dest_n这两个参数是不能够同时设置值、共存的。
)
SQL> startup
ORA-16019: cannot use LOG_ARCHIVE_DEST_1 with LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST
--没办法直接重新创建个ora文件,改改重新启动吧,已经对oracle比较了解了。(使用这个pfile重新启动数据库)
SQL> create pfile='d:\init.ora' from spfile;
--文本编辑器打开init.ora,去掉、注释掉log_archive_dest这行设置,然后用这个文件启动oracle
SQL> startup pfile='d:\init.ora';
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             188746628 bytes
Database Buffers          415236096 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
数据库已经打开。
--Oracle被正常的打开了,好了,有救了。把spfile create 回去oracle_home\db_1\database\xxxx
SQL> create spfile='E:\oracle\product\10.2.0\db_1\database\SPFILETRP.ORA' from pfile='D:\init.ora'
---终于恢复了,但是测试了一下,只有一个归档路径就是log_archive_dest_1的..怎么办?
*********************分割线.第二天设置个log_archive_dest_2再测试看看吧
SQL> alter system set log_archive_dest_2 = 'location=E:\oracle\product\10.2.0\flash_recovery_area\TRP\ARCHIVELOG' scope=spfile;
--设置完毕OK~再测试下(重新启动数据库)
---2.查看修改效果(执行一个修改事务改张表,然后手动写下日志)
SQL> alter system switch logfile;
*********(这个时候去查看2处地方有没有都生成归档文件,或者直接查询select recid, name, first_time from v$archived_log;)

****************终于OK了,下面总结下一次搞定的命令.
1.数据库启动到mount
D:/>sqlplus / as sysdba
SQL>shutdown immediate
SQL>startup  mount
2.把默认路径设置空,然后设置log_archive_dest_1,log_archive_dest_2不同的归档路径
SQL> alter system set log_archive_dest = '' scope=spfile;
SQL> alter system set log_archive_dest_1 = 'location=G:\Trp_work\ORACLE_ARCHIVE\TRP' scope=spfile;
SQL> alter system set log_archive_dest_1 = 'location=E:\oracle\product\10.2.0\flash_recovery_area\TRP\ARCHIVELOG' scope=spfile;
3.重新启动数据库,然后查看效果
SQL>shutdown immediate
SQL>startup
SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            E:\oracle\product\10.2.0\flash_recovery_area\TRP\ARCHIVELOG
最早的联机日志序列     822
下一个存档日志序列   824
当前日志序列           824
---随便执行一个事务操作动作,然后执行下面写归档命令(然后查看2处地方有没有都生成归档文件)
SQL> alter system switch logfile;



**********************下面总结恢复命令
---使用RMAN进入,恢复备份控制文件
D:>rman target /
--恢复到某个备份文件
RMAN> restore spfile from 'G:\Trp_work\backup\database\TRPTOONE_20120708_340.BAK';
--恢复到最新的备份(autobackup 默认最新)
RMAN> restore spfile from autobackup;
--restore为还原
--recover为恢复
**********************************
-----原始监听文件路径E:\oracle\product\10.2.0\admin\TRP\pfile\init.ora.872011152544
-----控制文件损坏使用另外一个ora启动
SQL> startup pfile='d:\init.ora';
--根据spfile创建个ora文件
SQL> create pfile='d:\init.ora' from spfile;
----重新根据某个ora创建一个新的控制文件
SQL> create spfile='E:\oracle\product\10.2.0\db_1\database\SPFILETRP.ORA' from pfile='D:\init.ora'


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics