cent os6.5搭建oracle-dataguard

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shizheng163/article/details/73549465


参考文章: 手把手教你安装Data Guard 非常感谢此文作者,在我搭建DataGuard的过程中提供了很大帮助。

此文综合了一些其他参考资料与上述文章,供初学者参考。

前言

此文适合于初步学习dataguard的同仁,本人也是刚接触dataguard 在搭建过程中吃了不少苦头,所以特地总结出来,希望能帮助到大家。

1 配置信息

主库安装数据库,备库只装数据库软件

主库:

操作系统:CentOs6.5

数据库版本:Oracle 11g R2

DB_UNIQUE_NAME:JCZH

GLOBAL_NAME:JCZH

SERVICE_NAME:JCZH

ORACLE_SID:JCZH

主机名 bm-db3

IP:192.168.1.105

 

备库: (以下部分信息是以主库信息生成的,之前不存在

操作系统:CentOs6.5

数据库版本:Oracle 11g R2

DB_UNIQUE_NAME:JCZHSTANDBY

GLOBAL_NAME:JCZHSTANDBY

SERVICE_NAME:JCZHSTANDBY

ORACLE_SID:JCZH

主机名 bm-db2

IP:192.168.1.106


2修改Host文件

主库:

oracle@bm-db2 ~]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 bm-db3
::1            localhost localhost.localdomain localhost6 localhost6.localdomain6 bm-db3
192.168.1.105 bm-db3
192.168.1.106 bm-db2

备库:

[oracle@bm-db2 ~]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 bm-db2
::1            localhost localhost.localdomain localhost6 localhost6.localdomain6 bm-db2
192.168.1.105 bm-db3
192.168.1.106 bm-db2

3 确定开启监听文件(主库)

[oracle@bm-db3 ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 19-JUN-2017 12:13:20
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
****************
****************
Listener Parameter File   /oracle/product/11.2.4/db_1/network/admin/listener.ora
Listener Log File         /oracle/diag/tnslsnr/bm-db3/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
Services Summary...
Service "JCZH" has 2 instance(s).
  Instance "JCZH", status UNKNOWN, has 1 handler(s) for this service...
  Instance "JCZH", status READY, has 1 handler(s) for this service...
Service "JCZHXDB" has 1 instance(s).
  Instance "JCZH", status READY, has 1 handler(s) for this service...
The command completed successfully

4 开启主库归档模式并修改监听,生成参数文件

4.1 开启主库归档模式

[oracle@bm-db3 ~]$ sqlplus "/as sysdba"
查看:
SQL> archive log list;
Database log mode	       Archive Mode
Automatic archival	       Enabled
………
若未开启 执行以下命令开启:

alter database archivelog;


更改主库为force logging
SQL> alter database force logging;
Database altered.

4.2创建主库密码文件并修改监听(主库)

cd /$ORACLE_HOME/network/admin
orapwd file=$ORACLE_HOME/dbs/orapwJCZH password=oracle entries=30;

修改监听文件,加入静态监听

[oracle@bm-db3 admin]$ cat listener.ora 
# listener.ora Network Configuration File: /oracle/product/11.2.4/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = JCZH)
      (ORACLE_HOME = /mnt/disk1/oracle/product/11.2.4/db_1)
      (SID_NAME = JCZH)
    )
  )

ADR_BASE_LISTENER = /oracle
监听文件建议复制系统生成的格式进行修改 复制空格对不上也会导致不能正常启动

修改 tnsname文件

[oracle@bm-db3 admin]$ cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /oracle/product/11.2.4/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

JCZH =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = bm-db3)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = JCZH)
    )
  )
JCZHSTANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = bm-db2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = JCZHSTANDBY)
    )
  )


4.3生成参数文件并修改

主库:进入sqlplus
sqlplus “/as sysdba”
SQL->create pfile from spfile;
cd  $ORACLE_HOME/dbs
[oracle@bm-db3 dbs]$ cat initJCZH.ora 
……..
*.db_file_name_convert='/mnt/disk1/oracle/oradata/JCZH','/mnt/disk1/oracle/oradata/JCZH'
*.db_name='JCZH'
*.db_recovery_file_dest_size=10737418240
*.db_unique_name='JCZH'
*.fal_client='JCZH'
*.fal_server='JCZHSTANDBY'
*.log_archive_config='dg_config=(JCZH,JCZHSTANDBY)'
*.log_archive_dest_1='LOCATION=/arch/JCZH LGWR VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=JCZH'
*.log_archive_dest_2='service=JCZHSTANDBY LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=JCZHSTANDBY'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.log_archive_format='%t_%s_%r.arc'
*.log_file_name_convert='/mnt/disk1/oracle/oradata/JCZH','/mnt/disk1/oracle/oradata/JCZH'
*.standby_file_management='AUTO'
修改文件中以上值 没有则添加,若有则保证路径信息等正确, db_recovery_file_dest_size 保证值不小于该值

注意:
1.log_archive_dest_2='SERVICE=STANDBY这个参数就是tnsnames的别名,就是这个文件开头的那个大写的名字。

log_archive_dest_1 为本地日志的存放信息

注意DB_UNIQUE_NAME的不同。

配置此参数的意义为开启远程归档日志的传输。
2: *.fal_server=JCZHSTANDBY
    *.fal_client=JCZH

这两个参数是各自的service_name。 主备库相反

3. db_file_name_convert log_file_name_convert分别是数据和日志存放地址,参数中第一个为备库的,第二个是主库的。注意。

修改完成后进入sqlplus 

执行create spfile from pfile;
若出现提示数据库已打开则 
shutdown immediate
create spfile from pfile;
startup

5.传输文件

注意!以下所有执行都要下防火墙关闭模式下进行

主备库都执行以下命令

service iptables stop
chkconfig iptables off
service iptables status

主库:

传输主库的参数文件、密码文件以及tnsname文件到备库上:

cd  $ORACLE_HOME/dbs
scp initJCZH.ora orapwJCZH bm-db2:$ORACLE_HOME/dbs
cd /$ORACLE_HOME/network/admin/
scp tnsnames.ora bm-db2:$ORACLE_HOME/network/admin/


修改备库参数文件备库上操作

cd $ORACLE_HOME/dbs
[oracle@bm-db2 dbs]$ cat initJCZH.ora 
*.audit_file_dest='/oracle/admin/JCZHSTANDBY/adump'
*.control_files='/oracle/oradata/JCZH/control01.ctl','/oracle/fast_recovery_area/JCZH/control02.ctl'
*.db_file_name_convert='/oracle/oradata/JCZH','/oracle/oradata/JCZH' #主备库相反 数据库文件存放地址
*.db_name='JCZH'
*.db_recovery_file_dest='/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=10737418240
*.db_unique_name='JCZHSTANDBY' #修改 一定要与主库不同 作者没有配置过相同的
*.diagnostic_dest='/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=JCZHXDB)'
*.fal_client='JCZHSTANDBY' #修改与主库相反
*.fal_server='JCZH' #同上
*.log_archive_config='dg_config=(JCZHSTANDBY,JCZH)'
*.log_archive_dest_1='LOCATION=/arch/JCZHSTANDBY LGWR VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=JCZHSTANDBY' 
#注意修改 为本地归档目录地址,录像在下文中创建
*.log_archive_dest_2='service=JCZH LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=JCZH' #注意修改
*.log_file_name_convert='/oracle/oradata/JCZH','/oracle/oradata/JCZH' #主备库相反 日志文件存放地址
将模板中的红色值修改为你自己的 注意 部分参数主备库是相反的。

6创建目录

在备库上创建相应的目录,因为备库开始没有创建数据库,有些目录是参数文件中没有的。

以下创建的目录一定要确定是Oracle用户 oinstall组的

在oracle用户下创建 如oracle用户没有权限则在root用户下创建

创建完成后执行

chown -R oracle:oinstall 对应目录

创建相关目录

mkdir -p  /mnt/disk1/oracle/admin/JCZH/adump/
mkdir -p /oracle/fast_recovery_area
mkdir -p /mnt/disk1/oracle/oradata/JCZH
mkdir  /mnt/disk1/backup
chown -R oracle:oinstall /mnt/disk1/backup /oracle/fast_recovery_area
chmod 777 /mnt/disk1/backup /oracle/fast_recovery_area
mkdir -p  /mnt/disk1/arch/JCZH
chown -R oracle:oinstall /mnt/disk1/arch
chown -R oracle:oinstall  /mnt/disk1/arch/JCZH
chmod 777  /mnt/disk1/arch/JCZH

主库上操作

在主库上用rman做一个全备,也需要创建备份的目录:

mkdir  /mnt/disk1/backup
chown -R oracle:oinstall /mnt/disk1/backup
chmod 777 /mnt/disk1 /backup
mkdir -p  /mnt/disk1/arch/JCZH
chown -R oracle:oinstall /mnt/disk1/arch
 chown -R oracle:oinstall  /mnt/disk1/arch/JCZH
chmod 777  /mnt/disk1/arch/JCZH

主库上进行数据备份

rman
connect target /
backup device type disk format '/mnt/disk1/backup/%U' database plus archivelog;

退出rman,将主库的备份文件传输到备库

此处再此强调,一定要关闭防火墙,并且使创建的所有目录都在oracle用户下,且具有相应的权限

cd /mnt/disk1/backup/
scp * bm-db2: /mnt/disk1/backup

备库上操作 启动oracle到nomount状态

su – oracle
sqlplus / as sysdba
startup nomount;

修改备库的监听文件。

cd $ORACLE_HOME/networdk/admin
[oracle@bm-db2 admin]$ cat listener.ora 
# listener.ora Network Configuration File: /oracle/product/11.2.4/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = JCZHSTANDBY)
      (ORACLE_HOME = /oracle/product/11.2.4/db_1)
      (SID_NAME = JCZH)
    )
  )
ADR_BASE_LISTENER = /oracle

启动监听确保服务注册无误

 lsnrctl start 
若监听已启动,执行

lsnrctl reload;

此处配置完成后主备库都应进行连接测试

tnsping JCZH
tnsping JCZHSTANDBY

显示Ok则配置完成,若有问题则检查防火墙与tns文件是否有误!

7应用备份文件

主库数据库启动到Mount状态

进入sqlplus 
shutdown immediate;
startup mount;
主库应用备份文件到备库上,使用duplicate方式(在主库上执行)

Oralce用户下执行 rman指令

rman

connect target /

connect auxiliary sys/oracle@JCZHSTANDBY   

duplicate target database for standby;

如果主备库日志存放路径与数据库存放路径相同 standby后面加入 nofilenamecheck命令

duplicate target database for standby nofilenamecheck;

执行中 等待命令完成 


执行备库恢复模式。(在备库上执行

SQL> select instance_name,status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
JCZH 			MOUNTED

将主库切换为Open状态。

主库进入 sqlplus模式

alter database open;


备库上执行日志同步

SQL> alter database recover managed standbydatabase disconnect from session;
Database altered.


查看日志同步情况,确保日志都应用了。

select name,sequence#,APPLIED from v$archived_log order by sequence#;

没有数据或日志出现No都有问题 检查文件权限以及防火墙问题,还不能解决

查看日志信息

没有数据或日志出现No都有问题 检查文件权限以及防火墙问题,还不能解决
查看日志信息
oracle@bm-db2 admin]$ cd $Oracle_Base/diag/rdbms/jczhstandby/JCZH/trace/
[oracle@bm-db2 trace]$ tail -100f alert_JCZH.log

创建 standby logfile 。主库和备库都要添加。

主库:
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/mnt/disk1/oracle/oradata/JCZH/sredo01.log' size 512M; 
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/mnt/disk1/oracle/oradata/JCZH/sredo02.log' size 512M; 
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/mnt/disk1/oracle/oradata/JCZH/sredo03.log' size 512M; 
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/mnt/disk1/oracle/oradata/JCZH/sredo04.log' size 512M; 


备库:
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/mnt/disk1/oracle/oradata/JCZH/sredo01.log' size 512M; 
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/mnt/disk1/oracle/oradata/JCZH/sredo02.log' size 512M; 
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/mnt/disk1/oracle/oradata/JCZH/sredo03.log' size 512M; 
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/mnt/disk1/oracle/oradata/JCZH/sredo04.log' size 512M; 
注意路径修改



8 实现日志同步

备库上执行

alter database recover managed standby database disconnect from session;

若提示已有恢复进程在进行中,则应用以下命令取消:

SQL> alter database recover managed standby database cancel;


同步完成后 取消这个恢复进程

SQL> alter database recover managed standby database cancel;

将备库启动到openread only的状态
SQL> alter database open read only;

9查看日志是否同步

查看主库和备库的日志同步情况,确保已经同步

主库:

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /arch/JCZH
Oldest online log sequence     21
Next log sequence to archive   23
Current log sequence           23


备库:
SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /arch/JCZHSTANDBY
Oldest online log sequence     21
Next log sequence to archive   0
Current log sequence           23


备库执行:

select name,sequence#,APPLIED from v$archived_log order bysequence#;

若未出现日志应用信息 则检查主库是否处于Open状态

若日志应用状态出现No 则执行

SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered.
若日志已应用 但序号不统一 (Next不用管)

在主库上执行

alter system switch logfile;

执行完成后再使用 archive log list;进行对比


若仍然无法同步,查看日志信息 进行实时监控

10.确认数据同步 

在主库上创建一张表,看备库上是否可以查看到。

SQL> create table test (id number);
备库:
SQL> desc test
ERROR:
ORA-04043: object test does not exist
注意:
发现数据没有同步,请执行下面语句,接收数据。

SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered.
SQL> desc test
 Name                                     Null?   Type
 ----------------------------------------- ------------------------------------
 ID                                               NUMBER

再次验证数据是否同步。
主库:
SQL> insert into test values(1);
1 row created.


SQL> commit;
Commit complete.
备库:
SQL> select * from test;
        ID
----------
         1


至此DataGuard已经搭建完成,接下来就是主备切换了。


总结:

dataguard 从0开始学习到搭建成功,期间遇到过好多困难,与很多无法解决的错误(事实上是因为粗心问题导致,例如相应的目录没有权限)。
要学会查看日志信息。如此文有不当之处还望各位指出。
祝大家学习进步,工作顺利!



猜你喜欢

转载自blog.csdn.net/shizheng163/article/details/73549465
今日推荐