查看v$logfile(文件的位置)、v$standby_log(standby log的信息)来确认。
SQL> select group#,type,member from v$logfile;
SQL> select group#,dbid,thread#,sequence#,status from v$standby_log
添加多组日志文件:
SQL>alter database add standby logfile member '/u01/oracle/oradata/devdb/sredo02.log' to group 4;
SQL> select group#, member from v$logfile where type='STANDBY';
SQL> select group#, dbid, bytes from v$standby_log;
SRL文件是为了解决下列两个主要问题
数据保护 如果没有使用SRL文件,而且与数据库的连接中断,将无法保留传入的重做数据--例如如果主数据库出现故障,然后进行故障转移,那么连接中断时正在发送的数据就会丢失。 如果
将重做数据写入SRL,故障转移时已经永久保存了重做数据并可供使用。
性能目标
当LNS连接到备用数据库时,仅当在备用数据库上的RFS进程创建和初始化了归档日志,LNS/ARCH才能开始发送重做数据。如果日志文件很大,这会导致暂停时间过长。 该事件在日志切换时发
生,因而对主数据库的吞吐量影响很大。
配置了SRL,实时应用成为可能。
2.配置Primary Database(主库)SPFILE参数
2. 1.
log_archive_config
该参数通过DG_CONFIG 属性罗列同一个Data Guard 中所有DB_UNIQUE_NAME(含primary db 及standby db),以逗号分隔
primary端和standby端相同
SQL>show parameter log_archive_config
SQL>alter system set log_archive_config='DG_CONFIG=(devdb,dgdevdb)' scope=spfile;
2.2
log_archive_dest_2
添加归档日志传输位置,archive_dest参数包括两种类型位置,location和service。
Location参数表示本地目录归档日志存放,而service表示通过Oracle NET服务传输过去。要实现Dataguard组件,需要将日志指定到service里面。
SQL> alter system set
log_archive_dest_2='SERVICE=dgdevdb valid_for=(online_logfiles,primary_role) db_unique_name=dgdevdb'
scope=spfile;
SQL> alter system set log_archive_dest_state_2=enable;
注意:Online_logfiles和Primary_role表示当前实例为Primary角色的时候,才传递日志。
2.3
db_file_name_convert:主数据库和备用数据库的数据文件转换目录对映(如果两数据库的目录结构不一样),如果有多个对映,逐一指明对映关系
格式:*.db_file_name_convert=主数据库数据文件目录,备用数据库数据文件目录
primary端(主库进行设置,是为了在切换后主备角色互换):
SQL> alter system set db_file_name_convert='devdb','dgdevdb' scope=spfile;
log_file_name_convert:指明主数据库和备用数据库的log文件转换目录对映
格式:*. log_file_name_convert=主数据库log目录,备用数据库目录
primary端(主库进行设置,是为了在切换后主备角色互换):
SQL> alter system set log_file_name_convert='devdb','dgdevdb' scope=spfile;
2.4
standby_file_management参数,默认是manual。该参数用于控制Primary与Standby之间文件创建的方式。标准的DG环境下,在Primary DB下添加数据文件,会自动在Standby中增加文件。
SQL> show parameter standby_file_management
SQL> alter system set standby_file_management=auto;
SQL> show parameter standby_file_management;
OK ,主数据库相关的参数都已经配置完成,很简单吧。就几个参数。
下面来配置网络环境
配置网络Oracle Net内容
1.配置网络服务名:添加主库,备库的服务名
tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
DEVDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.128.120)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = DEVDB)
)
)
DGDEVDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.128.120)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = DGDEVDB)
)
)
2.添加静态注册。
listener.ora
# listener.ora Network Configuration File: /u01/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = devdb)
(ORACLE_HOME = /u01/oracle/product/11.2.0/db_1)
(SID_NAME = devdb)
)
(SID_DESC =
(GLOBAL_DBNAME =dgdevdb)
(ORACLE_HOME = /u01/oracle/product/11.2.0/db_1)
(SID_NAME = dgdevdb)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.128.120)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.128.120)(PORT = 1522))
)
)
ADR_BASE_LISTENER = /u01/oracle
密码文件设置,在使用RMAN复制数据库时要使用管理员密码,为了方便,保持密码一样,因此我拷贝了主库的密码文件。
[oracle@pxboracle dbs]$ cp orapwdevdb orapwdgdevdb
[oracle@pxboracle dbs]$ ls -l | grep orapw
创建备库需要的目录
[oracle@pxboracle dbs]$mkdir -p /u01/oracle/admin/dgdevdb/adump
[oracle@pxboracle dbs]$mkdir -p /u01/oracle/flash_recovery_area/dgdevdb
[oracle@pxboracle dbs]$mkdir -p /u01/oracle/oradata/dgdevdb
[oracle@pxboracle dbs]$mkdir -p /u01/oracle/diag/rdbms/dgdevdb
到此为止,所有的参数文件都已经配置完毕!
下面启动备库的实例
启动standby实例
1.
在/u01/oracle/product/11.2.0/db_1/dbs下新创建一个initdgdevdb.ora 参数文件
[oracle@pxboracle dbs]$ vi initdgdevdb.ora
db_name=dgdevdb
[oracle@pxboracle dbs]$ export ORACLE_SID=dgdevdb
[oracle@pxboracle dbs]$ sqlplus /nolog
SQL> conn / as sysdba
SQL> startup nomount pfile='/u01/oracle/product/11.2.0/db_1/dbs/initdgdevdb.ora';
[oracle@pxboracle dbs]$ ps -ef | grep pmon
注:在启动备库的实例过程中,我遇到了如下错误:
ORA-00845: MEMORY_TARGET not supported on this system
如果您也遇到了,请参考我写的《ORA-00845: MEMORY_TARGET not supported on this system报错解决 》
http://blog.itpub.net/12798004/viewspace-1144633/
RMAN进行duplicate操作
1.编写复制数据库脚本
[oracle@pxboracle]# vi standby_sql
run {
duplicate target database for standby from active database
spfile
parameter_value_convert 'devdb','dgdevdb'
set db_unique_name='dgdevdb'
set control_files='/u01/oracle/oradata/dgdevdb/control01.ctl'
set db_file_name_convert='devdb','dgdevdb'
set log_file_name_convert='devdb','dgdevdb'
set log_archive_max_processes='5'
set fal_client='dgdevdb'
set fal_server='devdb'
set standby_file_management='AUTO'
set log_archive_config='dg_config=(devdb,dgdevdb)'
set log_archive_dest_2='service=devdb async valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=devdb';
}
[oracle@pxboracle]# chmod 755 standby_sql
启动RMAN进行duplicate,连接target和auxiliary。
[oracle@pxboracle dbs]$ rman nocatalog
RMAN>connect target sys/devdb@devdb
RMAN>connect auxiliary sys/devdb@dgdevdb
RMAN>@/u01/standby_sql
出现 **end-of-file**
脚本没有报错,执行成功。
对DG进行测试
主库
由于我们修改主库数据参数是通过命令来修改的,参数都是保存在spfile中的(scope=spfile)。
因此需要重启主库使参数生效。
SQL> startup force (生产数据库千万别使用force重新启动,一定要一致性关闭数据库)
SQL> conn scott/tiger@devdb
SQL>create table dg_test as select * from user_tables;
SQL> select count(*) from dg_test;
SQL> atler system switch logfile;--手工切换日志,让日志传递到备库上。
备库上:
SQL> conn / as sysdba
SQL> alter database recover managed standby database cancel;
SQL> alter database open;
SQL> conn scott/tiger@dgdevdb
SQL> select count(*) from dg_test;
向主库数据表添加数据,进行修改。
主库上执行
SQL> insert into dg_test select * from user_tables;
SQL> commit;
SQL> select count(*) from dg_test;
SQL>alter system switch logfile;
此时备(standby)库,并没有同步。因为我们刚刚关闭cancel同步。下面启动同步过程,接受新的数据。
备库上执行
SQL> alter database recover managed standby database using current logfile disconnect from session;
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
SQL> select count(*) from scott.dg_test;
同步成功!
注意:在11g中,READ ONLY WITH APPLY状态表示在同步同时,也可以应用数据库的Redo Log。如果是之前的版本,备库需要恢复到mount状态。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12798004/viewspace-1144677/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12798004/viewspace-1144677/