ORACLE DataGuard Logical Standby 详解之:(二)逻辑Standby创建时的操作步骤

本节内容

1 创建物理Standby
创建逻辑Standby数据库的第一步就是先创建一个物理Standby数据库,然后再将其转换成逻辑Standby数据库。在将其转换为逻辑Standby前,可以随时启动REDO应用,不过一旦决定将其转换为逻辑Standby,就必须先停止该物理Standby的REDO应用,以避免提前应用含LogMiner字典的REDO数据,造成转换为逻辑Standby后,SQL应用时LogMiner字典数据不足而影响到逻辑Standby与Primary的正常同步。

2 设置Primary数据库
在创建物理Standby数据库时曾经设置过相关数量的初始化参数,用于Primary数据库与物理Standby的角色切换,对于逻辑Standby的角色切换,那些参数同样好使。
不过注意,如果希望Primary数据库能够正常切换为逻辑Standby角色,那么DBA在配置环境时,还需要设置相应的LOG_ARCHIVE_DEST_n初始化参数,并注意该参数的VALID_FOR属性值需要更改成STANDBY_LOGFILES,STANDBY_ROLE。

完成对初始化参数的配置后,必须在Primary数据库端生成LogMiner字典信息,例如:
SQL> EXECUTE DBMS_LOGSTDBY.BUILD;

提 示:本步必须执行,并且执行本步操作时,准逻辑Standby数据库要停止REDO应用。

该过程专门用于生成记录的元数据信息到重做日志文件,逻辑Standby未来正是通过这些元数据保持与Primary数据库的同步。

提 示:该过程会自动启用Primary数据库的补充日志(Supplemental Logging)功能(如果未启用的话)。
该过程需要等待当前所有事务完成后才能执行,因此如果当前有较长的事务运行,可能该过程的执行也需要多花一些等待时间。
该过程是通过闪回查询的方式来获取数据字典的一致性,因此Oracle初始化参数UNDO_RETENTION值不能太小,建议设置为3600,并且UNDO表空间也要有足够的空间。

3 转换物理Standby为逻辑Standby
执行下列语句,转换物理Standby为逻辑Standby:
SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY DB_NAME;

注意:DB_NAME不是DB_UNIQUE_NAME,不同于物理Standby,逻辑Standby是一个全新的数据库,因此建议你指定一个唯一的与Primary不同的数据库名。另外如果当前准逻辑Standby使用SPFILE启动数据库,那么执行该语句时Oracle会自动修改SPFILE中的相关信息,如果使用PFILE启动数据库,那么在下次执行SHUTDOWN的时候,Oracle会提示你去修改DB_NAME初始化参数的值。

执行该语句前务必确保当前准逻辑Standby已经暂停了REDO应用,另外转换是单向的,即只能由物理Standby向逻辑Standby转换,而不能由逻辑Standby转成物理Standby。这并不仅仅是因为DB_NAME发生了修改,更主要的原因是逻辑Standby仅是数据与Primary一致,其他如存储结构、SCN等,甚至DBID都不相同。
执行转换的过程中,需要应用全部的与LogMiner字典相关的REDO数据。这部分操作完全依赖于Primary数据库DBMS_LOGSTDBY.BUILD的执行,以及传输到Standby数据库端,需要应用的数据量的规模而定。如果Primary数据库执行DBMS_LOGSTDBY.BUILD失败,则转换操作也不会有结果,这时候你恐怕不得不先cancel它,解决Primary数据库的问题之后再尝试执行转换。取消该操作与取消REDO应用一样,当然实际上,也正是取消REDO应用。

4 重建逻辑Standby的密钥文件
主要是由于转换操作修改了数据库名,因此密码文件也需要重建,这个操作我们做得比较多,这里就不详述了。
[oracle@localhost dbs]$ orapwd file=/u01/app/oracle/product/10.2.0/db_1/dbs/orapworcl password=admin
如果已经存在,就不用创建了。 缺省情况下,win下口令文件的格式是pwdsid.ora,unix下的格式是orapwSID(大小写敏感)

5 调整逻辑Standby初始化参数
之所以要调整初始化参数,一方面是由于此处我们的逻辑Standby是从物理Standby转换来的,某些参数并不适合,甚至可能造成错误,如LOG_ARCHIVE_DEST_n参数的设置。另一方面,由于逻辑Standby默认是以OPEN READ WRITE模式打开,有可能存在读写操作,因此会读写本地Online Redologs并产生Archive Logs,务必需要注意本地的Archive Logs路径,不要与接收自Primary数据库的重做日志文件路径冲突。
当然归根结底是因为逻辑Standby是从物理Standby转换而来,因此Standby的初始化参数就需要第二次调整(第一次是创建物理Standby)。
修改初始化参数的方式有多种,既可以通过ALTER SYSTEM命令,也可以先生成PFILE并修改相关参数,然后再根据修改过的PFILE生成SPFILE。

6 打开逻辑Standby及应用REDO数据
由于逻辑Standby与Primary数据库事务并不一致,其实质相当于进行了不完全恢复,因此第一次打开时必须指定RESETLOGS子句,如下:
SQL> ALTER DATABASE OPEN RESETLOGS;

在逻辑Standby端启动SQL应用,可以通过下列语句进行:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;

注 意:应用REDO数据时必须是在OPEN READ WRITE模式下,这点与物理Standby有明显的区别。

逻辑Standby也可以像物理Standby那样启用实时应用,只需要在启动REDO应用时附加IMMEDIATE子句即可,如:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

如果想停止逻辑Standby数据库的SQL应用,则可通过下列命令进行:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY IMMEDIATE;


数据运维技术 » ORACLE DataGuard Logical Standby 详解之:(二)逻辑Standby创建时的操作步骤