Oracle11g DG实战配置(Windows版)(五)主备库DG配置

5.1 DG主库配置(主库操作)

5.1.1 配置Oracle Data Guard

# 登录数据库

sqlplus / as sysdba

# 查看数据库归档模式,确认Archivelog已启用

select name,log_mode from v$database;

# 查看数据库是否已启用Oracle Data Guard

select * from v$option where parameter = 'Oracle Data Guard';

# 检查数据库是否启用强制日志(为了保障日志安全和数据完整性,强烈建议启用,默认False)

select name,force_logging from v$database;

# 启用强制日志

alter database force logging;

# 再次确认数据库是否启用强制日志

select name,force_logging from v$database;

 # 查看Redo Log文件大小

select group#,bytes/1024/1024 as Mb from v$log;

# 创建与Redo Log文件大小完全相同的Standby Redo Log文件(注意:大小必须一致)

alter database add standby logfile group 11 'D:/Oracle/oradata/PMS/standby11.log' size 50M;
alter database add standby logfile group 12 'D:/Oracle/oradata/PMS/standby12.log' size 50M;
alter database add standby logfile group 13 'D:/Oracle/oradata/PMS/standby13.log' size 50M;
alter database add standby logfile group 14 'D:/Oracle/oradata/PMS/standby14.log' size 50M;

注:Standby Redo Logs(SRL)即备份的重做日志,创建SRL后,主库上写入每个Online Redo Log时都会被传输到备库,同时也会写入到SRL中。


SRL是额外的Redo Log,但SRL的创建有以下几个原则:
1)Standby Redo Log File要与Online Redo Log File一样大
查询方法:SELECT GROUP#, BYTES/1024/1024 M FROM V$LOG;


2)Standby Redo Log Group的数量至少要比Online Redo Log Group的数量多1组
查询方法:SELECT GROUP#, BYTES/1024/1024 M FROM V$LOG;


3)当主库添加了Redo Log Group,备库也必须添加相应的Redo Log Group,否则会导致备库在主库switch log后不同步。
SRL创建方法:alter database add standby logfile group 14 'D:/Oracle/oradata/PMS/standby14.log' size 50M;(创建一个节点)
SRL删除方法:alter database drop standby logfile group 14;
SRL查看方法:select group#,bytes/1024/1024 as Mb from v$standby_log;


4)归档位置原则
    a)如果配置了STANDBY_ARCHIVE_DEST,则归档将使用该目录位置
    b)如果LOG_ARCHIVE_DEST_n参数明确定义了VALID_FOR=(STANDBY_LOGFILE,*)选项,则归档将使用LOG_ARCHIVE_DEST_n目录位置
    c)如果STANDBY_ARCHIVE_DEST和LOG_ARCHIVE_DEST_n都没有配置,则使用STANDBY_ARCHIVE_DEST的缺省位置%ORACLE_HOME%\database\archive(Linux位于%ORACLE_HOME%\dbs\arc)
    d)如果需要将Standby Redo Log归档到FRA(Fast Recovery Area)

        Ⅰ)设置LOG_ARCHIVE_DEST_n的LOCATION参数为USE_DB_RECOVERY_FILE_DEST
        Ⅱ)设置LOG_ARCHIVE_DEST_n的VALID_FOR参数为“允许归档”。即VALID_FOR=(ALL_LOGFILES,ALL_ROLES)

    e)如果需要将Standby Redo Log归档到本地指定位置:
        Ⅰ)设置LOG_ARCHIVE_DEST_n的LOCATION参数为USE_DB_RECOVERY_FILE_DEST。
                即LOG_ARCHIVE_DEST_1='LOCATION=D:/Oracle/oradata/PMS VALID_FOR=(STANDBY_LOGFILE,STANDBY_ROLE)'
        Ⅱ)设置LOG_ARCHIVE_DEST_n的VALID_FOR参数为“允许归档”。
                即VALID_FOR=(STANDBY_LOGFILE,STANDBY_ROLE)

 5.1.2 确认主库密码文件

一般情况下密码文件在:%ORACLE_HOME%/database/PWDPMS.ora,linux系统密码文件在:%ORACLE_HOME%/dbs/orapwpms.ora
如果密码文件丢失,可通过orapwd命令恢复出来

orapwd file=%ORACLE_HOME%/database/PWDPMS.ora password=000000;

将密码文件拷贝到备库服务器

拷贝过程略(Ctrl + C、Ctrl + V)

5.1.3 修改主库监听

5.1.3.1 修改监听文件

修改D:\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora文件

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = PMS)       ### 增加该行,增加数据库全局名称
      (SID_NAME = PMS)            ### 增加该行,修改数据库实例SID
#      (SID_NAME = CLRExtProc)    ### 取消该行
      (ORACLE_HOME = D:\Oracle\product\11.2.0\dbhome_1)
#      (PROGRAM = extproc)        ### 取消该行
#      (ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")  ### 取消该行
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.245)(PORT = 1521))    ### 修改HOST为主库IP地址
    )
  )

ADR_BASE_LISTENER = D:\Oracle

5.1.3.2 修改TNS文件

修改D:\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora文件

# tnsnames.ora Network Configuration File: D:\Oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

# 修改主库连接名称
PMS_PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.245)(PORT = 1521))
    (CONNECT_DATA =
#      (SERVER = DEDICATED)        ### 取消该行
      (SERVICE_NAME = PMS)
    )
  )

# 增加备库连接信息
PMS_STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.55)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = PMS)
    )
  )

ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

将监听文件listener.ora和tnsnames.ora两个文件拷贝到备库服务器

拷贝过程略(Ctrl + C、Ctrl + V)


5.1.4 测试主库监听

lsnrctl stop            # 关闭监听
lsnrctl start           # 启动监听(重启监听)
lsnrctl status          # 查看监听状态
tnsping pms             # 测试PMS监听,通过
tnsping pms_standby     # 测试PMS_STANDBY监听,测试不通过(备库还未配置)

5.1.5 修改主库参数文件(spfile)

我们可以像配置数据库归档一样,用alter system set命令的方式修改直接参数文件(spfile),但是此处修改内容较多,为了方便,建议先创建并修改pfile,然后通过pfile再重建spfile。

sqlplus / as sysdba
create pfile='d:/pfile.ora' from spfile;

 修改pfile.ora文件

pms.__db_cache_size=35567697920
pms.__java_pool_size=805306368
pms.__large_pool_size=939524096
pms.__oracle_base='D:\Oracle'#ORACLE_BASE set from environment
pms.__pga_aggregate_target=13824425984
pms.__sga_target=41339060224
pms.__shared_io_pool_size=0
pms.__shared_pool_size=3623878656
pms.__streams_pool_size=134217728
*.audit_file_dest='D:\Oracle\admin\PMS\adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='D:\Oracle\oradata\PMS\control01.ctl','D:\Oracle\fast_recovery_area\PMS\control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='PMS'                    # 注意,主备必须一致
*.db_unique_name='PMS_PRIMARY'     # 注意,主备全局名称不能一样
*.fal_server='PMS_PRIMARY'         # 设定主库名称
*.fal_client='PMS_STANDBY'         # 设定备库名称
*.db_file_name_convert='D:\Oracle\oraback','D:\Oracle\oraback'    # 设置数据库备份文件恢复路径(主备库路径不一致时可通过此处进行转换)
*.log_file_name_convert='D:\Oracle\oralog','D:\Oracle\oralog'     # 设置日志备份文件恢复路径(主备库路径不一致时可通过此处进行转换)
*.standby_file_management='AUTO'        # 启动热备功能
*.db_recovery_file_dest_size=4385144832
*.db_recovery_file_dest=''
*.deferred_segment_creation=FALSE
*.diagnostic_dest='D:\Oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=PMSXDB)'
*.log_archive_config='dg_config=(PMS_PRIMARY,PMS_STANDBY)'        # 设置日志配置
*.log_archive_dest_1='location=D:/Oracle/oralog valid_for=(all_logfiles,all_roles) db_unique_name=PMS_PRIMARY'            # 设置日志推送通道1,主库通道设定
*.log_archive_dest_2='service=PMS_STANDBY lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=PMS_STANDBY'         # 设置日志推送通道2,备库通道设定
*.log_archive_dest_state_1='enable'    # 启用日志推送通道1
*.log_archive_dest_state_2='enable'    # 启用日志推送通道2
*.log_archive_dest=''            # 关闭默认归档通道
*.log_archive_format='%t_%s_%r.arch'   # 格式化归档日志文件格式
*.open_cursors=300
*.pga_aggregate_target=13742637056
*.processes=2000            # 设置数据库最大连接数
*.remote_login_passwordfile='EXCLUSIVE'
*.sec_case_sensitive_logon=FALSE
*.sga_target=41227911168
*.undo_tablespace='UNDOTBS1'

注意:以上配置中参数名称、单引号内、等号两侧均不能有空格(强烈不建议直接拷贝我的配置,请自行使用自己的配置进行修改,配置文件中的注释请自行删除)
修改完成以上配置后,关闭数据库,将本次配置通过重建spfile方式导入到数据库中

shutdown immediate
create spfile from pfile='d:/pfile.ora';

数据库spfile信息已更新(先不要正常启动数据库)。
现在顺便生成供备库使用的控制文件:

startup mount;
alter database create standby controlfile as 'D:/standby/CONTROL01.CTL';

 注意:
1)控制文件一般需要多分,我们将生成的CONTROL01.CTL手动复制出CONTROL02.CTL;或者用上面命令生成CONTROL02.CTL文件。
2)在控制文件生成之后到备库应用控制文件之前,要保证主库数据库在此期间不发生结构性变化(如增加表空间等操作),否则同步会出问题。

将控制文件复制到备库服务器进行应用。拷贝过程略(Ctrl + C、Ctrl + V)

5.1.6 主数据库验证

启动数据库,测试数据库是否正常

startup

查看归档信息

archive log list

查看Redo Log信息

select group#,bytes/1024/1024 as Mb from v$log;

查看Standby Redo Log信息

select group#,bytes/1024/1024 as Mb from v$standby_log;

主库配置基本完成,可以将该pfile文件拷贝到备库,开始配置备库服务器。

拷贝过程略(Ctrl + C、Ctrl + V)

5.2 DG备库配置(备库操作)

5.2.1 检查备库载入文件

1)从主库服务器拷贝密码文件PWDPMS.ora至备库服务器D:\Oracle\product\11.2.0\dbhome_1/database/PWDPMS.ora路径下,确保主备两个库的密码相同。
2)从主库服务器拷贝listener.ora和tnsnames.ora至备库服务器D:\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN路径下,并修改相关配置。
    修改listener.ora文件中HOST地址为备库服务器地址。
3)从主库服务器生成的“适用于备库使用的控制文件”CONTROL01.CTL和CONTROL02.CTL拷贝至备库服务器(我的存放路径:D:/standby/)。
    注意:该控制文件必须生成,不能直接拷贝主库控制文件
4)从主库服务器拷贝pfile文件至备库服务器,并对文件内容进行修改

pms.__db_cache_size=35567697920
pms.__java_pool_size=805306368
pms.__large_pool_size=939524096
pms.__oracle_base='D:\Oracle'#ORACLE_BASE set from environment
pms.__pga_aggregate_target=13824425984
pms.__sga_target=41339060224
pms.__shared_io_pool_size=0
pms.__shared_pool_size=3623878656
pms.__streams_pool_size=134217728
*.audit_file_dest='D:\Oracle\admin\PMS\adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='D:/standby/CONTROL01.CTL','D:/standby/CONTROL02.CTL'     # 指定初始化数据库的控制文件
*.db_block_size=8192
*.db_domain=''
*.db_name='PMS'
*.db_unique_name='PMS_STANDBY'                # 此处全局名称配置已修改
*.fal_server='PMS_PRIMARY'
*.fal_client='PMS_STANDBY'
*.db_file_name_convert='D:\Oracle\oraback','D:\Oracle\oraback'
*.log_file_name_convert='D:\Oracle\oralog','D:\Oracle\oralog'
*.standby_file_management='AUTO'
*.db_recovery_file_dest_size=4385144832
*.db_recovery_file_dest=''
*.deferred_segment_creation=FALSE
*.diagnostic_dest='D:\Oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=PMSXDB)'
*.log_archive_config='dg_config=(PMS_PRIMARY,PMS_STANDBY)'
*.log_archive_dest_1='location=D:/Oracle/oralog valid_for=(all_logfiles,all_roles) db_unique_name=PMS_STANDBY'                  # 设置日志推送通道1,备库通道设定
*.log_archive_dest_2='service=PMS_PRIMARY lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=PMS_PRIMARY'                # 设置日志推送通道2,主库通道设定
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.log_archive_dest=''
*.log_archive_format='%t_%s_%r.arch'
*.open_cursors=300
*.pga_aggregate_target=13742637056
*.processes=2000
*.remote_login_passwordfile='EXCLUSIVE'
*.sec_case_sensitive_logon=FALSE
*.sga_target=41227911168
*.undo_tablespace='UNDOTBS1'

注:一般强烈建议主备服务器配置相同,如果不同,需要手动修改sga_target、__pga_aggregate_target、__db_cache_size等参数大小,如果该参数超过服务器承载,会导致数据库无法启动,甚至服务器自身崩溃(本人血泪史,就不讲了)。

5.2.2 创建备库实例 

5)给备库创建PMS实例服务
使用管理员权限的命令窗执行命令:

oradim -NEW -SID PMS -STARTMODE manual

其中PMS为您希望指定的实例名(与主库保持一致)。
服务创建完成后会自动启动,可在系统services.msc中查看。
 

6)重启监听并测试

lsnrctl stop
lsnrctl start
lsnrctl status
tnsping pms_primary(测试通过)
tnsping pms_standby(测试通过)

注:若测试不通过,请关闭主备服务器防火墙进行测试。


7)通过pfile文件创建spfile参数文件

a)建议手动重启一下数据库服务(先启动监听,后启动数据库)
b)首次使用sqlplus / as sysdba时提示无法连接(ORA-12560),这是因为备库是我们手动创建,因此操作系统(windows)未记录我们创建的PMS实例,因此需要先设置环境变量
        在命令提示框中先执行:set oracle_sid=PMS

        再尝试登陆即可成功

c)通过pfile文件创建spfile参数文件

create spfile from pfile='D:/pfile.ora';

5.3 主备库联合配置

5.3.1 验证监听配置

重启备库监听(先启)(备库操作)

lsnrctl stop
lsnrctl start
sqlplus / as sysdba
shutdown immediate
startup nomount        # 此时备库先不挂载,接下来要恢复数据文件,数据库必须处于不挂载状态

重启主库监听(后启)(主库操作)

lsnrctl stop
lsnrctl start
shutdown immediate
startup

5.3.2 恢复主库数据文件

5.3.2.1 方式一:通过RMAN复制数据文件

以主库辅助备库的方式,在备库连接RMAN(备库操作)

rman target sys/000000@pms_primary auxiliary sys/000000@pms_standby

通过命令复制主库数据文件到备库(该过程会影响主库资源,主库可能会在复制期间卡顿,若在线上操作,请注意)(备库操作)

duplicate target database for standby from active database nofilenamecheck;

执行完成后,备库的数据文件已复制过来了。

5.3.2.2 方式二:手动拷贝方式复制数据文件

还有另一种方法:
直接将主库oracle目录下的admin、cfgtollogs、diag、flash_recover_area、oradata目录拷贝到备库相同路径,备库已有的文件和文件夹直接覆盖即可。

不过在条件允许的情况下,还是建议第一种方案,通过命令由oracle自行执行复制及配置。

5.3.3 启动日志同步(备库操作)

启动日志传送服务

alter database recover managed standby database disconnect from session;
recover managed standby database cancel;

完成介质恢复后,重启数据库,以只读备库挂载模式启动

shutdown immediate;
startup nomount;
database mount standby database;
database open read only;

启动备库日志实时应用

alter database recover managed standby database using current logfile disconnect from session;

注:若数据文件未创建就启用备库日志实时应用,备库会同步,但数据库无法打开,将提示““ORA-01219:数据库未打开:仅允许在固定表/视图中查询”的警告窗口!”
此时可以使用命令停止同步
alter system set standby_file_management=manual;
创建对应文件后再开启自动同步(详见上面通过rman恢复数据文件或拷贝文件恢复数据文件)

5.4 DG同步验证

查看同步状态
连接到主库,查看归档情况(主库操作)

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

连接到备库,查看归档情况(备库操作)

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

在主库切换归档日志(强制归档)(主库操作)

ALTER SYSTEM SWITCH LOGFILE;
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

在备库查看最新归档是否已经同步过来(备库操作)

SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

在主库建表、插入数据,查看备库是否一致。

至此,主备同步(DG)已设置完成。

全篇回顾:万字长文,希望对您有所帮助。

Oracle11g DG实战配置(Windows版)(一)基础说明

Oracle11g DG实战配置(Windows版)(二)主库安装与基础配置

Oracle11g DG实战配置(Windows版)(三)主库数据库归档配置

Oracle11g DG实战配置(Windows版)(四)备库数据库安装

Oracle11g DG实战配置(Windows版)(五)主备库DG配置
 

猜你喜欢

转载自blog.csdn.net/Asgard_Hu/article/details/126970995