一直想做一个logical standby,每次都是以失败告终,在屡败屡战之后,终于迎来了胜利!据说可以使用网格控制器点几下,简单的把物理备库转换成逻辑备库,下次有工夫的时候可以测试下!相信一切问题都是时间问题,一切烦恼都是自寻烦恼!下面来描述下如何将physical standby转换成logical standby,在开始之前,请先配好dataguard 的physical standby
physical standby配置请参考:
http://ylw6006.blog.51cto.com/470441/661105
dataguard各参数含义请参考:
http://space.itpub.net/519536/viewspace-578352
http://hi.baidu.com/edeed/blog/item/f54c6e06b92bc77703088174.html
环境介绍:
主库:
IP地址: 192.168.227.20/24
OS版本:Rhel5.4 32位
SID名称: orcl
db_name: orcl
db_unique_name: primary
物理备库:(转换前)
IP地址: 192.168.227.30/24
OS版本:Rhel5.4 32位
SID名称: orcl
db_name: orcl
db_unique_name: standby
逻辑备库:(转换后)
IP地址: 192.168.227.20/24
OS版本:Rhel5.4 32位
SID名称: orcl
db_name: logdb
db_unique_name: logdb
一:在物理备库上确认归档日志apply正常
SQL> SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received",
|
SQL> alter database recover managed standby database cancel; Database altered. |
三:配置主库
SQL> show parameter log_archive_config; NAME TYPE VALUE SQL> show parameter dest_1; NAME TYPE VALUE NAME TYPE VALUE SQL> !mkdir -p /u01/arch/standby/orcl 在主库生成LogMiner字典,切换日志 |
四:配置备库
将物理备库转换成逻辑备库,在这之前请确保物理备库使用spfile启动
SQL> alter database recover to logical standby logdb; SQL> shutdown immediate NAME TYPE VALUE SQL> alter system set db_unique_name='logdb' scope=spfile; SQL> alter system set log_archive_dest_1='LOCATION=/u01/arch/orcl valid_for=(online_logfiles,all_roles) db_unique_name=logdb' scope=spfile; SQL> !mkdir -p /u01/arch/standby/orcl SQL> alter system set log_archive_dest_3='LOCATION=/u01/arch/standby/orcl VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)'; SQL> shutdown immediate 修改tnsnames.ora文件,主库上也需要修改 Used TNSNAMES adapter to resolve the alias SQL> alter database start logical standby apply immediate; SQL> alter database add standby logfile group 4 '/u01/app/oracle/oradata/orcl/standby04.dbf' size 50M; SQL> alter database add standby logfile group 5 '/u01/app/oracle/oradata/orcl/standby05.dbf' size 50M; SQL> alter database add standby logfile group 6 '/u01/app/oracle/oradata/orcl/standby06.dbf' size 50M; SQL> alter database start logical standby apply immediate; SQL> select name, database_role from v$database; NAME DATABASE_ROLE |
五:测试
主库更新: SYSDATE SQL> update hr.employees set salary=200 where employee_id=100; 备库查询: SALARY SQL> select sysdate from dual; SYSDATE 主库提交,切换日志 SQL> alter system switch logfile; 备库再次查询 SALARY |
六:验证
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, DICT_BEGIN, DICT_END FROM DBA_LOGSTDBY_LOG ORDER BY SEQUENCE#; SEQUENCE# FIRST_TIME NEXT_TIME DIC DIC SQL> select file_name,applied from DBA_LOGSTDBY_LOG ; FILE_NAME APPLIED EVENT_TIME STATUS EVENT 2011-09-28:11:28:04 ORA-16128: User init
2011-09-28:11:28:04 ORA-16112: log minin
2011-09-28:11:28:14 ORA-16111: log minin
2011-09-28:11:53:23 ORA-16226: DDL skipp ALTER DATABASE OPEN 2011-09-28:12:49:31 ORA-16128: User init EVENT_TIME STATUS EVENT 2011-09-28:12:50:11 ORA-16111: log minin 2011-09-28:13:23:59 ORA-16226: DDL skipp ALTER DATABASE OPEN 8 rows selected.
[oracle@orcl ~]$ ll /u01/arch/standby/orcl/* NAME VALUE NAME VALUE NAME VALUE 33 rows selected.
APPLIED_SCN LATEST_SCN MINING_SCN RESTART_SCN |
七:排错
先前一直出现如下错误 TYPE STATUS_CODE STATUS SQL> SELECT * FROM V$LOGSTDBY_STATE; PRIMARY_DBID SESSION_ID REALTIME_APPLY STATE SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE '/u01/arch/orcl/1_12_760125331.arc'; SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE '/u01/arch/orcl/1_13_760125331.arc'; SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE '/u01/arch/orcl/1_14_760125331.arc'; SQL> select session_id,state from v$logstdby_state; SESSION_ID STATE 值得一提的是逻辑备库会自动删除已经应用的日志 SQL> select file_name,applied from DBA_LOGSTDBY_LOG ; FILE_NAME APPLIED |
八:备注
以下数据类型不被逻辑备库支持: 检查不被逻辑备库支持的表: 以下操作不被逻辑备库支持: 高级队列的管理和物化视图的刷新不被支持(DBMS_AQADM,DBMS_MVIEW_REFRESH) Logical Standby要求每张表应该有Primary key或者Unique index,如果必须有没有唯一性标示的表,那么可以激活Primary库的supplemental logging属性,但是这样将会在redo log中记录该表中每一条记录的所有字段作为标示,会大大增加redo log的记录量。 用以下方法激活Primary库的supplemental logging属性: 激活supplemental logging属性以后,作一次日志切换,保证当前日志中不包含非追加日志数据(nonsupplemental log)。 无论是物理备库还是逻辑备库,都应该先启动备库,再启动主库;先关闭主库,后关闭备库! |
参考文档:
http://avdeo.com/2010/05/04/converting-physical-standby-to-logical-oracle-dataguard-10g/
本文出自 “斩月” 博客,谢绝转载!