[dg数据库每天都要手动同步]oracleDataGuard不能实时自动同步
本帖最后由mssql_wangwang于2017-9-2315:26编辑
最近在学习Oracle的DG,已经配置成功DG,可是每次都需要在主库运行altersystemswitchlogfile;数据才能完成同步,
看网上有说在备库执行alterdatabaserecovermanagedstandbydatabasedisconnectfromsession;
可仍然是每次只能手动的去运行数据才能同步,
想问下怎么才能实现数据库主Parimary和standby能自动实时的同步数据呢,
比如我在主库插入或修改一条数据并且commit;能在备库立即查询出来。就好像SQLSERVER的Alwayson功能一样,能自动同步。
Oracle版本为12C
备库模式:
SQL>selectopen_modefromv$database;
OPEN_MODE
--------------------
READONLYWITHAPPLY
配错了呗。贴出你的完整步骤吧。
jieyancai发表于2017-9-2321:00
配错了呗。贴出你的完整步骤吧。
一、主库配置
--将主库设置为FORCELOGGING模式
SQL>alterdatabaseforcelogging;
SQL>selectforce_loggingfromv$database;
--修改主库参数文件
altersystemsetdb_unique_name=‘ORCLMAIN‘scope=spfile;
altersystemsetlog_archive_config=‘DG_CONFIG=(ORCLMAIN,ORCLSTANDBY)‘;
altersystemsetlog_archive_dest_1=‘LOCATION=/data/archlogvalid_for=(all_logfiles,all_roles)db_unique_name=ORCLmain‘scope=spfile;
altersystemsetlog_archive_dest_2=‘SERVICE=ORCLSTANDBYlgwrasyncvalid_for=(online_logfile,primary_role)db_unique_name=ORCLSTANDBY‘scope=spfile;
altersystemsetlog_archive_dest_state_1=ENABLE;
altersystemsetlog_archive_dest_state_2=ENABLE;
altersystemsetfal_client=‘ORCLMAIN‘scope=spfile;
altersystemsetfal_server=‘ORCLSTANDBY‘scope=spfile;
altersystemsetstandby_file_management=autoscope=spfile;
alterdatabaseaddstandbylogfilegroup6(‘/oracle/app/redolog/redo06_1.log‘,‘/data/redolog/redo06_2.log‘)size500M;
alterdatabaseaddstandbylogfilegroup7(‘/oracle/app/redolog/redo07_1.log‘,‘/data/redolog/redo07_1.log‘)size500M;
alterdatabaseaddstandbylogfilegroup8(‘/oracle/app/redolog/redo08_1.log‘,‘/data/redolog/redo08_1.log‘)size500M;
--重启数据库
SQL>shutdownimmediate;
SQL>startup
SQL>createpfilefromspfile;
--将主库pfile文件拷贝到备库
scp-P2237$ORACLE_HOME/dbs/initORCLmain.oraORCLstandby:$ORACLE_HOME/dbs--拷贝pfile文件到备库
scp-P2237$ORACLE_HOME/dbs/orapwORCLmain.oraORCLstandby:$ORACLE_HOME/dbs--拷贝密码文件到备库
二、备库配置
--配置监听(配置静态注册)
vim$ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER=
(SID_LIST=
(GLOBAL_DBNAME=ORCLma)
(ORACLE_HOME=/oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME=ORCLmain)
)
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.6)(PORT=5015))
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC5015))
)
)
--修改tnsnames文件
ORCLSTANDBY=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.6)(PORT=5015))
)
(CONNECT_DATA=
(SERVICE_NAME=ORCLma)
)
)
ORCLMAIN=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.7)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=ORCLmain)
)
)
--创建11g数据库基本目录
#su-oracle
mkdir-p/oracle/app/oracle/admin/ORCLmain/{adump,dpdump,pfile}
mkdir-p/oracle/app/oracle/fast_recovery_area/{ORCLmain,ORCLMAIN}
mkdir-p/data/oradata/ORCLmain
mkdir-p/data/archlog
--修改备库pfile文件
*.db_name=‘ORCLma‘
*.db_unique_name=‘ORCLstandby‘
*.fal_client=‘ORCLSTANDBY‘
*.fal_server=‘ORCLMAIN‘
*.log_archive_dest_2=‘SERVICE=ORCLMAINlgwrasyncvalid_for=(online_logfile,primary_role)db_unique_name=ORCLMAIN‘
--备库创建-SID
--oradim-new-sidORCLSTANDBY
--将备库启动nomount状态
SQL>createspfilefrompfile=‘$ORACLE_HOME/dbs/initORCLmain.ora‘
SQL>startupnomount;
三、在备库中使用RMAN开始dumplicate(复制)数据库
[~]$rmantarget‘sys/"SysTest!"‘@ORCLmainauxiliary‘sys/"SysTest"‘@ORCLstandby
RMAN>duplicatetargetdatabaseforstandbynofilenamecheckfromactivedatabase;
注:无报错,复制成功,继续以下步骤
1.查看备库状态
SQL>selectopen_mode,database_role,db_unique_namefromv$database;
alterdatabaserecovermanagedstandbydatabasedisconnectfromsession;
以上为配置步骤,请指教。谢谢
mssql_wangwang发表于2017-9-2410:44
一、主库配置
--将主库设置为FORCELOGGING模式
你试试以下命令,看看结果如何:
在备库机器上:
sqlplus/assysdba
SHUTDOWNIMMEDIATE;
STARTUPMOUNT;
ALTERDATABASERECOVERMANAGEDSTANDBYDATABASEDISCONNECTFROMSESSION;
selectopen_modefromv$database;
本帖最后由mssql_wangwang于2017-9-2413:40编辑
onca416发表于2017-9-2411:54
你试试以下命令,看看结果如何:
在备库机器上:
SQL>selectopen_modefromv$database;
OPEN_MODE
--------------------
READONLYWITHAPPLY
试过以上方法,但是就是不能自动同步数据过来。仍然需要在主库手动执行altersystemswitchlogfile;
每次都要手动强制归档备库才能查询出同步的数据。我也试过DG的三种模式,都不行,最大保护,最大可用,最大性能都是一样的问题。
到底是哪里问题呢,
SQLSERVER的alwayson无论同步还是异步数据基本上不会相差5秒就会到备库上面。
我这个也是这样,你看看日志组状态,是不是都是UNASSIGNED?
selectgroup#,sequence#,first_change#,next_change#,status,used,con_idfromv$standby_log;
可能是备库strandby日志组大小比主库onlineredolog要小,造成的这个问题。
我改了备库standby日志组大小,就解决了。
yueli34发表于2017-9-2420:47
可能是备库strandby日志组大小比主库onlineredolog要小,造成的这个问题。
我改了备库standby日志组大小...
STANDBY:
SQL>SELECTgroup#,members,bytes/1024/1024byte_mb,statusFROMv$log;
GROUP#MEMBERSBYTE_MBSTATUS
----------------------------------------------
1250CURRENT
2250CLEARING
3250CLEARING
MAIN:
SQL>SELECTgroup#,members,bytes/1024/1024byte_mb,statusFROMv$log;
GROUP#MEMBERSBYTE_MBSTATUS
----------------------------------------------
1250CURRENT
2250INACTIVE
3250INACTIVE
两边都是一样大的。
STANDBY:
SQL>selectgroup#,sequence#,first_change#,next_change#,status,used,con_idfrom
v$standby_log;
GROUP#SEQUENCE#FIRST_CHANGE#NEXT_CHANGE#STATUSUSED
-----------------------------------------------------------------
CON_ID
----------
61423865432387891ACTIVE484352
71323846162386543ACTIVE761344
81523878912426347ACTIVE26267136
0.
MAIN:
SQL>selectgroup#,sequence#,first_change#,next_change#,status,used,con_idfrom
v$standby_log;
GROUP#SEQUENCE#FIRST_CHANGE#NEXT_CHANGE#STATUSUSED
-----------------------------------------------------------------
CON_ID
----------
60UNASSIGNED0
70UNASSIGNED0
80UNASSIGNED0
主库为UNASSIGNED
mssql_wangwang发表于2017-9-2510:51
STANDBY:
SQL>SELECTgroup#,members,bytes/1024/1024byte_mb,statusFROMv$log;
备库看standby日志组是v$standby_log视图。不是v$log视图。
alterdatabaserecovermanagedstandbydatabaseusingcurrentlogfiledisconnectfromsession;
代替
alterdatabaserecovermanagedstandbydatabasedisconnectfromsession;