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备份恢复备库的时候,报错缺失‘DBMS’触发器可能是因为无catalog日志
    需要加上nocatalog参数。
    即:
    rman target sys/oracle@WWDB1 auxiliary sys/oracle@sbdb1 nocatalog
    报错3:
    若无快速恢复区,
    'LOCATION=use_db_recovery_file_dest
    此处,LOCATION=(归档日志归档的本地路径)。
    报错四:
    无法创建****.cronctl.dbf
    可能没有该路径,或者oracle没有创建文件的权限

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

关闭服务器

转载于:https://www.cnblogs.com/Wardenking/p/10027834.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值