Oracle10gR2 Logical Standby(四)转换逻辑备库的过程
关于Oracle10gR2逻辑备库,之前写过几篇:
Oracle10gR2 Logical Standby(一)概念与原理
Oracle10gR2 Logical Standby(二)配置前需要考虑的问题
Oracle10gR2 Logical Standby(三)配置逻辑备库
这里记录一下Oracle10gR2物理备库转换为逻辑备库的过程中,Oracle都做了哪些操作。从alert中可以获得很多有用的信息:当执行alter database recover to logical standby xxxx的命令后,首先启动基于SCN的不完全恢复(Oracle10g会自动开启并行恢复,这个例子中启动了15个并行恢复进程)。然后clear online redo logfile,但是Oracle10g在将备库置于manged standby状态的时候就提前将这个clear的动作做了,所以这里记录的是previously cleared,然后将备库激活,调用nid修改数据库的DBID。
alter database recover to logical standby shtest
Thu Jun 5 14:02:55 2008
Media Recovery Start: Managed Standby Recovery (shtest)
Thu Jun 5 14:02:55 2008
Managed Standby Recovery not using Real Time Apply
parallel recovery started with 15 processes
Media Recovery Log /oradata/archive/shtest/1_2274_655399684.arc
Media Recovery Log /oradata/archive/shtest/1_2275_655399684.arc
Media Recovery Log /oradata/archive/shtest/1_2276_655399684.arc
Media Recovery Log /oradata/archive/shtest/1_2277_655399684.arc
Thu Jun 5 14:02:56 2008
Incomplete Recovery applied until change 20447678
Thu Jun 5 14:02:56 2008
Media Recovery Complete (shtest)
RESETLOGS after incomplete recovery UNTIL CHANGE 20447678
Resetting resetlogs activation ID 54725959 (0x3430d47)
Online log /oradata/shtest/redo01_01.dbf: Thread 1 Group 1 was previously cleared
Online log /oradata/shtest/redo01_02.dbf: Thread 1 Group 1 was previously cleared
Online log /oradata/shtest/redo02_01.dbf: Thread 1 Group 2 was previously cleared
Online log /oradata/shtest/redo02_02.dbf: Thread 1 Group 2 was previously cleared
Online log /oradata/shtest/redo03_01.dbf: Thread 1 Group 3 was previously cleared
Online log /oradata/shtest/redo03_02.dbf: Thread 1 Group 3 was previously cleared
Standby became primary SCN: 20447676
Thu Jun 5 14:03:01 2008
Setting recovery target incarnation to 2
Thu Jun 5 14:03:01 2008
Converting standby mount to primary mount.
Thu Jun 5 14:03:01 2008
ACTIVATE STANDBY: Complete – Database mounted as primary (shtest)
*** DBNEWID utility started ***
DBID will be changed from 54167428 to new DBID of 55371925 for database SHTEST
DBNAME will be changed from SHTEST to new DBNAME of SHTEST
Starting datafile conversion
Setting recovery target incarnation to 1
Datafile conversion complete
Database name changed to SHTEST.
Modify parameter file and generate a new password file before restarting.
Database ID for database SHTEST changed to 55371925.
All previous backups and archived redo logs for this database are unusable.
Database has been shutdown, open with RESETLOGS option.
Succesfully changed database name and ID.
*** DBNEWID utility finished succesfully ***
Thu Jun 5 14:03:03 2008
ARC1: Archival disabled due to instance shutdown
Shutting down archive processes
Archiving is disabled
Thu Jun 5 14:03:03 2008
Completed: alter database recover to logical standby shtest
Oracle10gR2 Logical Standby(三)配置逻辑备库
Oracle10gR2在管理方面比起Oracle9i来说,有了相当大的改进,很多组件的安装配置过程都被简化了。简单的操作能够减少很多不必要的失误,对于提高系统的可用性也是很有帮助的。Logical Standby现在能够由physical standby直接转化而来,这一点改进很重要,不但简化了配置的过程,也为Oracle11g利用physical standby做滚动升级打下了基础,滚动升级的另外一个基础是Flashback database。Oracle很多特性在刚推出的时候看是改进不大,但真正产生化学作用往往会在更新的版本中体现。
一、创建物理备库
关于物理备库的创建,已经有过很多文章了,所以这里就不打算再重复整个过程了。可以参考我以前做试验的时候一点记录
上面两篇文章试验的版本都是9201的,但是物理备库在9i和10g的配置过程基本一致。不同的是,Oracle10g引入了一些新的参数和属性,可以简化switchover操作。所以参数的设置我这里再贴一个例子。
Oracle10gR2 Logical Standby(二)配置前需要考虑的问题
逻辑备库只是对于主库的一个逻辑意义上的数据冗余,不像物理备库能够在block级别上和主库保持一致。所以有其优点,也有其缺点。比如主库的一个datafile损坏,可以从物理备库拷贝对应的文件过来然后recover datafile就可以恢复,逻辑备库则无法实现这样保护了。由于是SQL APPLY,对于一些数据类型也是有限制的。
不支持的数据类型
Oracle10gR2的logical standby已经能支持大多数的数据类型了,包括CLOB/BLOB/LONG等,但还是有几种类型是不支持的。如果主库中有使用到这些数据类型,则需要使用其他方式进行处理。
BFILE
Collections (including VARRAYS and nested tables)
Encrypted columns
Multimedia data types (including Spatial, Image, and Context)
ROWID, UROWID
User-defined types
XMLType
Oracle10gR2 Logical Standby(一)概念与原理
从Oracle9i开始支持逻辑Standby,通过logminer从日志中挖掘出sql语句重新在备库应用,来达到主备库数据冗余的目的。由于逻辑备库在应用sql的同时是处于open状态了,那么除了可以利用其冗余数据的特性来做冗灾之外,考虑得更多的可能是利用其做为报表查询库,或者做为读写分离的一种解决方案来分担整个系统的负载,可以充分利用做为备库的主机和存储资源。但是9i的逻辑备库有很多不成熟的地方,实际使用的案例也不多。Oracle10g对于Data Guard在易用性和稳定性方面做出了不少的改进。本系列文章打算简单介绍一下10gR2的逻辑备库。
逻辑备库的架构说起来十分的简单,首先利用主库的一个备份来建立逻辑备库,然后主库将日志传递到备库,备库利用logminer从主库的日志中解析出主库所执行过的SQL,然后重新跑一边,从而使得主备库的数据一致。由于Oracle的联机日志是半逻辑半物理结构,所以从日志中解析出来的SQL,只是逻辑上和主库上的等效,而不是完全相同的语句。比如主库执行一条insert语句插入了10条记录,在备库解析出来将是10条insert语句,每条语句插入一条记录。
