ORACLE DG 搭建及日常维护手册

[TOC]

# ORACLE DG 搭建、切换及日常维护手册

## ORACLE DG 数据库信息

数据库版本 11.2.0.4

从库 是 10.0.6.6 主库 是 192.0.0.9 这样的是吧。

| 角色 | ip | db_unique_name | 存储 |
| —- | ——— | ————– | ——– |
| 主库 | 192.0.0.9 | liupsdb | 文件系统 |
| DG | 10.0.6.6 | liupsdbdg | 文件系统 |

“`
echo $ORACLE_HOME
/data/app/oracle/product/11.2.0.4/dbhome_1
echo $ORACLE_HOME
/data/app/oracle/product/11.2.0.4/dbhome_1
telnet 10.0.6.6 1521
telnet 192.0.0.9 1521
dbca -silent -deletedatabase -sourcedb liupsdb -sysdbausername sys
“`

 

## 配置归档模式

主库进行如下操作进行force logging和归档配置

### 配置 force logging 模式

“`shell
ALTER DATABASE FORCE LOGGING;
“`

### 配置归档模式

“`shell
shutdown immediate
startup mount
alter database archivelog;
alter database open;
“`

### 检查归档模式

“`shell
SQL> select LOG_MODE, FORCE_LOGGING from v$database;

LOG_MODE FOR
———— —
ARCHIVELOG YES

SQL>
“`

## 配置静态监听及tns

DG 上配置静态配置 /data/app/oracle/product/11.2.0.4/dbhome_1

“`
vi /data/app/oracle/product/11.2.0.4/dbhome_1/network/admin/listener.ora
“`

 

“`shell
新增
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = liupsdb)
(ORACLE_HOME = /data/app/oracle/product/11.2.0.4/dbhome_1)
(SID_NAME = liupsdb)
)
)
“`

### 重启监听

“`shell
lsnrctl stop
lsnrctl start
“`

### 配置 tns

主从都修改 tnsnames.ora,新增如下信息

“`
vi /data/app/oracle/product/11.2.0.4/dbhome_1/network/admin/tnsnames.ora
“`

pri

“`shell
liupsdbdg =
(description =
(address = (protocol = tcp)(host = 10.0.6.6)(port = 1521))
(connect_data =
(server = dedicated)
(service_name = liupsdb)
)
)
liupsdb =
(description =
(address = (protocol = tcp)(host = 192.0.0.9)(port = 1521))
(connect_data =
(server = dedicated)
(service_name = liupsdb)
)
)
“`

dg

“`
liupsdbdg =
(description =
(address = (protocol = tcp)(host = 10.0.6.6)(port = 1521))
(connect_data =
(server = dedicated)
(service_name = liupsdb)
)
)
liupsdb =
(description =
(address = (protocol = tcp)(host = 10.0.0.47)(port = 1521))
(connect_data =
(server = dedicated)
(service_name = liupsdb)
)
)
“`

 

### 测试 tns

“`shell
[oracle@ecsdbdg1 admin]$ tnsping liupsdb

TNS Ping Utility for Linux: Version 11.2.0.1.0 – Production on 04-MAR-2019 22:17:43

Copyright (c) 1997, 2009, Oracle. All rights reserved.

Used parameter files:
/data/app/oracle/product/11.2.0.4/dbhome_1/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (description = (address = (protocol = tcp)(host = 192.0.0.9)(port = 1521)) (connect_data = (server = dedicated) (service_name = liupsdb)))
OK (20 msec)
[oracle@ecsdbdg1 admin]$ tnsping liupsdbdg

TNS Ping Utility for Linux: Version 11.2.0.1.0 – Production on 04-MAR-2019 22:17:51

Copyright (c) 1997, 2009, Oracle. All rights reserved.

Used parameter files:
/data/app/oracle/product/11.2.0.4/dbhome_1/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (description = (address = (protocol = tcp)(host = 10.0.6.6)(port = 1521)) (connect_data = (server = dedicated) (service_name = liupsdb)))
OK (0 msec)
“`

## 新增 redo log file 和 standby log file

主库上进行 redo log file 和 standby log file 操作

“`sql
alter database add standby logfile thread 1 group 21 (‘/data1/oradata/liupsdbDG/onlinelog/sty_redo01.log’) size 1073741824;
alter database add standby logfile thread 1 group 22 (‘/data1/oradata/liupsdbDG/onlinelog/sty_redo02.log’) size 1073741824;
alter database add standby logfile thread 1 group 23 (‘/data1/oradata/liupsdbDG/onlinelog/sty_redo03.log’) size 1073741824;
alter database add standby logfile thread 1 group 24 (‘/data1/oradata/liupsdbDG/onlinelog/sty_redo04.log’) size 1073741824;
alter database add standby logfile thread 1 group 25 (‘/data1/oradata/liupsdbDG/onlinelog/sty_redo05.log’) size 1073741824;
alter database add standby logfile thread 1 group 26 (‘/data1/oradata/liupsdbDG/onlinelog/sty_redo06.log’) size 1073741824;
alter database add standby logfile thread 1 group 27 (‘/data1/oradata/liupsdbDG/onlinelog/sty_redo07.log’) size 1073741824;

alter database add logfile group 1 (‘/data1/oradata/’) size 1073741824;
“`

## 主库修改数据库参数

“`sql
alter system set log_archive_config=’dg_config=(liupsdb,liupsdbdg)’;
alter system set log_archive_dest_1=’location=/data1/arch/ valid_for=(all_logfiles,all_roles) db_unique_name=liupsdbdg’;
alter system set log_archive_dest_2=’SERVICE=liupsdbdg lgwr async valid_for=(ONLINE_LOGFILES,primary_role) db_unique_name=liupsdb’;
alter system set standby_file_management=’AUTO’;
alter system set fal_server=liupsdbdg;
alter system set log_archive_dest_state_2=enable;
“`

## 复制密码文件到备库

“`shell
cd $ORACLE_HOME/dbs
scp scp orapwliupsdb 10.0.6.6:/data/app/oracle/product/11.2.0.4/dbhome_1/
“`

## 备库启动数据库实例

备库创建审计日志目录

“`shell
mkdir -p /data/app/oracle/admin/liupsdb/adump
“`

备库启动数据库实例到 nomount 状态

“`shell
cd $ORACLE_HOME/dbs
touch initliupsdb.ora
echo “db_name=liupsdb”>initliupsdb.ora
“`

“`
sqlplus sys/hvcrda90n@liupsdb as sysdba
sqlplus sys/hvcrda90n@liupsdbdg as sysdba
“`

“`
mkdir -p /data/app/oracle/oradata/liupsdbDG/datafile/
mkdir -p /data/app/oracle/oradata/liupsdb/
mkdir -p /data1/app/oracle/oradata/liupsdb/datafile/
mkdir -p /data1/oradata/liupsdbDG/datafile/
mkdir -p /data/app/oracle
mkdir -p /data/app/oracle/admin/liupsdb/adump
mkdir -p /data/app/oracle/oradata/liupsdb/
mkdir -p /data1/oradata
mkdir -p /data/app/oracle/oradata/liupsdb
mkdir -p /data/app/oracle/oradata/liupsdb
mkdir -p /data/app/oracle
mkdir -p /data1/arch
mkdir -p /data/app/oracle/oradata/liupsdb
“`

## rman duplicate 搭建DG从库

rman 登录数据库

oracle 用户执行 rman 命令,然后使用如下脚本进行DG搭建。

“`
rman
“`

cat r.sh

“`shell

connect target sys/pass@liupsdb
connect auxiliary sys/pass@liupsdbdg
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate auxiliary channel s1 type disk;
allocate auxiliary channel s2 type disk;
allocate auxiliary channel s3 type disk;
allocate auxiliary channel s4 type disk;
duplicate target database
for standby
from active database nofilenamecheck
dorecover
spfile
parameter_value_convert ‘liupsdb’,’liupsdb’,’liupsdbdg’,’liupsdb’
set db_unique_name=’liupsdb’
set cluster_database=’false’
set fal_server=’liupsdb’
set remote_listener=”
set local_listener=”
set standby_file_management=’AUTO’
set db_create_file_dest=”
set db_create_online_log_dest_1=”
set log_archive_config=’dg_config=(liupsdb,liupsdbdg)’
set log_archive_dest_1=’location=/data1/arch/ valid_for=(all_logfiles,all_roles) db_unique_name=liupsdb’
set log_archive_dest_2=’SERVICE=liupsdb lgwr async VALID_FOr=(ONLINE_LOGFILES,primary_role) DB_UNIQUE_NAME=liupsdbdg’
set log_archive_dest_state_2=’enable’
;
sql channel c1 “alter system archive log current”;
sql channel s1 “alter database open”;
sql channel s1 “alter database recover managed standby database using current logfile disconnect”;
}
“`

 

## 查看DG数据同步详情

查看脚本为 /home/oracle/dginfo.sh,内容如下

“`shell
#!/usr/bin/env sh
sqlplus / as sysdba <<EOF
set lines 123
set pages 200
col CTIME format a20
col NAME format a20
col VALUE format a20
col DATUM_TIME format a20
show parameter service_name
select open_mode, DATABASE_ROLE from v\$database;
SELECT TO_NUMBER( SUBSTR ( (SUBSTR (VALUE, 5)), 0, 2) * 3600 + SUBSTR ( (SUBSTR (VALUE, 5)), 4, 2) * 60 + SUBSTR ( (SUBSTR (VALUE, 5)), 7, 2)) dgbehind, TO_CHAR (SYSDATE, ‘yyyymmdd hh24:mi:ss’
) CTIME, NAME, VALUE,DATUM_TIME FROM V\$DATAGUARD_STATS WHERE NAME =’apply lag’;
select process,block#,blocks ,status ,sequence# from v\$managed_standby;
exit
EOF
“`

 

 

## DG日常维护手册

以下所有操作如果没有特别说明使用 oracle 用户执行

### 1、启动监听

“`shell
lsnrctl start
“`

### 2、查看监听状态

“`shell
lsnrctl status
“`

### 3、关闭监听

“`shell
lsnrctl stop
“`

### 4、启动数据库

“`sql
sqlplus / as sysdba
SQL> startup
“`

### 5、关闭数据库

“`
sqlplus / as sysdba
SQL> shutdown immediate
“`

### 6、启动数据同步进程

“`sql
sqlplus / as sysdba
SQL> alter database recover managed standby database using current logfile disconnect;
“`

d