[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;

相关推荐