Oracle RMAN Migrate from Single none-ASM to Single ASM

本文详细介绍了如何在Linux环境下,将Oracle数据库的控制文件、数据文件、临时文件、日志文件、参数文件以及参数文件迁移至ASM(Automatic Storage Management)。包括使用RMAN工具进行全量备份、控制文件恢复、调整控制文件路径、在线日志迁移、参数文件迁移等关键步骤,最终实现数据库在ASM上的成功部署。
环境: Linux 5.6 x86-64 + ASM(single instance) + Oracle 11.2.0.3(single instance)
--迁移前控制文件,数据文件(临时文件),日志文件,参数文件。
SQL> show parameter spfile
spfile                               string      /u01/app/oracle/product/11.2.0.3.0/db_1/dbs/spfilehdb11g.ora                                               
SQL> show parameter control_files
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /u01/app/oracle/oradata/hdb11g/control01.ctl, /u01/app/oracle/fast_recovery_area/hdb11g/control02.ctl
ora11gr2.sannet.net | hdb11g | /u01/app/oracle/oradata/hdb11g > ls -l
total 2140088
-rw-r----- 1 oracle dba  16785408 Aug 28 06:31 AUDIT_TS.ora
-rw-r----- 1 oracle dba   9846784 Aug 28 07:01 control01.ctl
-rw-r----- 1 oracle dba 138289152 Aug 28 06:31 example01.dbf
-rw-r----- 1 oracle dba  16785408 Aug 28 06:31 FGA_TS.ora
-rw-r----- 1 oracle dba  52429312 Aug 28 07:26 redo01.log
-rw-r----- 1 oracle dba  52429312 Aug 28 07:26 redo02.log
-rw-r----- 1 oracle dba  52429312 Aug 28 08:37 redo03.log
-rw-r----- 1 oracle dba  26222592 Aug 28 06:31 stream_ts.ora
-rw-r----- 1 oracle dba 775954432 Aug 28 06:31 sysaux01.dbf
-rw-r----- 1 oracle dba 775954432 Aug 28 06:31 system01.dbf
-rw-r----- 1 oracle dba  58728448 Aug 27 11:41 temp01.dbf
-rw-r----- 1 oracle dba  16785408 Aug 28 06:31 transport_ts2.ora
-rw-r----- 1 oracle dba  10493952 Aug 28 06:31 tsmgmt_ts1.ora
-rw-r----- 1 oracle dba  10493952 Aug 28 06:31 tsmgmt_ts2.ora
-rw-r----- 1 oracle dba  10493952 Aug 28 06:31 tsmgmt_ts3.ora
-rw-r----- 1 oracle dba  10493952 Aug 28 06:31 tsmgmt_ts4.ora
-rw-r----- 1 oracle dba  16785408 Aug 28 06:31 TS_TEST_PRIVS.DBF
-rw-r----- 1 oracle dba 131080192 Aug 28 06:31 undotbs01.dbf
-rw-r----- 1 oracle dba   1056768 Aug 28 06:31 user02.dbf
-rw-r----- 1 oracle dba   9183232 Aug 28 06:31 users01.dbf
SQL> select * from v$logfile;
    GROUP# STATUS  TYPE    MEMBER                                                       IS_
---------- ------- ------- ------------------------------------------------------------ ---
         3         ONLINE  /u01/app/oracle/oradata/hdb11g/redo03.log                    NO
         2         ONLINE  /u01/app/oracle/oradata/hdb11g/redo02.log                    NO
         1         ONLINE  /u01/app/oracle/oradata/hdb11g/redo01.log                    NO

##################################
步骤:

+ 控制文件,数据文件,临时文件迁移。
+ 在线日志迁移
+ 参数文件迁移

##################################

--数据库迁移之RMAN从文件系统至ASM
SQL> alter system set db_create_file_dest='+DATA' scope=both;
RMAN> restore controlfile to '+DATA' from '/u01/app/oracle/oradata/hdb11g/control01.ctl';
SQL> alter system set control_files='+DATA/HDB11G/CONTROLFILE/current.256.824626491' scope=spfile;
SQL> shutdown immediate;
SQL> startup mount;
RMAN> backup full database tag 'FULL' format='/u01/FULL_%d_%T_%s';
RMAN> backup current controlfile tag 'CTRL'  format '/u01/CTRL_%d_%T_%s';
RMAN> run{     
SET NEWNAME FOR DATABASE TO '+DATA';
SET NEWNAME FOR TEMPFILE 1 TO '+DATA';
RESTORE DATABASE;
SWITCH DATAFILE ALL;
SWITCH TEMPFILE ALL;

}
SQL> alter database open;

此时,控制文件,数据文件已经迁到了ASM上了,可以直接open数据库。

如果需要将redo log也放在ASM中,则需要重建redo log,在open状态下可以进行如下操作。
SQL> alter system set db_create_online_log_dest_1='+DATA' scope=both;
SQL> select * from v$log;
SQL> select * from v$logfile;
删除inactive状态的日志组,重建日志。
SQL> alter database drop logfile group 1;
SQL> alter database add logfile group 1 size 50M;
SQL> alter database drop logfile group 2;
SQL> alter database add logfile size 50M;
SQL> alter system switch logfile;
SQL> alter system checkpoint;
SQL> alter database drop logfile group 3;
SQL> alter database add logfile ('+DATA','+RECOVERY') size 50M;

如果需要将spfile也放在ASM中,如下步骤。
SQL> create pfile from spfile;
SQL> shutdown immediate;
SQL> startup nomount pfile='?/dbs/inithdb11g.ora';
SQL> create spfile='+DATA' from pfile;
ora11gr2.sannet.net | hdb11g | /u01/app/oracle/product/11.2.0.3.0/db_1/dbs > rm -rf spfilehdb11g.ora
ora11gr2.sannet.net | hdb11g | /u01/app/oracle/product/11.2.0.3.0/db_1/dbs > vi inithdb11g.ora
spfile='+DATA/HDB11G/PARAMETERFILE/spfile.276.824633307'
SQL> shutdown immediate;
SQL> startup;
SQL> show parameter pfile;
Oracle数据库中使用RMAN(Recovery Manager)进行备份时,如果出现错误 `RMAN-03002`、`RMAN-06059` 和 `ORA-19625`,这些错误通常与归档日志文件丢失或路径不一致有关。以下是针对这些问题的解决方案: ### 错误分析与解决方法 1. **RMAN-03002: failure of backup command** - 该错误表示RMAN的备份命令执行失败。它通常作为其他错误(如`RMAN-06059`)的包装错误,指示具体的失败原因。 - 这个错误本身不会提供详细的失败原因,因此需要查看堆栈中的其他错误信息以确定根本原因。 2. **RMAN-06059: expected archived log not found, loss of archived log compromises recoverability** - 该错误表明RMAN期望找到某个归档日志文件,但未找到。这通常是因为归档日志文件已被手动删除或路径不一致导致的。 - 这会直接影响数据库的可恢复性,因为RMAN无法找到必要的归档日志文件来完成备份或恢复操作。 3. **ORA-19625: error identifying file** - 该错误进一步说明了文件路径问题,例如归档日志文件不存在或路径错误。 - 在Linux系统上,错误 `ORA-27037: unable to obtain file status` 和 `Linux-x86_64 Error: 2: No such file or directory` 表明RMAN无法访问指定的归档日志文件路径。 ### 解决方案 1. **验证归档日志文件路径** - 检查归档日志文件的实际存储路径是否与RMAN目录中记录的路径一致。 - 如果归档日志文件已被手动删除,可以使用以下命令从RMAN目录中清除无效的归档日志信息: ```sql RMAN> crosscheck archivelog all; RMAN> delete expired archivelog all; ``` 这些命令会标记无效的归档日志条目,并从RMAN目录中删除它们[^2]。 2. **更新归档日志路径** - 如果归档日志文件被移动到新的路径,需要更新RMAN目录中的路径信息。可以使用以下命令注册新的归档日志文件: ```sql RMAN> catalog start with '/new/archivelog/path/'; ``` 这将重新注册指定路径下的所有归档日志文件。 3. **避免手动删除归档日志文件** - 手动删除归档日志文件可能导致RMAN目录与实际文件状态不一致。建议通过RMAN命令删除归档日志文件,以确保目录信息同步: ```sql RMAN> delete archivelog until time 'sysdate-7'; ``` 这将删除7天前的归档日志文件,并更新RMAN目录。 4. **检查归档日志路径权限** - 确保Oracle数据库实例具有对归档日志文件路径的读写权限。权限不足可能导致RMAN无法访问或写入归档日志文件。 5. **配置归档日志删除策略** - 为了避免归档日志文件占用过多磁盘空间,可以配置RMAN的归档日志删除策略: ```sql RMAN> configure archivelog deletion policy to applied on standby; ``` 这将确保归档日志文件在备用数据库上应用后自动删除。 ### 示例:清理无效归档日志条目 ```sql RMAN> run { crosscheck archivelog all; delete expired archivelog all; } ``` 此脚本会检查所有归档日志文件的状态,并删除RMAN目录中无效的条目。 ### 示例:重新注册归档日志文件 ```sql RMAN> catalog start with '/new/archivelog/path/'; ``` 此命令会重新注册指定路径下的所有归档日志文件。 ### 示例:配置归档日志删除策略 ```sql RMAN> configure archivelog deletion policy to applied on standby; ``` 此命令配置归档日志删除策略,确保归档日志文件在备用数据库上应用后自动删除。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值