实战:Windows平台下搭建Oracle11g Dataguard

导读
本文介绍在windows server 2012 r2 环境下搭建Oracle11g Dataguard。

将数据库改为强制日志模式(此步骤只在主库上做)

SQL>alter database force logging;
SQL> select name,log_mode,force_logging from v$database;

创建密码文件(此步骤只在主库上做)

orapwd file=orapwORCL password=oracle force=y

将主库的密码文件拷贝到备库

创建standby redolog 日志组(此步骤只在主库上做)

SQL>select thread#,group#,bytes/1024/1024 from v$log;
SQL> col member for a50
SQL> select group#,member from v$logfile;

SQL>alter database add standby logfile group 101 'D:\ORADATA\ORCL\redo101.log' size 200m;
SQL>alter database add standby logfile group 102 'D:\ORADATA\ORCL\redo102.log' size 200m;
SQL>alter database add standby logfile group 103 'D:\ORADATA\ORCL\redo103.log' size 200m;
SQL>alter database add standby logfile group 104 'D:\ORADATA\ORCL\redo104.log' size 200m;

SQL> select group#,sequence#,status, bytes/1024/1024 from v$standby_log;

SQL> set pagesize 100
SQL> col member for a60
SQL> select group#,member from v$logfile order by group#;

修改主库的pfile 参数文件(此步骤只在主库上做)

SQL> show parameter spfile;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      D:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SPFILEORCL.ORA

=======================================================================================
SQL>create pfile from spfile;

备份pfile

编辑pfile:
orcl.__db_cache_size=79691776
orcl.__java_pool_size=12582912
orcl.__large_pool_size=12582912
orcl.__oracle_base='D:\app\Administrator'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=104857600
orcl.__sga_target=419430400
orcl.__shared_io_pool_size=58720256
orcl.__shared_pool_size=243269632
orcl.__streams_pool_size=0
*.audit_file_dest='D:\app\Administrator\admin\orcl\adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='D:\oradata\orcl\control01.ctl','D:\oradata\orcl\control02.ctl','D:\oradata\orcl\control03.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.diagnostic_dest='D:\app\Administrator'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.log_archive_dest_1='LOCATION=d:\archivelog'
*.log_archive_format='ARC%S_%R.%T'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=104857600
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=170
*.sga_target=419430400
*.undo_tablespace='UNDOTBS1'

*.DB_UNIQUE_NAME='orcl'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,orcldg2)'
*.log_archive_dest_1='LOCATION=D:\archivelog  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)   DB_UNIQUE_NAME=orcl'
*.log_archive_dest_2='SERVICE=orcldg2  LGWR SYNC AFFIRM    VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)    DB_UNIQUE_NAME=orcldg2'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'
*.LOG_ARCHIVE_MAX_PROCESSES=30

*.FAL_CLIENT='orcl'
*.FAL_SERVER='orcldg2'
*.DB_FILE_NAME_CONVERT='D:\oradata\orcldg2','D:\oradata\orcl'
*.LOG_FILE_NAME_CONVERT='D:\oradata\orcldg2','D:\oradata\orcl'
*.STANDBY_FILE_MANAGEMENT='AUTO'

用修改过的pfile 重新创建一个spfile ,用于重启数据库(此步骤只在主库上做)

SQL>shutdown immediate;

SQL> create spfile from pfile;

此时把数据库改为归档模式: (如果当初建库时选择了启用归档,则此步骤忽略)

由于当前数据库已关闭,首先需要把数据库启动到mount 状态

SQL> startup mount;

SQL> alter database archivelog;

SQL> alter database open;

SQL> archive log list;

如上,归档路径已经改为/oradata/archivelog,证明对pfile 的修改已生效
查看当前数据库是否使用spfile 启动:

SQL> show parameter spfile;

如上,若能看到spfile 的路径,则证明数据库是使用spfile 启动的,若没有值,则说明是用
pfile 启动的。
确认数据库已经启用归档模式和强制日志模式:

SQL>  select name,log_mode,force_logging from v$database;

修改监听文件,添加静态监听(主库、备库都要做)

主库:
添加如下内容:
SID_LIST_LISTENER =
    (SID_LIST =
        (SID_DESC =
            (GLOBAL_DBNAME = orcl)
            (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
            (SID_NAME = orcl)
        )
    )
添加后如下:
SID_LIST_LISTENER =
    (SID_LIST =
        (SID_DESC =
            (GLOBAL_DBNAME = orcl)
            (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
            (SID_NAME = orcl)
        )
    )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.18.3.102)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = D:\app\Administrator

重启监听:

lsnrctl stop
lsnrctl start
lsnrctl status



备库:
添加如下内容:
SID_LIST_LISTENER =
    (SID_LIST =
        (SID_DESC =
            (GLOBAL_DBNAME = orcldg2)
            (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
            (SID_NAME = orcldg2)
        )
    )
添加后如下:

SID_LIST_LISTENER =
    (SID_LIST =
        (SID_DESC =
            (GLOBAL_DBNAME = orcldg2)
            (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
            (SID_NAME = orcldg2)
        )
    )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.18.3.78)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = D:\app\Administrator


重启监听:
lsnrctl stop
lsnrctl start
lsnrctl status

编辑网络服务名配置文件tnsnames.ora (主库和备库端都要做)

主库添加:
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.18.3.102)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

ORCLDG2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.18.3.78)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcldg2)
    )
  )

备库添加:
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.18.3.102)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

ORCLDG2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.18.3.78)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcldg2)
    )
  )

配置完后,确保在任意一端上都能tnsping 通对方:

tnsping orcl
tnsping orcldg2

在备库端,修改pfile 参数文件(只在备库端做)

把主库的pfile拷贝到备库进行修改,修改如下:
orcl.__db_cache_size=79691776
orcl.__java_pool_size=12582912
orcl.__large_pool_size=12582912
orcl.__oracle_base='D:\app\Administrator'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=104857600
orcl.__sga_target=419430400
orcl.__shared_io_pool_size=58720256
orcl.__shared_pool_size=243269632
orcl.__streams_pool_size=0
*.audit_file_dest='D:\app\Administrator\admin\orcldg2\adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='D:\oradata\orcldg2\control01.ctl','D:\oradata\orcldg2\control02.ctl','D:\oradata\orcldg2\control03.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.diagnostic_dest='D:\app\Administrator'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orcldg2XDB)'
*.log_archive_dest_1='LOCATION=d:\archivelog'
*.log_archive_format='ARC%S_%R.%T'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=104857600
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=170
*.sga_target=419430400
*.undo_tablespace='UNDOTBS1'

*.DB_UNIQUE_NAME='orcldg2'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,orcldg2)'
*.log_archive_dest_1='LOCATION=D:\archivelog  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)   DB_UNIQUE_NAME=orcldg2'
*.log_archive_dest_2='SERVICE=orcl  LGWR SYNC AFFIRM    VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)    DB_UNIQUE_NAME=orcl'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'
*.LOG_ARCHIVE_MAX_PROCESSES=30

*.FAL_CLIENT='orcldg2'
*.FAL_SERVER='orcl'
*.DB_FILE_NAME_CONVERT='D:\oradata\orcl','D:\oradata\orcldg2'
*.LOG_FILE_NAME_CONVERT='D:\oradata\orcl','D:\oradata\orcldg2'
*.STANDBY_FILE_MANAGEMENT='AUTO'

注意:整个搭建过程最需要留意的就是主库和备库的PFILE 配置,建议修改完后仔细对照
主备库PFILE 的区别

在备库端手工创建所需的目录(备库端做,不提前创建的话恢复时会报错! )

D:\app\Administrator\admin\orcldg2\adump
D:\app\Administrator\diag\rdbms\orcldg2\orcldg2\trace
D:\oradata\orcldg2
D:\archivelog

备库创建数据库实例
对于备机因为只安装软件,没有创建数据库实例。因此在进行下面操作前需要首先创建同名的空闲实例
oradim -new -sid orcldg1
之后即可使用:
cmd> set oracle_sid=orcldg1
SQL>sqlplus / as sysdba来连接到这个空闲实例。
在备机上注册oracle实例到服务中,命令如下:
c:\oradim -new -sid 实例名
示例如下:
c:\oradim -new -sid orcldg2

用修改后的pfile 创建一个spfile ,用于启动数据库(备库端做)

SQL> create pfile from spfile;

将数据库启动到nomount 状态:

SQL> startup nomount;

利用RMAN 在备库上恢复主库(主库端做)

rman target / auxiliary sys/oracle@orcldg2

duplicate target database for standby from active database nofilenamecheck;

尝试开启备库

SQL> select status from v$instance;
STATUS
------------------------
MOUNTED
SQL>
#(RMAN 恢复完直接就是mount 状态)

备库启动日志应用

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

停止日志应用:

alter database recover managed standby database cancel;
SQL> set pagesize 100
SQL> select sequence#,applied from v$archived_log order by 1;
 SEQUENCE# APPLIED
---------- ------------------
59     YES
60     YES
61     YES
SQL>

DataGuard 保护模式切换

 查看当前的保护模式:
SQL> select database_role, protection_mode, protection_level from v$database;
DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL
---------------- -------------------- --------------------
PHYSICAL STANDBY MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE
当前的模式是最大性能模式,最大性能模式是默认的模式。
下面修改成最大可用模式
最大可用模式的日志参数为:lgwr sync affirm
如果没有修改,首先要修改参数文件为lgwr sync affirm后才能执行如下命令
alter database set standby database to maximize availability;
  • 38
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值