详细描述如何搭建单节点到单节点的Oracle Data Guard结构,下文简称为DG。
环境规划,参考下面的表格。
主库 | 备库 | |
---|---|---|
机器名 | dgdb1 | dgdb2 |
IP地址 | 10.128.20.125 | 10.128.20.126 |
操作系统版本 | Oracle Linux 6.5 | Oracle Linux 6.5 |
数据库版本 | 11.2.0.4 | 11.2.0.4 |
数据库名 | dgdb | dgdb |
数据库实例名 | dgdb1 | dgdb2 |
在服务器上安装操作系统。
根据环境规划设置服务器的主机名和IP地址。
在两台数据库服务器上面安装oracle软件,并在主机上创建数据库。
登录主库,执行下面的命令启用Forced Logging。
SQL> ALTER DATABASE FORCE LOGGING;
数据库已更改。
4.1.2. 创建standby日志组
查看现有的日志组
SQL> select GROUP#,MEMBER from v$logfile;
GROUP# MEMBER
------ --------------------------------------------------
1 /u01/app/oracle/oradata/DGDB/redo01.log
2 /u01/app/oracle/oradata/DGDB/redo02.log
3 /u01/app/oracle/oradata/DGDB/redo03.log
创建standby日志组要比联机日志组多一组。
SQL> alter database add standby logfile
group 4 ('/u01/app/oracle/oradata/DGDB/std_redo04.log') size 50m,
group 5 ('/u01/app/oracle/oradata/DGDB/std_redo05.log') size 50m,
group 6 ('/u01/app/oracle/oradata/DGDB/std_redo06.log') size 50m,
group 7 ('/u01/app/oracle/oradata/DGDB/std_redo07.log') size 50m;
数据库已更改。
查看数据库是否为归档模式
SQL> archive log list
数据库日志模式 非存档模式
自动存档 禁用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 52
当前日志序列 54
现在数据库为非归档模式,需要将数据库更改为归档模式
关闭数据库
sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on 星期四 10月 9 06:33:01 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
将数据库启动到mount模式
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 1653518336 bytes
Fixed Size 2253784 bytes
Variable Size 1375734824 bytes
Database Buffers 268435456 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
将数据库更改为归档模式
SQL> alter database archivelog;
数据库已更改。
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 51
下一个存档日志序列 53
当前日志序列 53
使用netca或netmgr创建listener.ora和tnsnames.ora.
修改listener.ora文件
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = DGDB1)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/dbhome_1)
(SID_NAME = DGDB)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dgdb1.dhc.com)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
修改tnsnames.ora
DGDB2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.128.20.126)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = DGDB2)
)
)
DGDB1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.128.20.125)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = DGDB1)
)
)
创建pfile
SQL> create pfile from spfile;
文件已创建。
然后在$ORACLE_HOME/dbs目录中找到文件initDGDB.ora。
修改initDGDB.ora,加入或者修改以下内容。
DB_UNIQUE_NAME='DGDB1'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(DGDB1,DGDB2)'
LOG_ARCHIVE_DEST_1=
'LOCATION=/arch
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=DGDB1'
LOG_ARCHIVE_DEST_2=
'SERVICE=DGDB2 lgwr ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=DGDB2'
log_archive_dest_state_1=enable
log_archive_dest_state_2=enable
fal_server='DGDB2'
fal_client='DGDB1'
standby_file_management=auto
修改参数文件之后,还要在两个机器上创建/arch目录来保存归档日志。
[root@dgdb1 ~]# mkdir /arch
[root@dgdb1 ~]# chown oracle:oinstall /arch/
[root@dgdb1 ~]# chmod 775 /arch/
关闭数据库
[oracle@dgdb1 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on 星期四 10月 9 06:37:26 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
创建spfile
SQL> create spfile from pfile;
文件已创建。
启动数据库
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1653518336 bytes
Fixed Size 2253784 bytes
Variable Size 1375734824 bytes
Database Buffers 268435456 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
数据库已经打开。
在备库上用netca或者netmgr创建listener.ora和tnsnames.ora。
修改listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = DGDB2)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/dbhome_1)
(SID_NAME = DGDB)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dgdb2.dhc.com)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
修改tnsnames.ora
DGDB2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.128.20.126)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = DGDB2)
)
)
DGDB1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.128.20.125)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = DGDB1)
)
)
将主库/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs目录中的pfile和密码文件复制到备库上。
[oracle@dgdb1 dbs]$ scp initDGDB.ora orapwDGDB 10.128.20.126:/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/
The authenticity of host '10.128.20.126 (10.128.20.126)' can't be established.
RSA key fingerprint is 0c:74:49:a9:2c:dd:ff:af:c9:1f:cb:6b:a6:44:4d:3b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.128.20.126' (RSA) to the list of known hosts.
[email protected]'s password:
initDGDB.ora 100% 1386 1.4KB/s 00:00
orapwDGDB 100% 1536 1.5KB/s 00:00
修改pfile
DB_UNIQUE_NAME='DGDB2'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(DGDB1,DGDB2)'
LOG_ARCHIVE_DEST_1=
'LOCATION=/arch
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=DGDB2'
LOG_ARCHIVE_DEST_2=
'SERVICE=DGDB1 lgwr ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=DGDB1'
log_archive_dest_state_1=enable
log_archive_dest_state_2=enable
fal_server='DGDB1'
fal_client='DGDB2'
standby_file_management=auto
在备库上创建spfile
[oracle@dgdb2 admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on 星期四 10月 9 06:56:55 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
已连接到空闲例程。
SQL> create spfile from pfile;
文件已创建。
在备库上创建必需的目录
mkdir /u01/app/oracle/fast_recovery_area
mkdir -p /u01/app/oracle/admin/DGDB/adump
启动备库到nomount
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 1653518336 bytes
Fixed Size 2253784 bytes
Variable Size 1375734824 bytes
Database Buffers 268435456 bytes
Redo Buffers 7094272 bytes
使用下面的命令,登录rman
rman target sys/oracle@DGDB1 auxiliary sys/oracle@DGDB2 nocatalog
恢复管理器: Release 11.2.0.4.0 - Production on 星期四 10月 9 07:44:07 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: DGDB (DBID=2206457594)
使用目标数据库控制文件替代恢复目录
已连接到辅助数据库: DGDB (未装载)
使用下面的命令,生成物理备库
RMAN> duplicate target database for standby nofilenamecheck from active database;
生成的备库没有redo和standby日志文件,需要把主库的文件复制过去。
[oracle@dgdb1 DGDB]$ scp *.log 10.128.20.126:/u01/app/oracle/oradata/DGDB/oracle@10.128.20.126's password:
redo01.log 100% 50MB 50.0MB/s 00:01
redo02.log 100% 50MB 25.0MB/s 00:02
redo03.log 100% 50MB 50.0MB/s 00:01
std_redo04.log 100% 50MB 50.0MB/s 00:01
std_redo05.log 100% 50MB 50.0MB/s 00:01
std_redo06.log 100% 50MB 50.0MB/s 00:01
std_redo07.log 100% 50MB 50.0MB/s 00:01
重启一下备库
[oracle@dgdb2 DGDB]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on 星期四 10月 9 07:45:23 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 /arch
最早的联机日志序列 0
下一个存档日志序列 0
当前日志序列 0
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
启动备库到mount
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 1653518336 bytes
Fixed Size 2253784 bytes
Variable Size 1375734824 bytes
Database Buffers 268435456 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
将备库切换到standby
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
数据库已更改。
在备库上验证存在的归档日志。
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- -------------- --------------
101 12-10月-14 13-10月-14
102 13-10月-14 13-10月-14
103 13-10月-14 14-10月-14
104 14-10月-14 14-10月-14
105 14-10月-14 15-10月-14
106 15-10月-14 15-10月-14
107 15-10月-14 15-10月-14
108 15-10月-14 16-10月-14
109 16-10月-14 16-10月-14
在主库切换下日志
SQL> alter system switch logfile;
系统已更改。
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 /arch
最早的联机日志序列 109
下一个存档日志序列 111
当前日志序列 111
在备库下看归档的状态
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 /arch
最早的联机日志序列 109
下一个存档日志序列 0
当前日志序列 111
查看主库传过来的归档是否被应用
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# APPLIED
---------- ---------
101 YES
102 YES
103 YES
104 YES
105 YES
106 YES
107 YES
108 YES
109 YES
110 IN-MEMORY
到此DG的搭建已经完成。