DG搭建与配置
DG搭建与配置
一、准备环境
1、两台虚拟机、一台正常运行oracle数据库的,一台装了软件没有启动数据库的(没有进行dbca)
2、主库备库 修改环境变量,修改主机名,将主库备库的主机名都写入hosts文件
二、开始搭建
1.查看主库是否开启归档模式,查看是否开启强制日志(若没开启则开启)
SYS@WWDB1> select log_mode,force_logging from v$database;
SYS@WWDB1> alter database force logging;
SYS@WWDB1> archive log list;
SYS@WWDB1> show parameter db_recovery
SYS@WWDB11> alter system switch logfile;
2.创建STANDBY LOGFILE
SYS@WWDB1>define editor=vim
SYS@WWDB1>ed1
alter database add standby logfile group 4 (‘/u01/app/oracle/oradata/WWDB1/stlog01.log’) size 100m;
alter database add standby logfile group 5 (‘/u01/app/oracle/oradata/WWDB1/stlog02.log’) size 100m;
alter database add standby logfile group 6 (‘/u01/app/oracle/oradata/WWDB1/stlog03.log’) size 100m;
alter database add standby logfile group 7 (‘/u01/app/oracle/oradata/WWDB1/stlog04.log’) size 100m;
SYS@WWDB1>@1
3.创建参数文件
SYS@WWDB1>create pfile from spfile;
4.修改参数文件
[oracle@oracle01 ~]$ cd /u01/app/oracle/product/11.2.4/dbhome_1/dbs/
[oracle@oracle01 dbs]$ vi initWWDB1.ora
在原有参数文件上添加 下列参数来自于官方文档
DB_UNIQUE_NAME=WWDB1
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(WWDB1,SBDB1)’
LOG_ARCHIVE_DEST_1=
‘LOCATION=use_db_recovery_file_dest
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=WWDB1′
LOG_ARCHIVE_DEST_2=
‘SERVICE=SBDB1 lgwr ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=SBDB1′
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t%s_%r.arc
下边的在备库上才有用,在主库中先添加上scp到备库
FAL_SERVER=SBDB1
DB_FILE_NAME_CONVERT=’SBDB1′,’WWDB1′
LOG_FILE_NAME_CONVERT=’SBDB1′,’WWDB1′
STANDBY_FILE_MANAGEMENT=AUTO
dg_broker_start=true
5.修改监听文件
[oracle@oracle01 admin]$ vi listener.ora
添加静态监听
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=WWDB1)
(ORACLE_HOME=/u01/app/oracle/product/11.2.4/dbhome_1)
(SID_NAME=WWDB1))
(SID_DESC=
(GLOBAL_DBNAME=WWDB1_DGMGRL)
(ORACLE_HOME=/u01/app/oracle/product/11.2.4/dbhome_1)
(SID_NAME=WWDB1))
(SID_DESC=
(SID_NAME=plsextproc)
(ORACLE_HOME=/u01/app/oracle/product/11.2.4/dbhome_1)
(PROGRAM=extproc)))
[oracle@oracle01 admin]$ vi tnsnames.ora
添加如下内容
SBDB1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle02)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = SBDB1)
)
)
6.将监听文件、TNS文件、口令文件、参数文件
重要的是口令文件跟参数文件文件名要改成备库的名称
scp initWWDB1.ora oracle02:/u01/app/oracle/product/11.2.4/dbhome_1/dbs/initSBDB1.ora
scp orapwWWDB1 oracle02:/u01/app/oracle/product/11.2.4/dbhome_1/dbs/orapwSBDB1
scp ../network/admin/listener.ora ../network/admin/tnsnames.ora oracle02:/u01/app/oracle/product/11.2.4/dbhome_1/network/admin
7.重启主库使配置生效
注:重启库之前先重启监听
三、到备库中
1.创建对应路径
[oracle@oracle01~]$ cd /u01/app/oracle/
[oracle@oracle01 oracle]$ mkdir -p admin/SBDB1/adump
[oracle@oracle01 oracle]$ mkdir -p oradata/SBDB1
[oracle@oracle01 dbs]$ mkdir -p /home/oracle/flash
2.修改参数文件
[oracle@oracle01 oracle]$ cd $ORACLE_HOME/dbs
[oracle@oracle01 oracle]$ vi initSBDB1.ora(从主库中scp过来的)
注:用替换SBDB1全部替换成WWDB1然后需要注意的是db_name=主库sid
3.修改网络配置文件(配置监听文件)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle02)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=SBDB1)
(ORACLE_HOME=/u01/app/oracle/product/11.2.4/dbhome_1)
(SID_NAME=SBDB1))
(SID_DESC=
(GLOBAL_DBNAME=SBDB1_DGMGRL)
(ORACLE_HOME=/u01/app/oracle/product/11.2.4/dbhome_1)
(SID_NAME=SBDB1))
(SID_DESC=
(SID_NAME=plsextproc)
(ORACLE_HOME=/u01/app/oracle/product/11.2.4/dbhome_1)
(PROGRAM=extproc)))
4.重启网络设置
重启监听
[oracle@oracle01 oracle]$ lsnrctl reload
注:启动完看一下有一个动态监听一个静态监听
5.启动备库实例
SQL> create spfile from pfile;
备库启动到nomount状态
SQL> startup nomount
创建快速闪回区的目录
mkdir -p /u01/app/oracle/fast_recovery_area/SBDB1
6.搭建备库:
使用复制数据库技术搭建备库
[oracle@oracle01 oracle]$ rman target sys/oracle@WWDB1 auxiliary sys/oracle@sbdb1
RMAN> DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER
NOFILENAMECHECK;
运行成功,即备库搭建成功!
四、配置dg服务
主库:
开启日志传输服务
alter system set log_archive_dest_state_2=’enable’ scope=both sid=’*’;
备库:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
—(启动实时应用日志服务)。
——————————————————-搭建完成—————————————————
搭建中遇到的报错
报错1:
SQL> create spfile from pfile;
create spfile from pfile
- ERROR at line 1:
ORA-01078: failure in processing system parameters
LRM-00123: invalid character 154 found in the input file
解决方法:
在参数文件中有中文删掉即可,即使是注释中的也不行
报错2:
使用rman备份恢复备库的时候,报错可能是因为无catalog日志
需要加上nocatalog参数。
即:
rman target sys/oracle@WWDB1 auxiliary sys/oracle@sbdb1 nocatalog
报错3:
若无快速恢复区,
‘LOCATION=use_db_recovery_file_dest
此处,LOCATION=(归档日志归档的本地路径)。
———————————————————-DG的管理与应用————————————————–
A、开启实时日志应用
alter database recover managed standby database using current logfile disconnect;
1 开启应用日志 alter database recover managed standby database disconnect;
2 检查进程是否开启 select client_process,process,thread#,sequence#,status from v$managed_standby;
3 取消应用日志 alter database recover managed standby database cancel;
4 开启实时日志应用 alter database recover managed standby database using current logfile disconnect;
B、DATAGUARD验证
1主库切换日志
备库接受
更改时间显示
alter session set nls_date_format=’DD-MON-YYYY HH24:MI:SS’;
在线日志归档
alter system archive log current;
查看主库/备库归档是否同步
select sequence#,first_time,next_time,archived,applied from v$archived_log order by sequence#;
C、主库备库切换
1 查看主库/备库处于的模式
select name,database_role,open_mode,switchover_status from v$database;
2 主库切成备库
alter database commit to switchover to physical standby with session shutdown;
shutdown immediate
startup mount;
3 备库切换主库
alter database commit to switchover to primary;
shutdown immediate;
startup ;
D、修改数据保护模式步骤
1)关闭数据库,重启到Mount 状态,如果是RAC,需要关闭所有实例,然后只启动一个实例到mount状态。
2)修改模式:
语法:ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE};
如:SQL>ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;
3) 打开数据库: alter database open;
4) 确认修改数据保护模式:
SQL>select protection_mode,protection_level from v$database;
E、检查是否有丢失日志
1) 查看是否有日志GAP:
SQL> SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG;
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
2) 如果有,则拷贝过来
3) 手工的注册这些日志:
SQL> ALTER DATABASE REGISTER LOGFILE ‘路径’;
F、DG服务的启停
(1)启动SQL应用。逻辑Standby数据库启动SQL应用没有前、后台运行之说,语句执行完之后,控制权就会自动返回当前命令行窗口。
要启动SQL应用,直接执行下列语句即可:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;
如果要启动实时应用,附加IMMEDIATE子句即可,例如:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
(2)停止SQL应用,如:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
由于是执行SQL语句的方式应用REDO数据,因此上述语句的执行需要等待当前执行的SQL触发的事务结束,才能真正停止REDO应用的状态。
如果不考虑事务执行情况,马上停止REDO应用,可以通过下列的语句来完成:
SQL> ALTER DATABASE ABORT LOGICAL STANDBY APPLY;
(3)dg日志传输服务
主库:
停用dg(日志传输服务)
alter system set log_archive_dest_state_2=’defer’ scope=both sid=’*’;
启用dg(日志传输服务)
alter system set log_archive_dest_state_2=’enable’ scope=both sid=’*’;
G、DG架构的启用与停止(***)
启动
顺序:
先启从库再起主库
(1)查看监听
查看监听状态
lsnrctl status
若无监听,手动启动监听
lsnrctl start
(2)启动数据库
顺序:
启动从库—–从库上启动实时应用日志服务—–启动主库—-主库上启动日志传输服务
sql>startup;
备库
sql>alter database recover managed standby database using current logfile disconnect from session;(开启实时日志应用服务)
启动主库
由于主库设置着开机自启,使用将服务器打开就行了。
开启dg服务
主库:
alter system set log_archive_dest_state_2=’enable’ scope=both sid=’*’;开启日志传输服务
关闭:(和开启正好相反)
先关主库数据库:
停用dg服务
主库
alter system set log_archive_dest_state_2=’defer’ scope=both sid=’*’;(关闭日志传输服务)
注:若备库未停止实时应用日志服务就算关闭日志传输服务,备库也会跟主库同步。
sql>shutdown immediate;
再关从库:
停止实时应用日志服务
sql>alter database recover managed standby database cancel;
关闭数据库:
sql>shutdown immediate;
关闭服务器
posted on 2018-11-28 11:30 Warden_king 阅读(…) 评论(…) 编辑 收藏