详细参考: http://space.itpub.net/?uid-35489-action-viewspace-itemid-591125
http://space.itpub.net/35489/viewspace-578464
1. 在创建逻辑备库的过程中,要确保在主数据库中做配置使用的账号具有以下数据库角色:
2. 主库上的准备工作
2.1, SQL> alter database force logging ;
2.2, 确保主库设置为自动归档模式,并必须有一个本地的归档路径。
2.3,确认主库中的log_parallelism参数为1,一般默认为1 。
2.4,确定支持的数据类型及表类型
逻辑备用数据库不支持的数据类型有:nclob、long、long raw、bfile、rowid、urowid、
user-defined types、object types refs、varrays、nested tables
逻辑备用数据库不支持的表、sequences和视图有:用户在sys schema里定义的表和sequences、
那些含有不支持的数据类型的表、使用了segment compression的表、索引组织表(index-
organized tables)
确定主数据库是否含有不支持的对象,查看dba_logstdby_unsupported视图,该视图列出了逻
辑备用数据库所不支持的对象:
SQL> select distinct owner,table_name from dba_logstdby_unsupported order by owner,table_name;
2.5,确认主数据库里表的行都可以唯一标识(主库中每个table都有PK或Unique Index)
SQL> select owner,table_name,bad_column from dba_logstdby_not_unique where table_name not in(select table_name from dba_logstdby_unsupported);
如果发现有返回值,也就是还有没有pk或unique index的table存在,那么最好加上PK或unique
index , 否则后期Logical Standby应用SQL会有问题。如果实在没有办法在某些table中加入pk或
unique index , Oracle也提供了另外一个方式: supplemental logging, 执行下面语句以便将主键
和唯一索引信息添加到归档日志里:
SQL> alter database add supplemental log data(primary key,unique index) columns;
该语句在主数据库中向重做日志添加了唯一标识行的信息,从而日志应用服务可以在备用数据库
里正确的标识相同的行了。
2.6, 添加一个disabled的主键类型的rely的限制(disabled primary key rely constraint)如果应用程序确保
表里的行是唯一标识的,你可以在表上创建一个disabled主键类型的rely的限制:
SQL>alter table mytab add primary key(id,name) rely disable;
rely constraint告诉系统确保了所有的行都是唯一的。如果rely constraint所指定的列没有唯一,则在
逻辑备用数据库应用SQL时将会失败。最好添加主键或唯一索引,这样在逻辑备用数据库应用SQL语句时也
会速度快些。
2.7, 在主库上 SQL> alter system archive log current;
2.8, 在主库中确保启用supplemental logging
SQL> select supplemental_log_data_pk as primaryKey,supplemental_log_data_ui
as uniqueIndex from v$database; 结果为YES即可。
注意: 如果在一个已经含有物理备用数据库的data guard配置中启用了supplemental logging的话,那么
必须在每个物理备用数据库中分别执行alter database add supplemental log data,以便将来在
switchover的时候能够正常工作。
2.9 创建一个可替代的表空间
如果希望在主数据库和逻辑备用数据库之间进行switchover,你必须在主数据库上创建一个替代表空间,并且将逻辑备用数据库里system表转移到这个替代表空间里。
逻辑备用数据库使用一组在sys和system schema下的表。这些表缺省创建在system表空间下。这些表可能会增长非常快。通过预先准备一个单独的表空间,然后将这些逻辑备用系统表转移到这个单独的表空间下,从而避免了这些表将整个system表空间都填满的情况出现。
在逻辑备用数据库创建时,会向这些逻辑备用系统表填数据。这样,应该在创建逻辑备用数据库前,就将这些表转移到独立的表空间里去。
创建表空间:
SQL> create tablespace logmnrts datafile 'D:oradatarmantgtlogmnrts.dbf' size 25m autoextend on maxsize unlimited;
转移表:
SQL> execute dbms_logmnr_d.set_tablespace('logmnrts');
如果在备用数据库里的初始化参数standby_file_management设置为auto,则前面创建表空间的命令会自动应用到备用数据库上。否则如果没有设置为true,则需要手工在备用数据库上执行
3. 创建物理Standby .
http://download.oracle.com/docs/cd/B19306_01/server.102/b14239/create_ps.htm#g88234
3.1, 主库上执行 SQL> ALTER DATABASE FORCE LOGGING ;
3.2, 创建物理Standby密码文件,这里直接拷贝Primary DB上的密码文件。
3.3, 配置Standby 的redo log
对于最大数据保护以及最大可用性模式Logical Standby, Standby redo log是需要的,而且LGWR ASYNC(异步)是
Oracle推荐的传输模式,Data Guard能够从Standby redo log 恢复和应用更多的redo 数据,而不仅仅只是
从archived redo log 来恢复。Standby上的redo log同样建议多路传输,并且需要和Primary DB上一样大小
,注意,最低限度,Standby redo log应该至少比Primary DB redo log多一组,不过一般参考下面公式来
配置standby redo log group (下面所有值来自于Primary DB) .
(maximum number of logfiles for each thread + 1) * maximum number of threads
一般来说,单实例DB的 maximum number of threads=1 ,所以可以设置Standby redo log group 比Primary
DB上的redo log group 多一组即可,不过也可以多设置一些,以便提高性能 。
以上的设置主要是为了减少因Standby redo log文件不能被分配来写入的时候导致primary LGWR被block的可
能性。 备注: 参考workload,逻辑Standby可能需要更多的redo log组,这是因为逻辑Standby也写online
redo log 文件,这个动作优先于Standby redo log文件,
工作原理: http://download.oracle.com/docs/cd/B19306_01/server.102/b14239/log_transport.htm#i1234827
4. 修改 MAXLOGFILES and MAXLOGMEMBERS 参数,一般我们在primary database建立的时候都有更改到比较大,所以
基本不用修改。 如果确实需要修改,那么必须通过重建primary database或控制文件来实现。
5. 在standby DB上开始正式创建Standby redo log . 注意group number 不能跳跃式命名,如10,20,30 .
SQL> alter database add standby logfile group 10
('/data/orcl/stylog10a.log','/u01/product/oradata/stylog10b.log') SIZE 100M ;
SQL> alter database add standby logfile group 11
('/data/orcl/stylog11a.log','/u01/product/oradata/stylog11b.log') SIZE 100M ;
SQL> alter database add standby logfile group 12
('/data/orcl/stylog12a.log','/u01/product/oradata/stylog12b.log') SIZE 100M ;
SQL> alter database add standby logfile group 13
('/data/orcl/stylog13a.log','/u01/product/oradata/stylog13b.log') SIZE 100M ;
SQL> alter database add standby logfile group 14
('/data/orcl/stylog14a.log','/u01/product/oradata/stylog14b.log') SIZE 100M ;
SQL> alter database add standby logfile group 15
('/data/orcl/stylog15a.log','/u01/product/oradata/stylog15b.log') SIZE 100M ;
SQL> alter database add standby logfile group 16
('/data/orcl/stylog16a.log','/u01/product/oradata/stylog16b.log') SIZE 100M ;
注意: 虽然standby redo log只是在standby上担任角色,但是为了使后期Primary 及
Standby 快速切换, Oracle建议在Primary DB上建立standby redo log ,不需要DBA额外的
干涉。可以使用OEM自动配置在Primary 及Standby上的standby redo log .
6. 在Standby上查看 SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
7. 设置Primary database 的初始化参数。
Example 3-3 Primary Database: Primary Role Initialization Parameters
DB_NAME=tony
DB_UNIQUE_NAME=tony
LOG_ARCHIVE_CONFIG='DG_CONFIG=(tony,tonysty)'
LOG_ARCHIVE_DEST_1='LOCATION=/data/tony/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=tony'
LOG_ARCHIVE_DEST_2='SERVICE=tonysty LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) B_UNIQUE_NAME=tonysty'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
在Primary DB上事先设置好日后切换为Standby的参数 : Standby Role Initialization Parameters
这样在角色转换之后不需要对参数做变更。
FAL_SERVER=tonysty
FAL_CLIENT=tony
DB_FILE_NAME_CONVERT='tonysty','tony'
LOG_FILE_NAME_CONVERT= '/arch1/tonysty/','/arch1/tony/','/arch2/tonysty/','/arch2/tony/'
STANDBY_FILE_MANAGEMENT=AUTO
8. 热备份或RMAN备份来copy生产库中的文件建立一个备份。
SQL > alter tablespace log_data begin backup ;
拷贝数据文件
SQL > alter tablespace log_data end backup ;
9. 为Standby创建控制文件。
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/u01/controlsty.ctl';
10. 拷贝Primary DB中的spfile到Standby DB, 然后修改其中的参数。
DB_NAME=tony
DB_UNIQUE_NAME=tonysty
LOG_ARCHIVE_CONFIG='DG_CONFIG=(tony,tonysty)'
DB_FILE_NAME_CONVERT='tony','tonysty'
LOG_FILE_NAME_CONVERT='/arch1/tony/','/arch1/tonysty/','/arch2/tony/','/arch2/tonysty/'
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
LOG_ARCHIVE_DEST_1= 'LOCATION=/data/tonysty/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=tonysty'
LOG_ARCHIVE_DEST_2= 'SERVICE=tony LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=tony'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
STANDBY_FILE_MANAGEMENT=AUTO
FAL_SERVER=tony
FAL_CLIENT=tonysty
11. 在Standby database上,
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
SQL> ALTER SYSTEM SWITCH LOGFILE;
12. 在Standby database上,测试是否应用。
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG
2 ORDER BY SEQUENCE#;
SEQUENCE# APP
--------- ---
8 YES
9 YES
10 YES
11 YES
13. 在Standby database上,测试是否应用。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
14. 在Primary DB上加入 LOG_ARCHIVE_DEST_3 是为了在Primary DB切换为Standby DB的时候使用。
这个参数仅仅在Primary DB 转化为Standby role的时候生效。
LOG_ARCHIVE_DEST_3= 'LOCATION=/arch2/tony/ VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=tony'
LOG_ARCHIVE_DEST_STATE_3=ENABLE
15. 在primary db上 To build the LogMiner dictionary, issue the following statement:
SQL> EXECUTE DBMS_LOGSTDBY.BUILD;
执行的时候,Oracle recommends setting the UNDO_RETENTION initialization parameter to 3600 on both the primary and logical standby databases.
16. 如何将Physical Standby转换为Logical Standby .
SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY db_name; 数据库名称可以更改。
17. 由于数据库名称更改,所以在Standby上需要重新建立password file.
18. 调整Logical Standby初始化参数。
SQL> SHUTDOWN;
SQL> STARTUP MOUNT;
需要去更改 LOG_ARCHIVE_DEST_n , 因为逻辑standby是开启状态,会生成redo data, 并且有多种log file
(online redo log files, archived redo log files, and standby redo log files), 最好是分开本地目录。
比如: Standby自己产生的归档文件 LOG_ARCHIVE_DEST_1=LOCATION=/arch1/tonysty , 而从primary db上接收到
的归档文件使用 LOG_ARCHIVE_DEST_3=LOCATION=/arch2/tonysty .
Example 4-2 Modifying Initialization Parameters for a Logical Standby Database
LOG_ARCHIVE_DEST_1=
'LOCATION=/arch1/tonysty/
VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=tonysty'
LOG_ARCHIVE_DEST_2=
'SERVICE=tony LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=tony'
LOG_ARCHIVE_DEST_3=
'LOCATION=/arch2/tonysty/
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
DB_UNIQUE_NAME=tonysty'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_DEST_STATE_3=ENABLE
19. 开启逻辑Standby : SQL> ALTER DATABASE OPEN RESETLOGS;
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
20. Managing a Logical Standby Database
http://download.oracle.com/docs/cd/B19306_01/server.102/b14239/manage_ls.htm#g1057004
http://download.oracle.com/docs/cd/B19306_01/server.102/b14239/log_apply.htm#i1036189