您好,欢迎访问一九零五行业门户网

Oracle 11gR2 Database和Active Data Guard迁移案例

客户一套核心系统由一台oracle database 11.2.0.3.4单机和一台active data guard组成,分别运行在两台pc服务器上,oracle linux
客户一套核心系统由一台oracle database 11.2.0.3.4单机和一台active data guard组成,分别运行在两台pc服务器上,oracle linux 5.8 x86_64bit操作系统,两台服务器都未接存储设备;由于原有设备老旧等原因,现在要将这套oracle数据库系统(主库和adg库)迁移到新采购的两台服务器上,不跨版本,也不跨平台。为了最小化停机时间,我们先用目前最新的rman 0级备份在两台新服务器上restore database,之后将到目前为止的所有1级备份和归档日志restore和recover到两个数据库上,在主数据库正常停机之后把剩余的归档和在线redo日志文件应用到两个新数据库,使他们的数据到最新,且是一致的,最后打开主数据库,恢复adg的同步,整个过程从凌晨0点开始停机,一直持续到了4:20才迁移成功,之间遇到了不少小的问题,再次进行记录:
1.rman报错。
rman在应用部分归档日志之后收到如下报错:
rman-00571: ===========================================================
rman-00569: =============== error message stack follows ===============
rman-00571: ===========================================================
rman-03002: failure of recover command at 11/13/2014 00:03:03
ora-00283: recovery session canceled due to errors
rman-11003: failure during parse/execution of sql statement: alter database recover logfile '/oradata/bak/archivelog/2014_11_12/o1_mf_1_62193_b65oryl5_.arc'
ora-00283: recovery session canceled due to errors
ora-19755: could not open change tracking file
ora-19750: change tracking file: '/u01/app/oracle/block_change_file'
ora-27037: unable to obtain file status
linux-x86_64 error: 2: no such file or directory
additional information: 3
执行下面的sql禁用block change tracking,数据库即可继续正常的应用archivelog:
sql > alter database disable block change tracking;
database altered.
2.resetlogs之后检查主库和备库的日志同步情况。
 通常在主库执行以下的sql语句可以用于检查主库和备库日志同步情况:
sql> select dest_id,thread#,max(sequence#) from v$archived_log where resetlogs_change#=936497858  group by dest_id,thread#;
  dest_id    thread# max(sequence#)
---------- ---------- --------------
        2          1              9
        1          1              9
    由于主数据库在打开的时候执行了alter database open resetlogs,所以查询v$archived_log要跟上resetlogs_change#,确保查看的是现在数据库的归档情况,resetlogs_change#可以通过v$database.resetlogs_change#获得,另外,由于resetlogs打开了数据库,所以sequence#重新开始计数。
3.对活动的standby logfile的处理。
  停止主数据库之后,我们是想将原来的所有online redo logfile和standby logfile都拷贝到新服务器,通过alter databae rename file ... to ...的方式进行重命名,没想到的是active的standby logfile无法进行重命名(收到报错:ora-01511: error in renaming log/data files),但又必须将standby logfile文件放在指定的目录下,下面是查询v$logfile的状态:
sql> select group#,member from v$logfile;
    group#
----------
member
--------------------------------------------------------------------------------
        3
/oradata/orcl/redo03.log
        2
/oradata/orcl/redo02.log
        1
/oradata/orcl/redo01.log
group#
----------
member
--------------------------------------------------------------------------------
        4
/u01/app/oracle/oradata/orcl/sredo01.log
        5
/oradata/orcl/sredo02.log
        6
/oradata/orcl/sredo03.log
group#
----------
member
--------------------------------------------------------------------------------
        7
/oradata/orcl/sredo04.log
7 rows selected.
group# 4是主数据库之前的active standby logfile,无法对其进行alter database rename file操作。
sql> alter database drop logfile group 4;
alter database drop logfile group 4
*
error at line 1:
ora-00315: log 4 of thread 1, wrong thread # 0 in header
ora-00312: online log 4 thread 1: '/u01/app/oracle/oradata/orcl/sredo01.log'
尝试drop group组失败。
sql> alter database add logfile member '/oradata/orcl/sredo01.log' to group 4;
alter database add logfile member '/oradata/orcl/sredo01.log' to group 4
*
error at line 1:
ora-16161: cannot mix standby and online redo log file members for group 4
尝试添加成员失败。
sql> alter database clear logfile group 4;   
alter database clear logfile group 4
*
error at line 1:
ora-00350: log 4 of instance orcl (thread 1) needs to be archived
ora-00312: online log 4 thread 1: '/u01/app/oracle/oradata/orcl/sredo01.log'
由于未归档所以直接clear失败。
sql> alter database clear unarchived logfile group 4;
database altered.
clear unarchived成功。
 对standby logfile的处理办法和对online redo logfile的处理办法一致。
sql> select group#,thread#,status from v$standby_log;
其它类似信息

推荐信息