Oracle RAC+ASM+DataGuard配置实验记录+常见问题
Oracle RAC+ASM+DataGuard配置实验记录+常见问题
详细安装过程见:
http://www.fgedu.net.cn/bbs/thread-63-1-1.html]http://www.fgedu.net.cn/bbs/thread-63-1-1.html
13、少日志的时候,维护故障解决
故障1
由于网络等原因导致归档日志没有全部传输到从库中,这些需要我们手动干预。
常见因素:从库关闭、网络故障、从库空间不足等。
维护的通常步骤;关闭:先关主库后关从库,启动:先启动从库然后启动主库。
关于日志传输的控制可以通过MANDATORY、REOPEN、MAX_FAILURE来控制
MANDATORY REOPEN=5 MAX_FAILURE=3 每5秒重试一次,最大允许错误次数为3次,如果重试3次仍然不能成功,那么主库的日志传输服务就会停止。
*.log_archive_dest_2='service=AUX VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) MANDATORY REOPEN=5 MAX_FAILURE=3 DB_UNIQUE_NAME=auxdb'
1)、查找不在standby的日志。
SQL>
SELECT MAX(R.SEQUENCE#) LAST_SEQ_RECD, MAX(L.SEQUENCE#) LAST_SEQ_SENT FROM V$ARCHIVED_LOG R, V$LOG L WHERE R.DEST_ID=2 AND L.ARCHIVED='YES';
LAST_SEQ_RECD LAST_SEQ_SENT
------------- -------------
7 10
2)、查找primary的所在路径
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 5 AND 10;
NAME
--------------------------------------------------------------------------------
/primary/thread1_dest/arcr_1_7.arc
/primary/thread1_dest/arcr_1_8.arc
/primary/thread1_dest/arcr_1_9.arc
3)、将日志copy到standby的STANDBY_ARCHIVE_DEST下,将STANDBY_ARCHIVE_DEST的日志copy到 LOG_ARCHIVE_DEST下
4)、
SQL> STARTUP MOUNT
SQL> ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
至此恢复成功。
故障2:
归档日志之间经常产生gap
1)、确认归档日志之间有无遗漏
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1 90 92
2)、将遗漏的归档日志copy到备库的standby_archive_dest下
然后对其分别注册
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
3)、恢复归档日志
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
4)、然后就可以按切换步骤进行切换了。
14、 参数说明
COMPATIBLE='10.2.0.1.0':数据库版本号,主库与从库要统一,否则有可能redo的数据不能从主库传送到从库。
DB_FILE_NAME_CONVERT=主库数据文件地址,从库数据文件地址:用于主从库在同一台机器上或主从库数据文件的路径不一致的情况下
DB_UNIQUE_NAME=:数据库的唯一名称。推荐使用,如果使用了LOG_ARCHIVE_CONFIG,那么就必须有改参数。
FAL_CLIENT=,指向从库的服务名,本例为aux
FAL_SERVER 指向主库的服务名,本例为orcl
LOG_ARCHIVE_CONFIG='DG_CONFIG=(主库的db_unique_name,从库的db_unique_name)'
LOG_ARCHIVE_DEST_n:日志归档的地址,最少需要两个,一个指向主库,另一个指向从库
LOG_ARCHIVE_DEST_STATE_n ={ENABLE|DEFER|ALTERNATE|RESET} 指定:enable or disable来决定是否传输redo的数据到从库中。
LOG_FILE_NAME_CONVERT:同DB_FILE_NAME_CONVERT
STANDBY_ARCHIVE_DEST:指定路径存放接收从主库传输过来的归档日志。
STANDBY_FILE_MANAGEMENT={AUTO|MANUAL} :AUTO当主库添加或减少数据文件时会自动同步从库而不需要手动干预。
15、 经常遇到错误
错误1:
ORA-16057: DGID from server not in Data Guard configuration
原因:主库没有设置参数log_archive_config
解决方法*.log_archive_config='dg_config=(orcl,auxdb)'
alter system set log_archive_config='dg_config=(orcl,auxdb)' scope=both;
错误2:
PING[ARC0]: Heartbeat failed to connect to standby 'aux'. Error is 1031.
ORA-01031: insufficient privileges
解决问题思路:1、检查sys密码是否正确,大部分是这个原因。
错误3:Oracle用户有写standby_archive_dest的权限
ORA-16025: parameter LOG_ARCHIVE_DEST_2 contains repeated or conflicting attributes
出现该错误的原因是LOG_ARCHIVE_DEST_2='SERVICE=orcl LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
db_unique_name前少了一个空格导致的
16、日常管理
(1) 启动到管理模式
SQL>shutdown immediate;
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session;
(2)启动到只读方式
SQL>shutdown immediate;
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database open read only;
(3)在管理恢复模式下到只读模式
SQL>recover managed standby database cancel;
SQL>alter database open read only;
这个时候,可以给数据库增加临时数据文件(这个在热备份的时候是没有备份过来的)
如
alter tablespace temp add tempfile '/oracle/oradata/ddd/temp01.dbf' size 100M;
(4)从只读方式到管理恢复方式
SQL>recover managed standby database disconnect from session;
(5)打开备库
#sqlplus /nolog
Sql> conn sys/sys@standby as sysdba;
Sql> startup mount;
Sql> alter database recover managed standby database disconnect from session;
如果要取消恢复:alter database recover managed standby database cancel;
(5)打开主库
# sqlplus /nolog
Sql> conn sys/sys@primary as sysdba;
Sql> startup;
(6)测试是否OK
主库:
Sql>alter system switch logfile;
Sql> select max(SEQUENCE#) from v$archived_log;
备库:
Sql> select max(SEQUENCE#) from v$archived_log;
#或者更详细的:select FIRST_TIME,NEXT_TIME, APPLIED,SEQUENCE# from v$archived_log order by SEQUENCE#;
17 角色转换(switchover)
注意:Swithover时只能先从Primary切到Standby,再从Standby切到Primary.启动备库,再启动主库,先停主库再停备库。
主库:
SQL> alter database commit to switchover to physical standby with session shutdown;
alter database mount standby database;
alter database recover managed standby database disconnect;
select OPEN_MODE, PROTECTION_MODE, ACTIVATION#,DATABASE_ROLE, SWITCHOVER# ,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE ACTIVATION# DATABASE_ROLE SWITCHOVER# SWITCHOVER_STATUS
---------- -------------------- ----------- ---------------- ----------- --------------------
MOUNTED MAXIMUM PERFORMANCE 0 PHYSICAL STANDBY 0 SESSIONS ACTIVE
备库:
SQL>
select OPEN_MODE, PROTECTION_MODE, ACTIVATION#,DATABASE_ROLE, SWITCHOVER# ,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE ACTIVATION# DATABASE_ROLE SWITCHOVER# SWITCHOVER_STATUS
---------- - ------------------- ----------- ---------------- ----------- --------------------
MOUNTED MAXIMUM PERFORMANCE 0 PHYSICAL STANDBY 0 TO PRIMARY
SQL> alter database commit to switchover to physical primary with session shutdown;
SQL>shutdown immediate
SQL> startup
Database altered.
角色转换工作完成。剩下的是补救措施(针对原primary 数据库),由于此时primary 数据库已经不再是
data guard 配置的一部分,我们需要做的就是尝试看看能否恢复原primary 数据库,将其改造为新的standby
服务器。具体操作方式可以分为二类:1.重建2.备份恢复。所涉及的技术前面的系列文章中均有涉及,此
处不再赘述。
SQL> alter database commit to switchover to physical standby with session shutdown;
alter database commit to switchover to physical standby with session shutdown
*
ERROR at line 1:
ORA-16416: Switchover target is not synchronized with the primary
更简单的方式就是重新从主库创建一个备用控制文件,就可以启动了。
3.1 准备备机备库日志(在原先的主库,即现在的备库上操作)
alter database add standby logfile thread 1 group 7 size 50M;
alter database add standby logfile thread 1 group 8 size 50M;
alter database add standby logfile thread 1 group 9 size 50M;
alter database add standby logfile thread 2 group 10 size 50M;
alter database add standby logfile thread 2 group 11size 50M;
alter database add standby logfile thread 2 group 12 size 50M;
alter database add standby logfile thread 1 group 13 size 50M;
alter database add standby logfile thread 2 group 14 size 50M;
3.2 准备主库和备库的参数文件
准备主库和备库的参数文件,最好就是将两个数据库的参数文件互换,在两台机器上同时保留主库和备库的参数文件,同时更换两台机的tnsnames.ora文件primary和standby相关ip。
3.3 查看状态
SQL>select OPEN_MODE, PROTECTION_MODE, ACTIVATION#,DATABASE_ROLE, SWITCHOVER# ,SWITCHOVER_STATUS from v$database;
状态如果是to standby或者to primary,则可以转换。如果是session active.则有会话没有断开。
详见三思笔记。
3.4 从primary 切换到standby
SQL> conn sys/sys@primary as sysdba;
SQL> alter database commit to switchover to physical standby with session shutdown;
SQL> shutdown
SQL> create spfile from pfile= C:\oracle\product\10.2.0\admin\fmis\pfile\init.standby;
SQL> alter database recover managed standby database disconnect;
SQL> startup mount;
检查状态和日志传输,同步情况。
3.5 启动新备库端的Listener (port=1522)
[oracle@host160 admin]$ lsnrctl stop
[oracle@host160 admin]$ lsnrctl start LISTENER1
3.6 从standby 切换到primary
SQL> conn sys/sys@standby as sysdba;
SQL> alter database commit to switchover to primary;
SQL> shutdown
SQL> create spfile from pfile= C:\oracle\product\10.2.0\admin\fmis\pfile\init.primary;
SQL> startup
检查状态和日志传输,同步情况。
3.7 启动新主库端的Listener (port=1522)
[oracle@host161 admin]$ lsnrctl stop
[oracle@host161 admin]$ lsnrctl start LISTENER1
3.8 日志文件丢失注册
如果主备数据库日志丢失,可以把备用日志文件复制过来,或者重新注册。
alter database register logfile 'filename'
18、Data Guard数据库模式的转换
将一个data guard配置从最高性能模式改为最高可用性模式
切换时:RAC环境,切换时primary和standby 都只能有一个instance活动,其它的instance必须关闭。
关闭第二个rac实例:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
[oracle@rac2 ~]$