Dataguard日常维护及故障解决
2018-03-29 14:36
225 查看
Dataguard日常维护及故障解决 一、 dataguard环境要求2.1数据库版本必须为企业版,版本最好在9i以上,主备库数据库的版本必须一致。2.2 主备数据库所在操作系统版本以及位数要求一样。2.3 主备库硬件配置可以不一样,看具体应用。2.4 主数据库和备数据库都可以是单实例的,也可以是RAC。2.5 同一个dataguard环境中数据库名必须一样。主备库的目录结构要求一样(逻辑备库可以不一样)。2.6关闭192.168.113.133的双机(服务、实例、监听)2.7Share和mount后cp文件2.8Unix转换dos2unix –ascii copy….sh copy….sh二、 对主库的修改3.1修改归档方式要使用dataguard做数据库容灾,主库必须处于归档模式下。如果已经是归档模式则跳过此步。修改归档模式步骤SQL> archive log list;Database logmode NoArchive ModeAutomaticarchival DisabledArchivedestination /opt/archOldest online logsequence 1Current log sequence 3可见当前数据库处于非归档模式.--关闭数据库SQL> shutdownimmediate; 启动数据库到mount阶段SQL> startup mount;修改数据库为归档模式SQL> alter database archivelog;Database altered.打开数据库SQL> alter database open;查看当前数据库模式SQL> archive log list;Database log mode ArchiveModeAutomaticarchival EnabledArchivedestination /opt/archOldest online logsequence 1Next log sequence to archive 3Current logsequence 3可见数据库已经处于归档模式 。归档模式修改完成。3.2打开Forced Logging模式 查询当前日志模式 SQL>select FORCE_LOGGING fromv$database; FOR --- NO 可见当前数据库为非强制日志模式 修改数据库为强制日志模式 SQL> alter database force logging; Databasealtered. 再次查询 SQL> select FORCE_LOGGING fromv$database; FOR --- Yes提示:关于FORCE LOGGING想必大家知道有一些DDL语句可以通过指定NOLOGGING子句的方式避免写
4000
redolog(目的是提高速度,某些时候确实有效),指定数据库为FORCE LOGGING模式后,数据库将会记录除临时表空间或临时回滚段外所有的操作而忽略类似NOLOGGING之类的指定参数。如果在执行force logging时有nologging之类的语句在执行,则forcelogging会等待直到这类语句全部执行。FORCE LOGGING是做为固定参数保存在控制文件中,因此其不受重启之类操作的影响(只执行一次即可),如果想取消,可以通过alter database no force logging语句关闭强制记录。3.3创建密码文件 [oracle@localhost ~]$ orapwdfile=orapworcl password=123 force=y 该密码文件默认生成位置为$ORACLE_HOME/dbs目录.主备库的密码必须一致,否则归档日志无法在主备库之间同步。3.4修改初始化参数增加以下参数,如果在初始化参数已经有配置,则看需要做相应的修改。1、与主库角色相关的初始化参数说明:DB_NAME注意保持同一个Data Guard环境中所有数据库DB_NAME相同DB_UNIQUE_NAME为每一个数据库指定一个唯一的名称,以标示同一个dataguard环境中不同的数据库。LOG_ARCHIVE_CONFIG 该参数通过DG_CONFIG属性罗列同一个Data Guard中所有DB_UNIQUE_NAME(含主库db及备库db),以逗号分隔。例如:LOG_ARCHIVE_CONFIG='DB_CONFIG=(orcl,orcl2)'LOG_ARCHIVE_DEST_n 归档文件的生成路径。该参数非常重要,dataguard就是通过这里的设置传输日志的。LOG_ARCHIVE_DEST_STATE_n指定参数值为ENABLE,标示对应的LOG_ARCHIVE_DEST_n参数是否有效。REMOTE_LOGIN_PASSWORDFILE推荐设置参数值为EXCLUSIVE或者SHARED,注意保证相同Data Guard配置中所有db服务器sys密码相同。如果不同日志传输会失败。数据库默认是EXCLUSIVE,一般不用修改。LOG_ARCHIVE_FORMAT指定归档文件格式。一般也不用修改,保持默认即可 2、以下参数为备库角色相关的参数,建议在主库的初始化参数中也进行设置,这样在主备库角色相互转换后不需要做修改dataguard也能正常运行。FAL_SERVER 指定备库到主数据库的连接服务名,FAL_SERVER = orcl2日志所在服务器。FAL_CLIENT 指定主库到备库的连接服务名,FAL_CLIENT = orcl日志接收客户端。 STANDBY_FILE_MANAGEMENT如果主库的数据文件发生修改(如新建,重命名等)则按照本参数的设置在备库中做相应修改。设为AUTO表示自动管理。设为MANUAL表示需要手工管理。例如:STANDBY_FILE_MANAGEMENT=AUTO 下面开始修改主库的初始化参数。db_name参数已经设置,不用修改SQL> alter system set db_unique_name =’orcl’scope=spfile;System altered. SQL> alter system setlog_archive_config='dg_config=(orcl,orcl2)' scope=spfile;System altered.---这里的orcl和orcl2为db_unique_name SQL> alter system set log_archive_dest_1='location=/opt/arch'scope=spfile;System altered.--/opt/arch为本地的归档目录,需要手动创建该目录,当然也可以指定别的路径。注意oracle账号对该目录又可读写的权限。 SQL> alter system setlog_archive_dest_state_1=enable scope=spfile;System altered.--这个通常不用修改,系统默认的就是enable。SQL>alter system set log_archive_dest_2='service=orcl2valid_for=(online_logfiles,primary_role) arch asyncNOAFFIRMdb_unique_name=orcl2' scope=spfile;System altered.-----这里的service为主库连接到备库的服务名,后面会在tnsnames.ora文件中配置valid_for参数说明这个归档日志目的地在本数据库为主库的角色下才需要把online_logfile传输到备库去。arch async NOAFFIRM说明的是同步的方式,这个同步的方式有三种方式,最大保护,最大性能,最大可用。每个方式有不同的设置,具体见第五项说明。 SQL> alter system set log_archive_dest_state_2=enablescope=spfile;System altered.以上修改的是作为主库角色需要的参数,为了方便以后主备库切换,建议在主库中也配置作为备库角色的相关参数。SQL> alter system set fal_server=orcl2 scope=spfile;System altered. SQL> alter system set fal_client=orcl scope=spfile;System altered. SQL> alter system set standby_file_management=autoscope=spfile;System altered.生成静态参数文件,以备后面给备库使用。SQL> create pfile from spfile;File created.重新启动主库,使参数生效。3.5用rman工具备份主库创建一个备份文件存放目录,本例为/opt/rmanbk,同时赋予oracle账号可读写该目录。[root@localhost opt]# mkdir rmanbk[root@localhost opt]# chown oracle:oinstall rmanbk--注意以上用root账号创建目录开始备份数据库[oracle@localhost ~]$ rman target /Recovery Manager: Release10.2.0.1.0 - Production on TueAug 17 09:40:45 2010Copyright (c) 1982, 2005,Oracle. All rights reserved.connected to target database: ORCL (DBID=1564056489)RMAN>backupfull database format='/opt/rmanbk/%d_%s.dbf' plus archivelog delete input; Starting backup at 17-AUG-10current log archivedusing target database control file instead of recoverycatalogallocated channel: ORA_DISK_1channel ORA_DISK_1: sid=147 devtype=DISKchannel ORA_DISK_1: starting archive log backupsetchannel ORA_DISK_1: specifying archive log(s) in backupsetinput archive log thread=1 sequence=3 recid=1stamp=727261781input archive log thread=1 sequence=4 recid=2stamp=727263902channel ORA_DISK_1: starting piece 1 at 17-AUG-10channel ORA_DISK_1: finished piece 1 at 17-AUG-10piecehandle=/opt/oracle/product/10.2.0/db_1/flash_recovery_area/ORCL/backupset/2010_08_17/o1_mf_annnn_TAG20100817T094503_66mtf0qt_.bkptag=TAG20100817T094503 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time:00:00:04channel ORA_DISK_1: deleting archive log(s)archive log filename=/opt/arch/1_3_726573806.dbf recid=1stamp=727261781archive log filename=/opt/arch/1_4_726573806.dbf recid=2stamp=727263902Finished backup at 17-AUG-10 Starting backup at 17-AUG-10using channel ORA_DISK_1channel ORA_DISK_1: starting full datafile backupsetchannel ORA_DISK_1: specifying datafile(s) in backupsetinput datafile fno=00001name=/opt/oradata/orcl/system01.dbfinput datafile fno=00003name=/opt/oradata/orcl/sysaux01.dbfinput datafile fno=00002name=/opt/oradata/orcl/undotbs01.dbfinput datafile fno=00004name=/opt/oradata/orcl/users01.dbfchannel ORA_DISK_1: starting piece 1 at 17-AUG-10channel ORA_DISK_1: finished piece 1 at 17-AUG-10piece handle=/opt/rmanbk/ORCL_2.dbf tag=TAG20100817T094507comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time:00:01:05channel ORA_DISK_1: starting full datafile backupsetchannel ORA_DISK_1: specifying datafile(s) in backupsetincluding current control file in backupsetincluding current SPFILE in backupsetchannel ORA_DISK_1: starting piece 1 at 17-AUG-10channel ORA_DISK_1: finished piece 1 at 17-AUG-10piece handle=/opt/rmanbk/ORCL_3.dbftag=TAG20100817T094507 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time:00:00:03Finished backup at 17-AUG-10 Starting backup at 17-AUG-10current log archivedusing channel ORA_DISK_1channel ORA_DISK_1: starting archive log backupsetchannel ORA_DISK_1: specifying archive log(s) in backupsetinput archive log thread=1 sequence=5 recid=3stamp=727263976channel ORA_DISK_1: starting piece 1 at 17-AUG-10channel ORA_DISK_1: finished piece 1 at 17-AUG-10piecehandle=/opt/oracle/product/10.2.0/db_1/flash_recovery_area/ORCL/backupset/2010_08_17/o1_mf_annnn_TAG20100817T094616_66mth9qz_.bkptag=TAG20100817T094616 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time:00:00:02channel ORA_DISK_1: deleting archive log(s)archive log filename=/opt/arch/1_5_726573806.dbf recid=3stamp=727263976Finished backup at 17-AUG-10主库备份完成3.6创建备库控制文件SQL> alter database create standby controlfile as'/opt/rmanbk/control01.ctl'; Database altered.创建一个备库使用的控制文件。到此我们已经为备库准备好了静态参数文件,备库控制文件,主库数据库备份。在备库主机上建一目录,把上述文件通过scp命令传输到备库主机上。其中备份目录要和主库上的备份目录路径一样,不然在用rman还原备库时候会找不到文件。即在备库上也建一个目录/opt/rmanbk,我们把所有的文件都放在这个目录下。[oracle@localhost ~]$ scp /opt/rmanbk/*oracle@192.168.18.205:/opt/rmanbk/The authenticity of host '192.168.18.205(192.168.18.205)' can't be established.RSA key fingerprint is de:b4:0e:e6:c5:56:71:47:e1:69:5e:f1:c5:8b:48:b4.Are you sure you want to continue connecting (yes/no)?yesWarning: Permanently added '192.168.18.205' (RSA) to thelist of known hosts.oracle@192.168.18.205's password:control01.ctl 100%6896KB 6.7MB/s 00:00 ORCL_2.dbf 100% 523MB 11.6MB/s 00:45 ORCL_3.dbf 100%6976KB 6.8MB/s 00:00 上述已经传输了备份文件和备库的控制文件,下面把主库的静态参数文件传输到备库[oracle@localhost~]$scp $ORACLE_HOME/dbs/initorcl.oraoracle@192.168.18.205:/opt/rmanbk/oracle@192.168.18.205's password:initorcl.ora 100%1419 1.4KB/s 00:003.7创建备库的redo log sql> alter database add standby logfile group 4('D:\oracle\product\10.2.0\oradata\smsdb\STANDBYRD01.LOG') size 50M;sql> alter database add standby logfile group 5('D:\oracle\product\10.2.0\oradata\smsdb\STANDBYRD02.LOG') size 50M; sql> alter database add standby logfile group 6('D:\oracle\product\10.2.0\oradata\smsdb\STANDBYRD03.LOG') size 50M;3.8修改listener.ora和tnsnames.ora修改listener.ora文件,修改这部分内容,目的是使用oracle服务在监听器中静态注册。SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME =/opt/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) )修改成(增加红色部分内容)SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME =/opt/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME =/opt/oracle/product/10.2.0/db_1) (SID_NAME = orcl) ) )【备注】当使用静态注册的时候, (SID_NAME = orcl)中的sid_name务必要小写,不管数据库中instance_name参数是否是大写。不然通过静态注册的服务无法连接数据库实例。同oracle用户的环境变量ORACLE_SID一样,也必须用小写。修改静态注册可以使用netmgr工具配置。修改tnsnames.ora文件,增加主库连接到备库的服务名并修改对本地的连接用ip表示.这样主备库可以统一。orcl = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.18.32)(PORT = 1521)) (CONNECT_DATA = (SERVER =DEDICATED) (SERVICE_NAME = orcl) ) )orcl2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL =TCP)(HOST =192.168.18.205)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl2) ) ) host地址根据实际情况修改。到此对主库的修改基本完成。三、 对备库的修改4.1设置oracle环境变量和oracle实例名修改oracle账号根目录下的.bash_profile文件。增加红色部分代码。目的是创建一个数据库实例sid。[oracle@localhost ~]$ vi .bash_profile# .bash_profile # Get the aliases and functionsif [ -f ~/.bashrc ]; then . ~/.bashrcfi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATHexport LC_ALL=en_US.UTF-8export ORACLE_HOME=/opt/oracle/product/10.2.0/db_1export PATH=$PATH:$ORACLE_HOME/binexport NLS_LANG=american_america.ZHS16GBKexport ORACLE_SID=orcl24.2建立备库的参数文件备库的参数文件我们根据主库的参数文件做一些修改即可。拷贝/opt/rmanbk/initorcl.ora到$ORACLE_HOME/dbs/initorcl2.ora。注意要修改参数文件名称。(oracle数据库默认的静态参数文件名称为init+$ORACLE_SID+.ora)[oracle@localhost ~]$ cp /opt/rmanbk/initorcl.ora$ORACLE_HOME/dbs/initorcl2.ora修改initorcl2.ora文件内容,需要修改的部分以及修改后如下:*.db_unique_name='ORCL2'*.fal_client='ORCL2' *.fal_server='ORCL'*.log_archive_dest_2='service=orclvalid_for=(online_logfiles,primary_role) arch async NOAFFIRMdb_unique_name=orcl'删除*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'删除(如果备库不存在flash目录则删除)*.db_recovery_file_dest='/opt/oracle/product/10.2.0/db_1/flash_recovery_area'删除(如果备库不存在flash目录则删除)*.db_recovery_file_dest_size=2147483648 别的不需要改动。尽量保持主备库的sga和pga相关参数一样。 4.3建立备库相关的目录参考主库在备库上建立相关的数据库目录[oracle@localhost ~]$ mkdir /opt/arch创建备库的本地归档目录[oracle@localhost ~]$ mkdir /opt/oradata/orcl 创建数据库目录[oracle@localhost ~]$ mkdir /opt/rmanbk创建数据库备份文件目录[oracle@localhost ~]$ mkdir-p $ORACLE_HOME/admin/orcl/{adump,bdump,cdump,dpdump,pfile,udump}创建数据库后台运行日志目录,这些目录是需要同参数文件中的设置一致的。4.4建立备库密码文件可以手动建也可以拷贝主库的密码文件,前提是主备库设置的密码要一致,否则日志传输会失败。[oracle@localhost ~]$orapwd file=orapworcl2 password=123force=y注意文件名称不能有误,否则主库连接不上备库,导致归档日志同步失败4.5修改listener.ora和tnsnames.ora可以拷贝主库的listener.ora,tnsnames.ora,sqlnet.ora三个文件到备库。方法同上3.6。sqlnet.ora文件和tnsnames.ora文件不用修改,与主库保持一样即可。 修改listener.ora文件,修改这部分内容,目的是使用oracle服务在监听器中静态注册。SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME =/opt/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) )修改成(增加红色部分内容)SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME =/opt/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = orcl2) (ORACLE_HOME =/opt/oracle/product/10.2.0/db_1) (SID_NAME = orcl2) ) )这个时候在主备库上分别用tnsping命令测试orcl和orcl2服务名看是否通。如果不通则修改检查以上文件配置是否正确。[oracle@localhost admin]$ tnsping orcl2TNSPingUtility for Linux: Version10.2.0.1.0 - Productionon 18-AUG-2010 19:32:00 Copyright (c) 1997, 2005, Oracle. All rightsreserved.Used parameter files:/opt/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the aliasAttempting to contact (DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.18.205)(PORT = 1521))) (CONNECT_DATA= (SERVICE_NAME = orcl2)))OK (0 msec) [oracle@localhost admin]$ tnsping orclTNSPingUtility for Linux: Version10.2.0.1.0 - Productionon 18-AUG-2010 19:33:38Copyright (c) 1997, 2005, Oracle. All rightsreserved.Used parameter files:/opt/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the aliasAttempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL= TCP)(HOST=192.168.18.32)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl)))OK (10 msec)从上面两个服务名均已经互通。4.6恢复控制文件拷贝三份备库控制文件到数据库目录[oracle@localhost rmanbk]$ cp control01.ctl/opt/oradata/orcl/control01.ctl[oracle@localhost rmanbk]$ cp control01.ctl/opt/oradata/orcl/control02.ctl[oracle@localhost rmanbk]$ cp control01.ctl/opt/oradata/orcl/control03.ctl4.7用RMAN还原出备库[oracle@localhost ~]$ rman target /Recovery Manager: Release10.2.0.1.0 - Production on WedAug 18 19:46:59 2010Copyright (c) 1982, 2005, Oracle. All rightsreserved.connected to target database (not started)RMAN> startup mount;Oracle instance starteddatabase mountedTotal System Global Area 167772160bytesFixedSize 1218292bytesVariableSize 62916876bytesDatabaseBuffers 96468992bytesRedoBuffers 7168000bytes启动数据库到mount阶段,准备还原RMAN> restore database;Starting restore at 18-AUG-10using target database control file instead of recoverycatalogallocated channel: ORA_DISK_1channel ORA_DISK_1: sid=157 devtype=DISK channel ORA_DISK_1: starting datafile backupset restorechannel ORA_DISK_1: specifying datafile(s) to restorefrom backup setrestoring datafile 00001 to/opt/oradata/orcl/system01.dbfrestoring datafile 00002 to/opt/oradata/orcl/undotbs01.dbfrestoring datafile 00003 to/opt/oradata/orcl/sysaux01.dbfrestoring datafile 00004 to /opt/oradata/orcl/users01.dbfchannel ORA_DISK_1: reading from backup piece/opt/rmanbk/ORCL_2.dbfchannel ORA_DISK_1: restored backup piece 1piece handle=/opt/rmanbk/ORCL_2.dbftag=TAG20100817T094507channel ORA_DISK_1: restore complete, elapsed time:00:01:05Finished restore at 18-AUG-10RMAN>exit退出rman恢复管理器到此备库基本建立完成。4.8开启备库创建备库的动态参数文件SQL> create spfile from pfile;关闭数据库SQL> shutdown immediate;启动备库到mount状态SQL> startup mount;开始应用日志恢复SQL> alter database recover managed standby databasedisconnect from session;使备库处于日志恢复模式(备用模式)。SQL> select process,status from v$managed_standby;PROCESS STATUS--------- ------------ARCH CONNECTEDARCH CONNECTEDRFS IDLEMRP0 WAIT_FOR_LOG这时候备库的进程有以上几个,RFS - 远程文件接收进程MRP0 -日志应用进程 到此,需要测试一下备库是否可以接收到主库的归档日志。可在主库中手动归档一个日志文件(alter system switch logfile),然后查看在备库的归档目录中是否生成有新的归档日志文件,也可以在备库中用一下语句查询是否存在日志归档记录。select name,SEQUENCE#,APPLIED from v$archived_log orderby sequence#; 备注:对于物理备库(physical standby)来说,处于日志恢复模式的时候数据库是不能打开的。如果要打开只能先关闭日志恢复模式,然后以read only(只读方式)打开。(oracle11G版本可以在read only下应用归档日志)SQL>alter database recover managed standby databasecancel;停止日志恢复模式SQL>alter database open read only;打开数据库。物理备库在只读模式下可以增加临时文件。
SQL> alter database temp addtempfile '/opt/oradata/orcl/temp02.dbf' size100mreuse;这个时候备库还是可以接收主库传输过来的归档日志文件,只是不能应用日志而已。当用read only方式打开备库后只有重新启动才能使备库重新回到备用模式。4.9切换到DATAGUARD最大可用模式并开启实时应用一般情况下,到4.8步骤为止,dataguard的物理备库已经可以正常使用了。只是这时dataguard处于默认的最大性能模式,这个模式下,主库的重做日志只有在归档之后才会传输到备库上,然后备库才会应用日志。如果在归档之前主库数据库意外down机,那么这部分未归档的数据肯会丢失。为了避免这种情况的发生,可以使用最大可用模式。Oracle推荐最大可用模式使用LGWR ASYNC(异步)NOAFFIRM模式传输。实际的生产库推荐这种模式。在standby不可用时,最大可用模式会自动降低成最大性能模式,所以standby故障不会导致primay不可用。对于dataguard模式的介绍。以下是在dataguard默认的最大性能模式下切换到实际生成用途的最大可用模式. 1,在备库上增加备用重做日志文件,大小跟主库的在线重做日志一样。组的数量最好比在线重做日志多一两组(可调)。sql>alterdatabaserecovermanagedstandbydatabasecancel;--先取消日志应用sql > system alteredsql>alterdatabaseaddstandbylogfilegroup4('/opt/oradata/primary/std_redo01.log')size50M;sql > system alteredsql>alterdatabaseaddstandbylogfilegroup5 ('/opt/oradata/primary/std_redo02.log')size50M;sql > system alteredsql>alterdatabaseaddstandbylogfilegroup6 ('/opt/oradata/primary/std_redo03.log')size50M;sql > system alteredsql>alterdatabaseaddstandbylogfilegroup7 ('/opt/oradata/primary/std_redo04.log')size50M;sql > system altered sql>recovermanagedstandbydatabasedisconnectfromsession;------非实时应用模式或者用下面的语句开启备库的实时应用模式sql>recovermanagedstandbydatabaseusing current logfiledisconnectfromsession; 鉴于后面主备库切换的需要,在主库上也增加备用重做日志。当然要把主库处于mount状态下才可添加。可在下面统一修改。2,在主库上做修改(两个地方:一个是修改log_archive_dest_2参数,二是添加备用日志文件)sql>shutdownimmediate;sql> startupmount;sql>altersystemsetlog_archive_dest_2=’service=orcl valid_for=(online_logfiles,priamry_role)lgwr async noaffirmdb_unique_name=orcl2’scope=spfile;sql>alterdatabaseaddstandbylogfilegroup4('/opt/oradata/primary/std_redo01.log')size50M;sql>systemalteredsql>alterdatabaseaddstandbylogfilegroup5 ('/opt/oradata/primary/std_redo02.log')size50M;sql>systemalteredsql>alterdatabaseaddstandbylogfilegroup6 ('/opt/oradata/primary/std_redo03.log')size50M;sql>systemalteredsql>alterdatabaseaddstandbylogfilegroup7 ('/opt/oradata/primary/std_redo04.log')size50M;sql>systemalteredsql > alter database set standby databaseto maximize availability;--------切换到最大可用模式sql > alter database open;打开数据库 【注意事项】1,lgwr async noaffirm参数下主库的模式保护级别为RESYNCHRONIZATION SQL>selectdatabase_role,PROTECTION_MODE,PROTECTION_LEVELfromv$database;DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL----------- ---------------- ---------------PRIMARY MAXIMUMAVAILABILITYRESYNCHRONIZATION 备库的查询结果为:UNPROTECTED DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL---------------- ----------------------------------------PHYSICALSTANDBY UNPROTECTED UNPROTECTED 2,lgwr sync affirm参数下主库的模式保护级别为MAXIMUMAVAILABILITY SQL>selectdatabase_role,PROTECTION_MODE,PROTECTION_LEVELfromv$database;DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL----------- ---------------- ---------------PRIMARY MAXIMUMAVAILABILITYMAXIMUMAVAILABILITY 备库的查询结果为:MAXIMUMAVAILABILITY DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL------------------------------------ --------------------PHYSICALSTANDBY MAXIMUMAVAILABILITY MAXIMUMAVAILABILITY 为了不给生产库带来太大的影响,推荐使用第一种参数。对于主库采用lgwr传输日志的方式。日志是实时传输的,至于备库是否采用实时恢复模式都是不会丢失数据的。四、 DATAGUARD的三种保护模式说明Dataguard有三种保护模式,最大保护、最大可用性和最大性能,对主库的性能影响和对网络的要求依次降低。
在最大保护模式下,备库一旦无法接收日志,主库的所有操作被挂起,与备库的日志传输恢复正常时才会恢复,如果挂起时间较长,主库实例会中断,因此一般生产环境中很少会使用这种模式。在最大可用性模式下,当与备库的日志传输断开时,主库会自动切换到最大性能模式。dataguard默认的配置是最大性能模式。三种模式的日志同步参数设置如下表:
三种模式在故障发生时候得不同点如下表:
最大保护和最大可用模式都需要用到备用重做日志(standby redo logfile )添加原则:standby redo log的文件大小与primary数据库online redo log文件大小相同。standby redo log的组数最好比主库多。添加方法:先停止备库的日志应用。sql>alter database recover managed standby databasecancel;sql > alter database add standby logfile group 4('/opt/oradata/primary/std_redo01.log') size50M; sql > alter database add standby logfile group 5('/opt/oradata/primary/std_redo02.log') size50M; sql > alter database add standby logfile group 6('/opt/oradata/primary/std_redo03.log') size50M; sql > alter database add standby logfile group 7('/opt/oradata/primary/std_redo04.log') size50M; sql>alter database recover managed standby databasedisconnect from session;鉴于主备发生角色转换的需要,也应该在主库上同样添加备用日志文件。切换standby的保护模式,在主库上执行
SQL>ALTER DATABASE SET STANDBYDATABASE TO maximize protection;
SQL>ALTER DATABASE SET STANDBY DATABASE TO maximize performance;缺省的保护模式
SQL>ALTER DATABASE SET STANDBY DATABASE TO maximize availability;
说明:切换保护模式的操作必须在primay执行,且primay必须处于mount状态,如果在open状态执行,则报ORA-01126错。
ORA-01126: database must be mounted EXCLUSIVE and not open for this operation。
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database set standby database to maximize availability;
SQL> alter database open;
注:此处会报ORA-03113错误。
ORA-03113: end-of-file on communication channel
这时需要先修改日志传送方式为lgwr同步方式,否则,数据库是无法open的。
SQL> conn / as sysdba
SQL> startup mount;
SQL> alter system set log_archive_dest_2='service=orcl2 lgwr sync affirmdb_unique_name=orcl2';
SQL> alter database open; 【注意】在主库修改了保护模式后需要重启后,备库的保护模式才会被修改.只有最大可用和最大保护模式才可能实现DG的数据实时同步。修改实时同步的方法:SQL> alter database recover managed standby databaseusing current logfile disconnect from session; 五、 Dataguard日常维护6.1主备库的起停和维护Dataguard关闭(先关主库再关备库)Dataguard开启(先开备库再开主库)6.2日常的监控视图1,select dest_name,status,error from v$archive_dest;在主库上执行只主要是查看日志归档目的地是否可用,如果远程归档目录不可用则error会显示错误信息。SQL> select dest_name,status,error fromv$archive_dest; DEST_NAME STATUS ERROR-------------------- ----------------------------------------LOG_ARCHIVE_DEST_1 VALIDLOG_ARCHIVE_DEST_2 VALIDLOG_ARCHIVE_DEST_3 INACTIVELOG_ARCHIVE_DEST_4 INACTIVELOG_ARCHIVE_DEST_5 INACTIVELOG_ARCHIVE_DEST_6 INACTIVELOG_ARCHIVE_DEST_7 INACTIVELOG_ARCHIVE_DEST_8 INACTIVELOG_ARCHIVE_DEST_9 INACTIVELOG_ARCHIVE_DEST_10 INACTIVE10 rows selected.如上记录则代表备库归档日志目录有效且正常。 2,selectdatabase_role,LOG_MODE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;主要查询数据库的主备角色,以及当前dataguard保护的模式,主备库上查询结果不同。 SQL>selectdatabase_role,LOG_MODE,PROTECTION_MODE,PROTECTION_LEVEL from v$database; DATABASE_ROLE LOG_MODE PROTECTION_MODE PROTECTION_LEVEL---------------- ------------ ----------------------------------------PRIMARY ARCHIVELOG MAXIMUMPERFORMANCE MAXIMUM PERFORMANCE 3, select name,SEQUENCE#,APPLIED from v$archived_logorder by sequence#;主要查询归档日志的应用情况。主备库上查询结果不同,在主库上对于每个归档文件会有两条记录。下面是在备库上的查询结果,可以看见日志应用都YES。SQL> select name,SEQUENCE#,APPLIED from v$archived_logorder by sequence#;NAME SEQUENCE#APP------------------------------ ---------- ---/opt/arch/1_5_726573806.dbf 5YES/opt/arch/1_6_726573806.dbf 6YES/opt/arch/1_7_726573806.dbf 7YES/opt/arch/1_8_726573806.dbf 8YES/opt/arch/1_9_726573806.dbf 9YES/opt/arch/1_10_726573806.dbf 10YES/opt/arch/1_11_726573806.dbf 11YES/opt/arch/1_12_726573806.dbf 12YES/opt/arch/1_13_726573806.dbf 13YES如果有发现日志不连续,则需要对照主库的归档日志序列,判断是否有丢失的日志,如果有则需要手动注册日志并应用归档。(方法:从主库的归档目录拷贝相应的归档文件到备库上注册alter database register physical logfile '/opt/arch/归档文件名’;然后手动应用日志alter database recover automaticstandby database;在测试过程中发现oracle10G下把丢失的归档日志文件考入指定目录会自动注册,不需手动注册。) 4,select process,status from v$managed_standby;--查询主备库上的进程信息。5,select message_num,message from v$dataguard_status;--查看dataguard的状态信息。6,select * from v$archive_gap;--在备库检查是否有日志缺失6.3主备库的切换方法主备库的切换主要在两种情况下切换,Switchover和Failover,这两种切换都需要手工执行完成。一是Switchover(计划中的切换,不会丢失数据)二是Failover(当主库出现故障的时候需要主备库切换角色)1,Switchover的切换方法主库端:select switchover_status from v$database;如果是to standby表可以正常切换.直接执行alter database commit to switchover to physical standby;否则执行:alter database commit to switchover to physical standby withsession shutdown;shutdown immediate;startup nomount;alter database mount standby database;alter database recover managed standby databasedisconnect from session; 备库端:select switchover_status from v$database;如果是to_primary表可以正常切换.执行: alter database commit to switchover to primary;否则执行: alter database commit to switchover to primary with sessionshutdown;shutdown immediate;startup;2,Failover切换方法(1)判断主数据库确实出现严重的硬件故障或其他原因导致主数据库无法启动。(2)在物理备用数据库上检查是否有archive redo log gaps SQL>SELECT THREAD#, LOW_SEQUENCE#,HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;(3)消除archive redo log gaps从主数据库上或其他备份的地方把没有传到物理备用数据库的archive redolog传到物理备用数据库上,并注册到物理备用数据库的controlfile中。 SQL> ALTER DATABASE REGISTER PHYSICALLOGFILE 'archive redo log文件名称';重复2,3步骤直到V$ARCHIVE_GAP视图无记录存在。(4)在物理备用数据库上发起failover操作SQL > ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE FINISH FORCE;(5)把物理备用数据库转化成主用角色SQL> ALTER DATABASE COMMIT TO SWITCHOVERTO PRIMARY;(6)把新的主用数据库重新启动 SQL> SHUTDOWN IMMEDIATE;SQL> STARTUP;(7)对新的主用数据库做全备份.6.4归档日志的处理1, 物理备库中已经应用的归档日志需定期删除. rman> DELETE ARCHIVELOG ALL COMPLETED BEFORE'SYSDATE-7';删除7天前的归档日志文件。删除之后最好做一个全备份。2, 先手动删除归档日志文件,然后再RMAN里执行下面2条命令以更新控制文件
crosscheck archivelog all;
delete expired archivelog all;3, 取消对备库传送日志
ALTER SYSTEM SETlog_archive_dest_state_2=’DEFER’ ; 六、 常见故障7.1备库重启后,在主库上归档出现ORA-03113错误SQL> select dest_name,status,error fromv$archive_dest; DEST_NAME STATUS ERROR------------------------------ --------LOG_ARCHIVE_DEST_1 VALIDLOG_ARCHIVE_DEST_2 ERROR ORA-03113:end-of-file on communication channel解决办法:在主库执行SQL> alter system set log_archive_dest_state_2=enable;这个命令式手动触发主库区尝试连接备库。其实这种情况下,只要保证主备库之间的网络和配置是正确的。dataguard会自动恢复这个错误。这个周期默认是300秒,也可以在log_archive_dest_2的参数中添加reopen参数指定这个主备库之间失败后继续尝试的周期。7.2ORA-01031: insufficient privileges错误SQL> select dest_name,status,error fromv$archive_dest;DEST_NAME STATUS ERROR---------------------------------------------------------------------LOG_ARCHIVE_DEST_1 VALIDLOG_ARCHIVE_DEST_2 ERROR ORA-01031:insufficient Privileges解决办法:统一主备库的数据库密码文件,或者重建密码文件,sys密码设置成一样。然后在主库执行SQL> alter system set log_archive_dest_state_2=enable;7.3ORA-16191: Primary log shippingclient not logged on standbySQL> select dest_name,status,error fromv$archive_dest; DEST_NAME STATUS ERROR------------------------------ -----------LOG_ARCHIVE_DEST_1 VALIDLOG_ARCHIVE_DEST_2 ERROR ORA-16191:Primary log shipping client not logged on standby解决办法:统一主备库的数据库密码文件,或者重建密码文件,sys密码设置成一样。然后在主库执行SQL> alter system set log_archive_dest_state_2=enable;7.4发现备库一直无法应用日志,MRP0进程显示WAIT_FOR_GAP的问题发现从主库传来的日志无法应用在备库检查,
SQL> select sequence#,applied from v$archived_log; SEQUENCE# APP
———- —
930 NO
931 NO
932 NO
933 NO
934 NO
935 NO
936 NO
937 NO
938 NO
939 NO
940 NO
然后开始查看有没有mrp[oracle@HJITBACKUP bdump]$ ps -ef | grep mrp
oracle 31896 1 0 14:37? 00:00:00 ora_mrp0_flow
oracle 32001 31820 0 15:17 pts/1 00:00:00grep mrp看来有,接着查gap,发现备库上有此进程,SQL> select * from v$archive_gap
2 ;no rows selected查询视图没有发现,在接着检查V$MANAGED_STANDBYSQL> select process,status from v$managed_standby;PROCESS STATUS
——— ————
ARCH CONNECTED
ARCH CONNECTED
MRP0 WAIT_FOR_GAP
RFS IDLE
RFS IDLE发现MRP0在等待GAP,进一步查看此视图selectprocess,status,group#,thread#,sequence#,block#,blocks from v$managed_standby;PROCESS STATUS GROUP# THREAD# SEQUENCE# BLOCK# BLOCKS
——— ———— ———- ———- ———- ———- ———-
ARCH CONNECTED N/A 0 0 0 0
ARCH CONNECTED N/A 0 0 0 0
MRP0 WAIT_FOR_GAPN/A 1 928 0 0
RFS IDLE N/A 0 0 0 0
RFS IDLE N/A 0 0 0 0
发现日志928没有应用,原来是由于主库删除了928,导致备库没法应用,所以只能从备份中恢复,restore archivelog
至此问题处理完毕。查询备库状态
SQL> select process,status fromv$managed_standby;PROCESS STATUS
——— ————
ARCH CONNECTED
ARCH CONNECTED
MRP0 WAIT_FOR_LOG
RFS IDLE
RFS IDLE
所以当standby装完后,在主库切换日志后,这里状态应该是
MRP0 WAIT_FOR_LOG才是正常的状态七、 注意事项建议在主备库的涉及到名称地方都统一用小写字母,避免在配置过程出现莫名的错误。如果在主库执行alter database clear unarchived logfile或alterdatabase open resetlogs,则dataguard要重建。在连续恢复模式下工作之前,需要保证之前所有的归档日志己经应用到备用库上。因为在连续恢复模式的情况下,oracle不会应用之前的归档日志,而只会应用后面陆续到来的归档日志。新建表、表空间、datafile都能通过日志应用到备库,但新建一个临时表空间和renamedatafile均不能应用到备库上。出现归档日志gap时,需要找出相应的归档日志,然后将这些归档日志copy到备用节点的log_archive_dest目录下面。然后ALTER DATABASE RECOVERAUTOMATIC STANDBY DATABASE;应当实时察看standby库的alert文件,就能清晰明了地知道主备更新的情况。这也是排错的重要方法。 相关视图V$ARCHIVE_DEST
V$ARCHIVE_DEST_STATUS
V$ARCHIVE_GAP
V$ARCHIVED_LOG
V$DATABASE
V$DATAFILE
V$DATAGUARD_STATUS
V$LOG
V$LOGFILE
V$LOG_HISTORY
V$STANDBY_LOG
转自:http://blog.163.com/scott_guo/blog/static/18102608320121111113518691/
4000
redolog(目的是提高速度,某些时候确实有效),指定数据库为FORCE LOGGING模式后,数据库将会记录除临时表空间或临时回滚段外所有的操作而忽略类似NOLOGGING之类的指定参数。如果在执行force logging时有nologging之类的语句在执行,则forcelogging会等待直到这类语句全部执行。FORCE LOGGING是做为固定参数保存在控制文件中,因此其不受重启之类操作的影响(只执行一次即可),如果想取消,可以通过alter database no force logging语句关闭强制记录。3.3创建密码文件 [oracle@localhost ~]$ orapwdfile=orapworcl password=123 force=y 该密码文件默认生成位置为$ORACLE_HOME/dbs目录.主备库的密码必须一致,否则归档日志无法在主备库之间同步。3.4修改初始化参数增加以下参数,如果在初始化参数已经有配置,则看需要做相应的修改。1、与主库角色相关的初始化参数说明:DB_NAME注意保持同一个Data Guard环境中所有数据库DB_NAME相同DB_UNIQUE_NAME为每一个数据库指定一个唯一的名称,以标示同一个dataguard环境中不同的数据库。LOG_ARCHIVE_CONFIG 该参数通过DG_CONFIG属性罗列同一个Data Guard中所有DB_UNIQUE_NAME(含主库db及备库db),以逗号分隔。例如:LOG_ARCHIVE_CONFIG='DB_CONFIG=(orcl,orcl2)'LOG_ARCHIVE_DEST_n 归档文件的生成路径。该参数非常重要,dataguard就是通过这里的设置传输日志的。LOG_ARCHIVE_DEST_STATE_n指定参数值为ENABLE,标示对应的LOG_ARCHIVE_DEST_n参数是否有效。REMOTE_LOGIN_PASSWORDFILE推荐设置参数值为EXCLUSIVE或者SHARED,注意保证相同Data Guard配置中所有db服务器sys密码相同。如果不同日志传输会失败。数据库默认是EXCLUSIVE,一般不用修改。LOG_ARCHIVE_FORMAT指定归档文件格式。一般也不用修改,保持默认即可 2、以下参数为备库角色相关的参数,建议在主库的初始化参数中也进行设置,这样在主备库角色相互转换后不需要做修改dataguard也能正常运行。FAL_SERVER 指定备库到主数据库的连接服务名,FAL_SERVER = orcl2日志所在服务器。FAL_CLIENT 指定主库到备库的连接服务名,FAL_CLIENT = orcl日志接收客户端。 STANDBY_FILE_MANAGEMENT如果主库的数据文件发生修改(如新建,重命名等)则按照本参数的设置在备库中做相应修改。设为AUTO表示自动管理。设为MANUAL表示需要手工管理。例如:STANDBY_FILE_MANAGEMENT=AUTO 下面开始修改主库的初始化参数。db_name参数已经设置,不用修改SQL> alter system set db_unique_name =’orcl’scope=spfile;System altered. SQL> alter system setlog_archive_config='dg_config=(orcl,orcl2)' scope=spfile;System altered.---这里的orcl和orcl2为db_unique_name SQL> alter system set log_archive_dest_1='location=/opt/arch'scope=spfile;System altered.--/opt/arch为本地的归档目录,需要手动创建该目录,当然也可以指定别的路径。注意oracle账号对该目录又可读写的权限。 SQL> alter system setlog_archive_dest_state_1=enable scope=spfile;System altered.--这个通常不用修改,系统默认的就是enable。SQL>alter system set log_archive_dest_2='service=orcl2valid_for=(online_logfiles,primary_role) arch asyncNOAFFIRMdb_unique_name=orcl2' scope=spfile;System altered.-----这里的service为主库连接到备库的服务名,后面会在tnsnames.ora文件中配置valid_for参数说明这个归档日志目的地在本数据库为主库的角色下才需要把online_logfile传输到备库去。arch async NOAFFIRM说明的是同步的方式,这个同步的方式有三种方式,最大保护,最大性能,最大可用。每个方式有不同的设置,具体见第五项说明。 SQL> alter system set log_archive_dest_state_2=enablescope=spfile;System altered.以上修改的是作为主库角色需要的参数,为了方便以后主备库切换,建议在主库中也配置作为备库角色的相关参数。SQL> alter system set fal_server=orcl2 scope=spfile;System altered. SQL> alter system set fal_client=orcl scope=spfile;System altered. SQL> alter system set standby_file_management=autoscope=spfile;System altered.生成静态参数文件,以备后面给备库使用。SQL> create pfile from spfile;File created.重新启动主库,使参数生效。3.5用rman工具备份主库创建一个备份文件存放目录,本例为/opt/rmanbk,同时赋予oracle账号可读写该目录。[root@localhost opt]# mkdir rmanbk[root@localhost opt]# chown oracle:oinstall rmanbk--注意以上用root账号创建目录开始备份数据库[oracle@localhost ~]$ rman target /Recovery Manager: Release10.2.0.1.0 - Production on TueAug 17 09:40:45 2010Copyright (c) 1982, 2005,Oracle. All rights reserved.connected to target database: ORCL (DBID=1564056489)RMAN>backupfull database format='/opt/rmanbk/%d_%s.dbf' plus archivelog delete input; Starting backup at 17-AUG-10current log archivedusing target database control file instead of recoverycatalogallocated channel: ORA_DISK_1channel ORA_DISK_1: sid=147 devtype=DISKchannel ORA_DISK_1: starting archive log backupsetchannel ORA_DISK_1: specifying archive log(s) in backupsetinput archive log thread=1 sequence=3 recid=1stamp=727261781input archive log thread=1 sequence=4 recid=2stamp=727263902channel ORA_DISK_1: starting piece 1 at 17-AUG-10channel ORA_DISK_1: finished piece 1 at 17-AUG-10piecehandle=/opt/oracle/product/10.2.0/db_1/flash_recovery_area/ORCL/backupset/2010_08_17/o1_mf_annnn_TAG20100817T094503_66mtf0qt_.bkptag=TAG20100817T094503 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time:00:00:04channel ORA_DISK_1: deleting archive log(s)archive log filename=/opt/arch/1_3_726573806.dbf recid=1stamp=727261781archive log filename=/opt/arch/1_4_726573806.dbf recid=2stamp=727263902Finished backup at 17-AUG-10 Starting backup at 17-AUG-10using channel ORA_DISK_1channel ORA_DISK_1: starting full datafile backupsetchannel ORA_DISK_1: specifying datafile(s) in backupsetinput datafile fno=00001name=/opt/oradata/orcl/system01.dbfinput datafile fno=00003name=/opt/oradata/orcl/sysaux01.dbfinput datafile fno=00002name=/opt/oradata/orcl/undotbs01.dbfinput datafile fno=00004name=/opt/oradata/orcl/users01.dbfchannel ORA_DISK_1: starting piece 1 at 17-AUG-10channel ORA_DISK_1: finished piece 1 at 17-AUG-10piece handle=/opt/rmanbk/ORCL_2.dbf tag=TAG20100817T094507comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time:00:01:05channel ORA_DISK_1: starting full datafile backupsetchannel ORA_DISK_1: specifying datafile(s) in backupsetincluding current control file in backupsetincluding current SPFILE in backupsetchannel ORA_DISK_1: starting piece 1 at 17-AUG-10channel ORA_DISK_1: finished piece 1 at 17-AUG-10piece handle=/opt/rmanbk/ORCL_3.dbftag=TAG20100817T094507 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time:00:00:03Finished backup at 17-AUG-10 Starting backup at 17-AUG-10current log archivedusing channel ORA_DISK_1channel ORA_DISK_1: starting archive log backupsetchannel ORA_DISK_1: specifying archive log(s) in backupsetinput archive log thread=1 sequence=5 recid=3stamp=727263976channel ORA_DISK_1: starting piece 1 at 17-AUG-10channel ORA_DISK_1: finished piece 1 at 17-AUG-10piecehandle=/opt/oracle/product/10.2.0/db_1/flash_recovery_area/ORCL/backupset/2010_08_17/o1_mf_annnn_TAG20100817T094616_66mth9qz_.bkptag=TAG20100817T094616 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time:00:00:02channel ORA_DISK_1: deleting archive log(s)archive log filename=/opt/arch/1_5_726573806.dbf recid=3stamp=727263976Finished backup at 17-AUG-10主库备份完成3.6创建备库控制文件SQL> alter database create standby controlfile as'/opt/rmanbk/control01.ctl'; Database altered.创建一个备库使用的控制文件。到此我们已经为备库准备好了静态参数文件,备库控制文件,主库数据库备份。在备库主机上建一目录,把上述文件通过scp命令传输到备库主机上。其中备份目录要和主库上的备份目录路径一样,不然在用rman还原备库时候会找不到文件。即在备库上也建一个目录/opt/rmanbk,我们把所有的文件都放在这个目录下。[oracle@localhost ~]$ scp /opt/rmanbk/*oracle@192.168.18.205:/opt/rmanbk/The authenticity of host '192.168.18.205(192.168.18.205)' can't be established.RSA key fingerprint is de:b4:0e:e6:c5:56:71:47:e1:69:5e:f1:c5:8b:48:b4.Are you sure you want to continue connecting (yes/no)?yesWarning: Permanently added '192.168.18.205' (RSA) to thelist of known hosts.oracle@192.168.18.205's password:control01.ctl 100%6896KB 6.7MB/s 00:00 ORCL_2.dbf 100% 523MB 11.6MB/s 00:45 ORCL_3.dbf 100%6976KB 6.8MB/s 00:00 上述已经传输了备份文件和备库的控制文件,下面把主库的静态参数文件传输到备库[oracle@localhost~]$scp $ORACLE_HOME/dbs/initorcl.oraoracle@192.168.18.205:/opt/rmanbk/oracle@192.168.18.205's password:initorcl.ora 100%1419 1.4KB/s 00:003.7创建备库的redo log sql> alter database add standby logfile group 4('D:\oracle\product\10.2.0\oradata\smsdb\STANDBYRD01.LOG') size 50M;sql> alter database add standby logfile group 5('D:\oracle\product\10.2.0\oradata\smsdb\STANDBYRD02.LOG') size 50M; sql> alter database add standby logfile group 6('D:\oracle\product\10.2.0\oradata\smsdb\STANDBYRD03.LOG') size 50M;3.8修改listener.ora和tnsnames.ora修改listener.ora文件,修改这部分内容,目的是使用oracle服务在监听器中静态注册。SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME =/opt/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) )修改成(增加红色部分内容)SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME =/opt/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME =/opt/oracle/product/10.2.0/db_1) (SID_NAME = orcl) ) )【备注】当使用静态注册的时候, (SID_NAME = orcl)中的sid_name务必要小写,不管数据库中instance_name参数是否是大写。不然通过静态注册的服务无法连接数据库实例。同oracle用户的环境变量ORACLE_SID一样,也必须用小写。修改静态注册可以使用netmgr工具配置。修改tnsnames.ora文件,增加主库连接到备库的服务名并修改对本地的连接用ip表示.这样主备库可以统一。orcl = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.18.32)(PORT = 1521)) (CONNECT_DATA = (SERVER =DEDICATED) (SERVICE_NAME = orcl) ) )orcl2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL =TCP)(HOST =192.168.18.205)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl2) ) ) host地址根据实际情况修改。到此对主库的修改基本完成。三、 对备库的修改4.1设置oracle环境变量和oracle实例名修改oracle账号根目录下的.bash_profile文件。增加红色部分代码。目的是创建一个数据库实例sid。[oracle@localhost ~]$ vi .bash_profile# .bash_profile # Get the aliases and functionsif [ -f ~/.bashrc ]; then . ~/.bashrcfi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATHexport LC_ALL=en_US.UTF-8export ORACLE_HOME=/opt/oracle/product/10.2.0/db_1export PATH=$PATH:$ORACLE_HOME/binexport NLS_LANG=american_america.ZHS16GBKexport ORACLE_SID=orcl24.2建立备库的参数文件备库的参数文件我们根据主库的参数文件做一些修改即可。拷贝/opt/rmanbk/initorcl.ora到$ORACLE_HOME/dbs/initorcl2.ora。注意要修改参数文件名称。(oracle数据库默认的静态参数文件名称为init+$ORACLE_SID+.ora)[oracle@localhost ~]$ cp /opt/rmanbk/initorcl.ora$ORACLE_HOME/dbs/initorcl2.ora修改initorcl2.ora文件内容,需要修改的部分以及修改后如下:*.db_unique_name='ORCL2'*.fal_client='ORCL2' *.fal_server='ORCL'*.log_archive_dest_2='service=orclvalid_for=(online_logfiles,primary_role) arch async NOAFFIRMdb_unique_name=orcl'删除*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'删除(如果备库不存在flash目录则删除)*.db_recovery_file_dest='/opt/oracle/product/10.2.0/db_1/flash_recovery_area'删除(如果备库不存在flash目录则删除)*.db_recovery_file_dest_size=2147483648 别的不需要改动。尽量保持主备库的sga和pga相关参数一样。 4.3建立备库相关的目录参考主库在备库上建立相关的数据库目录[oracle@localhost ~]$ mkdir /opt/arch创建备库的本地归档目录[oracle@localhost ~]$ mkdir /opt/oradata/orcl 创建数据库目录[oracle@localhost ~]$ mkdir /opt/rmanbk创建数据库备份文件目录[oracle@localhost ~]$ mkdir-p $ORACLE_HOME/admin/orcl/{adump,bdump,cdump,dpdump,pfile,udump}创建数据库后台运行日志目录,这些目录是需要同参数文件中的设置一致的。4.4建立备库密码文件可以手动建也可以拷贝主库的密码文件,前提是主备库设置的密码要一致,否则日志传输会失败。[oracle@localhost ~]$orapwd file=orapworcl2 password=123force=y注意文件名称不能有误,否则主库连接不上备库,导致归档日志同步失败4.5修改listener.ora和tnsnames.ora可以拷贝主库的listener.ora,tnsnames.ora,sqlnet.ora三个文件到备库。方法同上3.6。sqlnet.ora文件和tnsnames.ora文件不用修改,与主库保持一样即可。 修改listener.ora文件,修改这部分内容,目的是使用oracle服务在监听器中静态注册。SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME =/opt/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) )修改成(增加红色部分内容)SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME =/opt/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = orcl2) (ORACLE_HOME =/opt/oracle/product/10.2.0/db_1) (SID_NAME = orcl2) ) )这个时候在主备库上分别用tnsping命令测试orcl和orcl2服务名看是否通。如果不通则修改检查以上文件配置是否正确。[oracle@localhost admin]$ tnsping orcl2TNSPingUtility for Linux: Version10.2.0.1.0 - Productionon 18-AUG-2010 19:32:00 Copyright (c) 1997, 2005, Oracle. All rightsreserved.Used parameter files:/opt/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the aliasAttempting to contact (DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.18.205)(PORT = 1521))) (CONNECT_DATA= (SERVICE_NAME = orcl2)))OK (0 msec) [oracle@localhost admin]$ tnsping orclTNSPingUtility for Linux: Version10.2.0.1.0 - Productionon 18-AUG-2010 19:33:38Copyright (c) 1997, 2005, Oracle. All rightsreserved.Used parameter files:/opt/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the aliasAttempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL= TCP)(HOST=192.168.18.32)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl)))OK (10 msec)从上面两个服务名均已经互通。4.6恢复控制文件拷贝三份备库控制文件到数据库目录[oracle@localhost rmanbk]$ cp control01.ctl/opt/oradata/orcl/control01.ctl[oracle@localhost rmanbk]$ cp control01.ctl/opt/oradata/orcl/control02.ctl[oracle@localhost rmanbk]$ cp control01.ctl/opt/oradata/orcl/control03.ctl4.7用RMAN还原出备库[oracle@localhost ~]$ rman target /Recovery Manager: Release10.2.0.1.0 - Production on WedAug 18 19:46:59 2010Copyright (c) 1982, 2005, Oracle. All rightsreserved.connected to target database (not started)RMAN> startup mount;Oracle instance starteddatabase mountedTotal System Global Area 167772160bytesFixedSize 1218292bytesVariableSize 62916876bytesDatabaseBuffers 96468992bytesRedoBuffers 7168000bytes启动数据库到mount阶段,准备还原RMAN> restore database;Starting restore at 18-AUG-10using target database control file instead of recoverycatalogallocated channel: ORA_DISK_1channel ORA_DISK_1: sid=157 devtype=DISK channel ORA_DISK_1: starting datafile backupset restorechannel ORA_DISK_1: specifying datafile(s) to restorefrom backup setrestoring datafile 00001 to/opt/oradata/orcl/system01.dbfrestoring datafile 00002 to/opt/oradata/orcl/undotbs01.dbfrestoring datafile 00003 to/opt/oradata/orcl/sysaux01.dbfrestoring datafile 00004 to /opt/oradata/orcl/users01.dbfchannel ORA_DISK_1: reading from backup piece/opt/rmanbk/ORCL_2.dbfchannel ORA_DISK_1: restored backup piece 1piece handle=/opt/rmanbk/ORCL_2.dbftag=TAG20100817T094507channel ORA_DISK_1: restore complete, elapsed time:00:01:05Finished restore at 18-AUG-10RMAN>exit退出rman恢复管理器到此备库基本建立完成。4.8开启备库创建备库的动态参数文件SQL> create spfile from pfile;关闭数据库SQL> shutdown immediate;启动备库到mount状态SQL> startup mount;开始应用日志恢复SQL> alter database recover managed standby databasedisconnect from session;使备库处于日志恢复模式(备用模式)。SQL> select process,status from v$managed_standby;PROCESS STATUS--------- ------------ARCH CONNECTEDARCH CONNECTEDRFS IDLEMRP0 WAIT_FOR_LOG这时候备库的进程有以上几个,RFS - 远程文件接收进程MRP0 -日志应用进程 到此,需要测试一下备库是否可以接收到主库的归档日志。可在主库中手动归档一个日志文件(alter system switch logfile),然后查看在备库的归档目录中是否生成有新的归档日志文件,也可以在备库中用一下语句查询是否存在日志归档记录。select name,SEQUENCE#,APPLIED from v$archived_log orderby sequence#; 备注:对于物理备库(physical standby)来说,处于日志恢复模式的时候数据库是不能打开的。如果要打开只能先关闭日志恢复模式,然后以read only(只读方式)打开。(oracle11G版本可以在read only下应用归档日志)SQL>alter database recover managed standby databasecancel;停止日志恢复模式SQL>alter database open read only;打开数据库。物理备库在只读模式下可以增加临时文件。
SQL> alter database temp addtempfile '/opt/oradata/orcl/temp02.dbf' size100mreuse;这个时候备库还是可以接收主库传输过来的归档日志文件,只是不能应用日志而已。当用read only方式打开备库后只有重新启动才能使备库重新回到备用模式。4.9切换到DATAGUARD最大可用模式并开启实时应用一般情况下,到4.8步骤为止,dataguard的物理备库已经可以正常使用了。只是这时dataguard处于默认的最大性能模式,这个模式下,主库的重做日志只有在归档之后才会传输到备库上,然后备库才会应用日志。如果在归档之前主库数据库意外down机,那么这部分未归档的数据肯会丢失。为了避免这种情况的发生,可以使用最大可用模式。Oracle推荐最大可用模式使用LGWR ASYNC(异步)NOAFFIRM模式传输。实际的生产库推荐这种模式。在standby不可用时,最大可用模式会自动降低成最大性能模式,所以standby故障不会导致primay不可用。对于dataguard模式的介绍。以下是在dataguard默认的最大性能模式下切换到实际生成用途的最大可用模式. 1,在备库上增加备用重做日志文件,大小跟主库的在线重做日志一样。组的数量最好比在线重做日志多一两组(可调)。sql>alterdatabaserecovermanagedstandbydatabasecancel;--先取消日志应用sql > system alteredsql>alterdatabaseaddstandbylogfilegroup4('/opt/oradata/primary/std_redo01.log')size50M;sql > system alteredsql>alterdatabaseaddstandbylogfilegroup5 ('/opt/oradata/primary/std_redo02.log')size50M;sql > system alteredsql>alterdatabaseaddstandbylogfilegroup6 ('/opt/oradata/primary/std_redo03.log')size50M;sql > system alteredsql>alterdatabaseaddstandbylogfilegroup7 ('/opt/oradata/primary/std_redo04.log')size50M;sql > system altered sql>recovermanagedstandbydatabasedisconnectfromsession;------非实时应用模式或者用下面的语句开启备库的实时应用模式sql>recovermanagedstandbydatabaseusing current logfiledisconnectfromsession; 鉴于后面主备库切换的需要,在主库上也增加备用重做日志。当然要把主库处于mount状态下才可添加。可在下面统一修改。2,在主库上做修改(两个地方:一个是修改log_archive_dest_2参数,二是添加备用日志文件)sql>shutdownimmediate;sql> startupmount;sql>altersystemsetlog_archive_dest_2=’service=orcl valid_for=(online_logfiles,priamry_role)lgwr async noaffirmdb_unique_name=orcl2’scope=spfile;sql>alterdatabaseaddstandbylogfilegroup4('/opt/oradata/primary/std_redo01.log')size50M;sql>systemalteredsql>alterdatabaseaddstandbylogfilegroup5 ('/opt/oradata/primary/std_redo02.log')size50M;sql>systemalteredsql>alterdatabaseaddstandbylogfilegroup6 ('/opt/oradata/primary/std_redo03.log')size50M;sql>systemalteredsql>alterdatabaseaddstandbylogfilegroup7 ('/opt/oradata/primary/std_redo04.log')size50M;sql>systemalteredsql > alter database set standby databaseto maximize availability;--------切换到最大可用模式sql > alter database open;打开数据库 【注意事项】1,lgwr async noaffirm参数下主库的模式保护级别为RESYNCHRONIZATION SQL>selectdatabase_role,PROTECTION_MODE,PROTECTION_LEVELfromv$database;DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL----------- ---------------- ---------------PRIMARY MAXIMUMAVAILABILITYRESYNCHRONIZATION 备库的查询结果为:UNPROTECTED DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL---------------- ----------------------------------------PHYSICALSTANDBY UNPROTECTED UNPROTECTED 2,lgwr sync affirm参数下主库的模式保护级别为MAXIMUMAVAILABILITY SQL>selectdatabase_role,PROTECTION_MODE,PROTECTION_LEVELfromv$database;DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL----------- ---------------- ---------------PRIMARY MAXIMUMAVAILABILITYMAXIMUMAVAILABILITY 备库的查询结果为:MAXIMUMAVAILABILITY DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL------------------------------------ --------------------PHYSICALSTANDBY MAXIMUMAVAILABILITY MAXIMUMAVAILABILITY 为了不给生产库带来太大的影响,推荐使用第一种参数。对于主库采用lgwr传输日志的方式。日志是实时传输的,至于备库是否采用实时恢复模式都是不会丢失数据的。四、 DATAGUARD的三种保护模式说明Dataguard有三种保护模式,最大保护、最大可用性和最大性能,对主库的性能影响和对网络的要求依次降低。
在最大保护模式下,备库一旦无法接收日志,主库的所有操作被挂起,与备库的日志传输恢复正常时才会恢复,如果挂起时间较长,主库实例会中断,因此一般生产环境中很少会使用这种模式。在最大可用性模式下,当与备库的日志传输断开时,主库会自动切换到最大性能模式。dataguard默认的配置是最大性能模式。三种模式的日志同步参数设置如下表:
最大保护模式 | 最大可用模式 | 最大性能模式 | |
Redo archival process | LGWR | LGWR | LGWR or ARCH |
Network transmission mode | SYNC | SYNC | SYNC or ASYNC when using LGWR process. SYNC if using ARCH process. |
Disk write option | AFFIRM | AFFIRM | AFFIRM or NOAFFIRM |
Standby redo log required? | Yes | Yes | No, but it is recommended |
最大保护模式 | 最大可用模式 | 最大性能模式 | |
对主数据库性能影响 | 最大 | 中等 | 最小 |
数据丢失可能性 | 不会 | 正常情况下不会丢数据,除非刚刚处于最大性能模式 | 会丢数据 |
故障发生时描述 | 当备库日志不可到达时,主数据库会down机,不适合生成用途。 | 当备库的日志不可到达时会自动切换到最大性能模式。故障排除后自动切换回最大可用模式。 | 备库日志不可到达不会影响主库的可用性。 |
是否需要standy redo file | 需要 | 需要 | 不需要 |
SQL>ALTER DATABASE SET STANDBYDATABASE TO maximize protection;
SQL>ALTER DATABASE SET STANDBY DATABASE TO maximize performance;缺省的保护模式
SQL>ALTER DATABASE SET STANDBY DATABASE TO maximize availability;
说明:切换保护模式的操作必须在primay执行,且primay必须处于mount状态,如果在open状态执行,则报ORA-01126错。
ORA-01126: database must be mounted EXCLUSIVE and not open for this operation。
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database set standby database to maximize availability;
SQL> alter database open;
注:此处会报ORA-03113错误。
ORA-03113: end-of-file on communication channel
这时需要先修改日志传送方式为lgwr同步方式,否则,数据库是无法open的。
SQL> conn / as sysdba
SQL> startup mount;
SQL> alter system set log_archive_dest_2='service=orcl2 lgwr sync affirmdb_unique_name=orcl2';
SQL> alter database open; 【注意】在主库修改了保护模式后需要重启后,备库的保护模式才会被修改.只有最大可用和最大保护模式才可能实现DG的数据实时同步。修改实时同步的方法:SQL> alter database recover managed standby databaseusing current logfile disconnect from session; 五、 Dataguard日常维护6.1主备库的起停和维护Dataguard关闭(先关主库再关备库)Dataguard开启(先开备库再开主库)6.2日常的监控视图1,select dest_name,status,error from v$archive_dest;在主库上执行只主要是查看日志归档目的地是否可用,如果远程归档目录不可用则error会显示错误信息。SQL> select dest_name,status,error fromv$archive_dest; DEST_NAME STATUS ERROR-------------------- ----------------------------------------LOG_ARCHIVE_DEST_1 VALIDLOG_ARCHIVE_DEST_2 VALIDLOG_ARCHIVE_DEST_3 INACTIVELOG_ARCHIVE_DEST_4 INACTIVELOG_ARCHIVE_DEST_5 INACTIVELOG_ARCHIVE_DEST_6 INACTIVELOG_ARCHIVE_DEST_7 INACTIVELOG_ARCHIVE_DEST_8 INACTIVELOG_ARCHIVE_DEST_9 INACTIVELOG_ARCHIVE_DEST_10 INACTIVE10 rows selected.如上记录则代表备库归档日志目录有效且正常。 2,selectdatabase_role,LOG_MODE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;主要查询数据库的主备角色,以及当前dataguard保护的模式,主备库上查询结果不同。 SQL>selectdatabase_role,LOG_MODE,PROTECTION_MODE,PROTECTION_LEVEL from v$database; DATABASE_ROLE LOG_MODE PROTECTION_MODE PROTECTION_LEVEL---------------- ------------ ----------------------------------------PRIMARY ARCHIVELOG MAXIMUMPERFORMANCE MAXIMUM PERFORMANCE 3, select name,SEQUENCE#,APPLIED from v$archived_logorder by sequence#;主要查询归档日志的应用情况。主备库上查询结果不同,在主库上对于每个归档文件会有两条记录。下面是在备库上的查询结果,可以看见日志应用都YES。SQL> select name,SEQUENCE#,APPLIED from v$archived_logorder by sequence#;NAME SEQUENCE#APP------------------------------ ---------- ---/opt/arch/1_5_726573806.dbf 5YES/opt/arch/1_6_726573806.dbf 6YES/opt/arch/1_7_726573806.dbf 7YES/opt/arch/1_8_726573806.dbf 8YES/opt/arch/1_9_726573806.dbf 9YES/opt/arch/1_10_726573806.dbf 10YES/opt/arch/1_11_726573806.dbf 11YES/opt/arch/1_12_726573806.dbf 12YES/opt/arch/1_13_726573806.dbf 13YES如果有发现日志不连续,则需要对照主库的归档日志序列,判断是否有丢失的日志,如果有则需要手动注册日志并应用归档。(方法:从主库的归档目录拷贝相应的归档文件到备库上注册alter database register physical logfile '/opt/arch/归档文件名’;然后手动应用日志alter database recover automaticstandby database;在测试过程中发现oracle10G下把丢失的归档日志文件考入指定目录会自动注册,不需手动注册。) 4,select process,status from v$managed_standby;--查询主备库上的进程信息。5,select message_num,message from v$dataguard_status;--查看dataguard的状态信息。6,select * from v$archive_gap;--在备库检查是否有日志缺失6.3主备库的切换方法主备库的切换主要在两种情况下切换,Switchover和Failover,这两种切换都需要手工执行完成。一是Switchover(计划中的切换,不会丢失数据)二是Failover(当主库出现故障的时候需要主备库切换角色)1,Switchover的切换方法主库端:select switchover_status from v$database;如果是to standby表可以正常切换.直接执行alter database commit to switchover to physical standby;否则执行:alter database commit to switchover to physical standby withsession shutdown;shutdown immediate;startup nomount;alter database mount standby database;alter database recover managed standby databasedisconnect from session; 备库端:select switchover_status from v$database;如果是to_primary表可以正常切换.执行: alter database commit to switchover to primary;否则执行: alter database commit to switchover to primary with sessionshutdown;shutdown immediate;startup;2,Failover切换方法(1)判断主数据库确实出现严重的硬件故障或其他原因导致主数据库无法启动。(2)在物理备用数据库上检查是否有archive redo log gaps SQL>SELECT THREAD#, LOW_SEQUENCE#,HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;(3)消除archive redo log gaps从主数据库上或其他备份的地方把没有传到物理备用数据库的archive redolog传到物理备用数据库上,并注册到物理备用数据库的controlfile中。 SQL> ALTER DATABASE REGISTER PHYSICALLOGFILE 'archive redo log文件名称';重复2,3步骤直到V$ARCHIVE_GAP视图无记录存在。(4)在物理备用数据库上发起failover操作SQL > ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE FINISH FORCE;(5)把物理备用数据库转化成主用角色SQL> ALTER DATABASE COMMIT TO SWITCHOVERTO PRIMARY;(6)把新的主用数据库重新启动 SQL> SHUTDOWN IMMEDIATE;SQL> STARTUP;(7)对新的主用数据库做全备份.6.4归档日志的处理1, 物理备库中已经应用的归档日志需定期删除. rman> DELETE ARCHIVELOG ALL COMPLETED BEFORE'SYSDATE-7';删除7天前的归档日志文件。删除之后最好做一个全备份。2, 先手动删除归档日志文件,然后再RMAN里执行下面2条命令以更新控制文件
crosscheck archivelog all;
delete expired archivelog all;3, 取消对备库传送日志
ALTER SYSTEM SETlog_archive_dest_state_2=’DEFER’ ; 六、 常见故障7.1备库重启后,在主库上归档出现ORA-03113错误SQL> select dest_name,status,error fromv$archive_dest; DEST_NAME STATUS ERROR------------------------------ --------LOG_ARCHIVE_DEST_1 VALIDLOG_ARCHIVE_DEST_2 ERROR ORA-03113:end-of-file on communication channel解决办法:在主库执行SQL> alter system set log_archive_dest_state_2=enable;这个命令式手动触发主库区尝试连接备库。其实这种情况下,只要保证主备库之间的网络和配置是正确的。dataguard会自动恢复这个错误。这个周期默认是300秒,也可以在log_archive_dest_2的参数中添加reopen参数指定这个主备库之间失败后继续尝试的周期。7.2ORA-01031: insufficient privileges错误SQL> select dest_name,status,error fromv$archive_dest;DEST_NAME STATUS ERROR---------------------------------------------------------------------LOG_ARCHIVE_DEST_1 VALIDLOG_ARCHIVE_DEST_2 ERROR ORA-01031:insufficient Privileges解决办法:统一主备库的数据库密码文件,或者重建密码文件,sys密码设置成一样。然后在主库执行SQL> alter system set log_archive_dest_state_2=enable;7.3ORA-16191: Primary log shippingclient not logged on standbySQL> select dest_name,status,error fromv$archive_dest; DEST_NAME STATUS ERROR------------------------------ -----------LOG_ARCHIVE_DEST_1 VALIDLOG_ARCHIVE_DEST_2 ERROR ORA-16191:Primary log shipping client not logged on standby解决办法:统一主备库的数据库密码文件,或者重建密码文件,sys密码设置成一样。然后在主库执行SQL> alter system set log_archive_dest_state_2=enable;7.4发现备库一直无法应用日志,MRP0进程显示WAIT_FOR_GAP的问题发现从主库传来的日志无法应用在备库检查,
SQL> select sequence#,applied from v$archived_log; SEQUENCE# APP
———- —
930 NO
931 NO
932 NO
933 NO
934 NO
935 NO
936 NO
937 NO
938 NO
939 NO
940 NO
然后开始查看有没有mrp[oracle@HJITBACKUP bdump]$ ps -ef | grep mrp
oracle 31896 1 0 14:37? 00:00:00 ora_mrp0_flow
oracle 32001 31820 0 15:17 pts/1 00:00:00grep mrp看来有,接着查gap,发现备库上有此进程,SQL> select * from v$archive_gap
2 ;no rows selected查询视图没有发现,在接着检查V$MANAGED_STANDBYSQL> select process,status from v$managed_standby;PROCESS STATUS
——— ————
ARCH CONNECTED
ARCH CONNECTED
MRP0 WAIT_FOR_GAP
RFS IDLE
RFS IDLE发现MRP0在等待GAP,进一步查看此视图selectprocess,status,group#,thread#,sequence#,block#,blocks from v$managed_standby;PROCESS STATUS GROUP# THREAD# SEQUENCE# BLOCK# BLOCKS
——— ———— ———- ———- ———- ———- ———-
ARCH CONNECTED N/A 0 0 0 0
ARCH CONNECTED N/A 0 0 0 0
MRP0 WAIT_FOR_GAPN/A 1 928 0 0
RFS IDLE N/A 0 0 0 0
RFS IDLE N/A 0 0 0 0
发现日志928没有应用,原来是由于主库删除了928,导致备库没法应用,所以只能从备份中恢复,restore archivelog
至此问题处理完毕。查询备库状态
SQL> select process,status fromv$managed_standby;PROCESS STATUS
——— ————
ARCH CONNECTED
ARCH CONNECTED
MRP0 WAIT_FOR_LOG
RFS IDLE
RFS IDLE
所以当standby装完后,在主库切换日志后,这里状态应该是
MRP0 WAIT_FOR_LOG才是正常的状态七、 注意事项建议在主备库的涉及到名称地方都统一用小写字母,避免在配置过程出现莫名的错误。如果在主库执行alter database clear unarchived logfile或alterdatabase open resetlogs,则dataguard要重建。在连续恢复模式下工作之前,需要保证之前所有的归档日志己经应用到备用库上。因为在连续恢复模式的情况下,oracle不会应用之前的归档日志,而只会应用后面陆续到来的归档日志。新建表、表空间、datafile都能通过日志应用到备库,但新建一个临时表空间和renamedatafile均不能应用到备库上。出现归档日志gap时,需要找出相应的归档日志,然后将这些归档日志copy到备用节点的log_archive_dest目录下面。然后ALTER DATABASE RECOVERAUTOMATIC STANDBY DATABASE;应当实时察看standby库的alert文件,就能清晰明了地知道主备更新的情况。这也是排错的重要方法。 相关视图V$ARCHIVE_DEST
V$ARCHIVE_DEST_STATUS
V$ARCHIVE_GAP
V$ARCHIVED_LOG
V$DATABASE
V$DATAFILE
V$DATAGUARD_STATUS
V$LOG
V$LOGFILE
V$LOG_HISTORY
V$STANDBY_LOG
转自:http://blog.163.com/scott_guo/blog/static/18102608320121111113518691/
相关文章推荐
- Dataguard日常维护及故障解决
- Oracle 11G R2 DataGuard日常维护及故障处理
- Oracle 10g 物理Dataguard日常操作维护(一)
- 解决PC日常故障 必须掌握的病毒知识
- Oracle 10g 物理Dataguard日常操作维护(二)
- IBM小型机日常维护之网络故障
- Oracle技术之Oracle日常维护_Oracle故障定位_Oracle故障排除
- 49、DataGuard日常维护
- 路由器日常维护和故障诊断
- DataGuard日常维护
- 打印机常见故障及维护解决方法
- IBM p系列小型机日常维护及故障排除时常用命令(检查IBM设备状态汇总)
- Oracle 11g 物理Dataguard日常操作维护(二)
- DataGuard日常维护
- 高可用性dataguard搭建和日常维护工作
- 日常故障记录之01设置共享文件夹时遇到的kernel panic 问题和解决方法
- Oracle 10g dataguard 物理备库日常维护(一)
- 日常工作总结(只读文件系统故障解决)
- 解决实际维护网络过程故障的五个盲点