• Oracle 11g DataGuard 搭建笔记(Windows Server 2016)


    0.目录

    目录

    0.目录

    1.需求

    2.开发环境

    3.DataGuard主从库参数环境规划

    4.网络环境

    5.主库-DataGuard配置

    5.1查询及启用强制记录日志

    5.3查询及启用归档

    5.4主库参数配置

    5.4.1查看db_unique_name及修改

    5.4.2修改参数log_archive_config

    5.4.3修改参数log_archive_dest_1

    5.4.4修改参数log_archive_dest_2

    5.4.5查看及修改参数log_archive_dest_state_1和log_archive_dest_state_2

    5.4.6查看或修改数据文件位置

    5.4.7主库操作-修改db_file_name_convert

    5.4.8主库操作-修改log_file_name_convert

    5.4.9查看及修改参数standby_file_management

    5.4.10查看及修改参数fal_client

    5.4.11查看及修改参数fal_server

    5.5主库监听修改

    5.6主库查看监听

    5.7主库-查看及修改tnsnames.ora

    6.从库(备库)-DataGuard配置

    6.1主库密码文件拷贝到从库相同位置并改名

    6.2初始化参数文件

    6.2.1在主库中生成初始化参数文件INITorcl.ora

    6.2.2拷贝主库pfile参数文件(INITorcl.ORA)到从库并重命名

    6.2.3上述参数中部分路径手动创建

    6.3从库-配置静态监听

    6.4配置db_home_1中的tnsnames.ora文件

    6.5创建windows-service

    6.6从库尝试解决sqlplus登录ORA-12560: TNS: 协议适配器错误

    6.7从库使用pfile文件创建spfile文件

    6.8从库测试sqlplus通过tnsname连接主库与从库

    6.9主库-测试验证tnsping和sqlplus通过主备tnsname连接

    6.10备库操作-修改db_file_name_convert和log_file_name_convert

    7.备库-通过rman将主库数据文件复制到从库

    8.添加主库和备库的standby日志组

    8.1主库添加standby日志组

    8.2从库添加standby日志组

    9备库-启用日志同步

    10.DataGuard状态查看

    10.1主库状态查看

    10.2从库状态查看

    11测试Dataguard主库写,然后从库读


    1.需求

    1.Windows平台搭建Oracle DataGuard,实现容灾

    2.探索Oracle11g 基础上Oracle Dataguard增强的从库查询功能

    2.开发环境

    虚拟机1-作为主机

    虚拟机2-作为从机

    Os

    winserver2016 x64

    winserver2016 x64

    db

    oracle11g

    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

    已创建监听

    已创建数据库实例

    oracle11g

    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

    已创建监听

    无数据库实例(注意,不要创建实例)

    原数据库安装时设置所有账户默认密码为orcl

    用户名sys密码orcl

    如果从机已创建实例,可通过以下步骤删除实例。

    1.关闭所有ORACLE服务;

    2.打开OraDb11g_home1下的Database Configuration Asistant

    3.选择删除数据库

    4.等待大约8分钟。

    5.刷新服务列表,原Oracle实例(带orcl字样)的几个服务已被自动删除

    6.为保险起见,重启一次服务器。

    3.DataGuard主从库参数环境规划

    主库

    备库

    操作系统

    OS 名称:          Microsoft Windows Server 2016 Datacenter

    OS 版本:          10.0.14393 暂缺 Build 14393

    OS 名称:          Microsoft Windows Server 2016 Datacenter

    OS 版本:          10.0.14393 暂缺 Build 14393

    服务器名称

    WIN16-ORADG-PRI

    WIN16-ORADG-STD

    IP地址规划

    192.168.7.181

    192.168.7.182

    数据库版本

    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

    db_name

    orcl

    orcl

    db_unique_name

    orcl

    orclstandby

    instance_name

    orcl

    orclstandby

    service_name

    orcl

    orcl

    数据库安装

    安装数据库软件+创建监听+安装数据库

    安装数据库软件+创建监听

    4.网络环境

    主库从库均设置防火墙允许ping和开放1521端口。

    主库-配置hosts文件,映射主机名与ip,以便后期可直接使用计算机名进行配置,可读性强。

    进入C:\Windows\System32\drivers\etc,记事本打开hosts文件

    增加

    192.168.7.181 WIN16-ORADG-PRI

    192.168.7.182 WIN16-ORADG-STD

    修改后hosts文件内容如下

    1. # Copyright (c) 1993-2009 Microsoft Corp.
    2. #
    3. # This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
    4. #
    5. # This file contains the mappings of IP addresses to host names. Each
    6. # entry should be kept on an individual line. The IP address should
    7. # be placed in the first column followed by the corresponding host name.
    8. # The IP address and the host name should be separated by at least one
    9. # space.
    10. #
    11. # Additionally, comments (such as these) may be inserted on individual
    12. # lines or following the machine name denoted by a '#' symbol.
    13. #
    14. # For example:
    15. #
    16. # 102.54.94.97 rhino.acme.com # source server
    17. # 38.25.63.10 x.acme.com # x client host
    18. # localhost name resolution is handled within DNS itself.
    19. 127.0.0.1 localhost
    20. ::1 localhost
    21. 192.168.7.181 WIN16-ORADG-PRI
    22. 192.168.7.182 WIN16-ORADG-STD

    配置hosts文件后,cmd中使用如下命令可刷新host,无需重启服务器。

    ipconfig /flushdns

    主库ping host记录

    1. Microsoft Windows [版本 10.0.14393]
    2. (c) 2016 Microsoft Corporation。保留所有权利。
    3. C:\Users\Administrator>hostname
    4. WIN16-ORADG-PRI
    5. C:\Users\Administrator>ping WIN16-ORADG-PRI -4
    6. 正在 Ping WIN16-ORADG-PRI [192.168.7.181] 具有 32 字节的数据:
    7. 来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
    8. 来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
    9. 来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
    10. 来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
    11. 192.168.7.181 的 Ping 统计信息:
    12. 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    13. 往返行程的估计时间(以毫秒为单位):
    14. 最短 = 0ms,最长 = 0ms,平均 = 0ms
    15. C:\Users\Administrator>ping WIN16-ORADG-STD -4
    16. 正在 Ping WIN16-ORADG-STD [192.168.7.182] 具有 32 字节的数据:
    17. 来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
    18. 来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
    19. 来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
    20. 来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
    21. 192.168.7.182 的 Ping 统计信息:
    22. 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    23. 往返行程的估计时间(以毫秒为单位):
    24. 最短 = 0ms,最长 = 0ms,平均 = 0ms
    25. C:\Users\Administrator>

    从库ping host记录

    1. Microsoft Windows [版本 10.0.14393]
    2. (c) 2016 Microsoft Corporation。保留所有权利。
    3. C:\Users\Administrator>hostname
    4. WIN16-ORADG-STD
    5. C:\Users\Administrator>ping WIN16-ORADG-STD -4
    6. 正在 Ping WIN16-ORADG-STD [192.168.7.182] 具有 32 字节的数据:
    7. 来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
    8. 来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
    9. 来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
    10. 来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
    11. 192.168.7.182 的 Ping 统计信息:
    12. 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    13. 往返行程的估计时间(以毫秒为单位):
    14. 最短 = 0ms,最长 = 0ms,平均 = 0ms
    15. C:\Users\Administrator>ping WIN16-ORADG-PRI -4
    16. Ping 请求找不到主机 WIN16-ORADG-PRI。请检查该名称,然后重试。
    17. C:\Users\Administrator>ping WIN16-ORADG-PRI -4
    18. Ping 请求找不到主机 WIN16-ORADG-PRI。请检查该名称,然后重试。
    19. C:\Users\Administrator>ipconfig /flushdns
    20. Windows IP 配置
    21. 已成功刷新 DNS 解析缓存。
    22. C:\Users\Administrator>ping WIN16-ORADG-PRI -4
    23. 正在 Ping WIN16-ORADG-PRI [192.168.7.181] 具有 32 字节的数据:
    24. 来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
    25. 来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
    26. 来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
    27. 来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
    28. 192.168.7.181 的 Ping 统计信息:
    29. 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    30. 往返行程的估计时间(以毫秒为单位):
    31. 最短 = 0ms,最长 = 0ms,平均 = 0ms

    5.主库-DataGuard配置

    5.1查询及启用强制记录日志

    查询是否启用强制记录日志

    select force_logging from v$database;

    如果未启用,则使用下面语句来开启强制记录日志

    alter database force logging;

    cmd记录

    1. SQL*Plus: Release 11.2.0.1.0 Production on 星期四 11月 17 09:29:17 2022
    2. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    3. 请输入用户名: sys as sysdba
    4. 输入口令:
    5. 连接到:
    6. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    7. With the Partitioning, OLAP, Data Mining and Real Application Testing options
    8. SQL> select force_logging from v$database;
    9. FOR
    10. ---
    11. NO
    12. SQL> alter database force logging;
    13. 数据库已更改。
    14. SQL> select force_logging from v$database;
    15. FOR
    16. ---
    17. YES
    18. SQL>

    5.3查询及启用归档

    查询命令

    select log_mode from v$database;

    cmd记录

    1. SQL> archive log list;
    2. 数据库日志模式 非存档模式
    3. 自动存档 禁用
    4. 存档终点 USE_DB_RECOVERY_FILE_DEST
    5. 最早的联机日志序列 28
    6. 当前日志序列 30
    7. SQL> select log_mode from v$database;
    8. LOG_MODE
    9. ------------
    10. NOARCHIVELOG
    11. SQL>

    上述显示未启用归档模式。

    如果未启用归档,可以按照如下步骤开启归档

    ----Oracle 11g数据库归档模式开启

    --STEP1:以sysdba角色登陆数据库

    sqlplus / as sysdba

    --STEP2:干净的关闭数据库

    shutdown immediate

    --STEP3:将数据库启动到mount状态

    startup mount

    --STEP4:开启归档

    alter database archivelog;

    --STEP5:打开数据库

    alter database open

    Cmd记录如下

    1. SQL> shutdown immediate;
    2. 数据库已经关闭。
    3. 已经卸载数据库。
    4. ORACLE 例程已经关闭。
    5. SQL> startup mount;
    6. ORACLE 例程已经启动。
    7. Total System Global Area 1286066176 bytes
    8. Fixed Size 2175408 bytes
    9. Variable Size 754978384 bytes
    10. Database Buffers 520093696 bytes
    11. Redo Buffers 8818688 bytes
    12. 数据库装载完毕。
    13. SQL> alter database archivelog;
    14. 数据库已更改。
    15. SQL> alter database open;
    16. 数据库已更改。
    17. SQL> archive log list;
    18. 数据库日志模式 存档模式
    19. 自动存档 启用
    20. 存档终点 USE_DB_RECOVERY_FILE_DEST
    21. 最早的联机日志序列 28
    22. 下一个存档日志序列 30
    23. 当前日志序列 30
    24. SQL> select log_mode from v$database;
    25. LOG_MODE
    26. ------------
    27. ARCHIVELOG
    28. SQL>

    5.4主库参数配置

    5.4.1查看db_unique_name及修改

    查看命令【show parameter db_unique_name;】

    如需修改,则修改命令【alter system set db_unique_name = 'orcl' scope=spfile;】

    db_unique_name后面填主库的待设定的唯一名称,用于区别从库的db_unique_name;

    5.4.2修改参数log_archive_config

    1. SQL> show parameter db_unique_name;
    2. NAME TYPE VALUE
    3. ------------------------------------ ----------- ------------------------------
    4. db_unique_name string orcl
    5. SQL> show parameter log_archive_config;
    6. NAME TYPE VALUE
    7. ------------------------------------ ----------- ------------------------------
    8. log_archive_config string
    9. SQL> show parameter db_unique_name;
    10. NAME TYPE VALUE
    11. ------------------------------------ ----------- ------------------------------
    12. db_unique_name string orcl
    13. SQL> show parameter log_archive_config;
    14. NAME TYPE VALUE
    15. ------------------------------------ ----------- ------------------------------
    16. log_archive_config string
    17. SQL> alter system set log_archive_config='DG_CONFIG=(orcl,orclstandby)' scope=spfile;
    18. 系统已更改。
    19. SQL> show parameter log_archive_config;
    20. NAME TYPE VALUE
    21. ------------------------------------ ----------- ------------------------------
    22. log_archive_config string
    23. SQL>

    参数说明

    alter system set log_archive_config='DG_CONFIG=(orcl,orclstandby)' scope=spfile;

    上面命令中orcl是主库的db_unique_name

    orclstandby是从库的db_unique_name

    问题:为什么修改log_archive_config后当时再查询仍为空?

    次日重启之后,再查询参数,即正常了。

    网搜原因:

    1. scope=spfile: 对参数的修改记录在服务器初始化参数文件中,修改后的参数在下次启动DB时生效。适用于动态和静态初始化参数。

    2. scope=memory: 对参数的修改记录在內存中,对于动态初始化参数的修改立即生效。在重启DB后会丟失,会复原为修改前的参数值。

    3. scope=both:   对参数的修改会同时记录在服务器参数文件和內存中,对于动态参数立即生效,对静态参数不能用这个选项

    重启数据库后查询结果如下

    1. SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 18 08:58:49 2022
    2. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    3. 请输入用户名: sys as sysdba
    4. 输入口令:
    5. 连接到:
    6. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    7. With the Partitioning, OLAP, Data Mining and Real Application Testing options
    8. SQL> show parameter log_archive_config;
    9. NAME TYPE VALUE
    10. ------------------------------------ ----------- ------------------------------
    11. log_archive_config string DG_CONFIG=(orcl,orclstandby)
    12. SQL>

    5.4.3修改参数log_archive_dest_1

    1. SQL> show parameter log_archive_dest_1;
    2. NAME TYPE VALUE
    3. ------------------------------------ ----------- ------------------------------
    4. log_archive_dest_1 string
    5. log_archive_dest_10 string
    6. log_archive_dest_11 string
    7. log_archive_dest_12 string
    8. log_archive_dest_13 string
    9. log_archive_dest_14 string
    10. log_archive_dest_15 string
    11. log_archive_dest_16 string
    12. log_archive_dest_17 string
    13. log_archive_dest_18 string
    14. log_archive_dest_19 string
    15. SQL> alter system set log_archive_dest_1='LOCATION=D:\oracle\product\11.2.0\dbhome_1\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl' scope=both;
    16. 系统已更改。
    17. SQL> show parameter log_archive_dest_1;
    18. NAME TYPE VALUE
    19. ------------------------------------ ----------- ------------------------------
    20. log_archive_dest_1 string LOCATION=D:\oracle\product\11.
    21. 2.0\dbhome_1\archivelog VALID_
    22. FOR=(ALL_LOGFILES,ALL_ROLES) D
    23. B_UNIQUE_NAME=orcl
    24. log_archive_dest_10 string
    25. log_archive_dest_11 string
    26. log_archive_dest_12 string
    27. log_archive_dest_13 string
    28. log_archive_dest_14 string
    29. log_archive_dest_15 string
    30. log_archive_dest_16 string
    31. NAME TYPE VALUE
    32. ------------------------------------ ----------- ------------------------------
    33. log_archive_dest_17 string
    34. log_archive_dest_18 string
    35. log_archive_dest_19 string
    36. SQL>

    参数说明

    alter system set log_archive_dest_1='LOCATION=D:\oracle\product\11.2.0\dbhome_1\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl' scope=both;

    上述命令中

    LOCATION中[D:\oracle\product\11.2.0\dbhome_1\]根目录+ archivelog

    DB_UNIQUE_NAME=orcl,orcl是主库的DB_UNIQUE_NAME;

    注意:这里在主库要手动新建文件夹【D:\oracle\product\11.2.0\dbhome_1\archivelog

    否则,归档日志直接会变成【ARCHIVELOGARC0000000031_1102159423.0001】自动存入【D:\oracle\product\11.2.0\dbhome_1\

    正常的归档日志应该是【ARC0000000031_1102159423.0001】自动存入D:\oracle\product\11.2.0\dbhome_1\archivelog

    5.4.4修改参数log_archive_dest_2

    1. SQL> show parameter log_archive_dest_2;
    2. NAME TYPE VALUE
    3. ------------------------------------ ----------- ------------------------------
    4. log_archive_dest_2 string
    5. log_archive_dest_20 string
    6. log_archive_dest_21 string
    7. log_archive_dest_22 string
    8. log_archive_dest_23 string
    9. log_archive_dest_24 string
    10. log_archive_dest_25 string
    11. log_archive_dest_26 string
    12. log_archive_dest_27 string
    13. log_archive_dest_28 string
    14. log_archive_dest_29 string
    15. SQL> alter system set log_archive_dest_2='SERVICE=tnsorclstandby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orclstandby' scope=spfile;
    16. 系统已更改。
    17. SQL> show parameter log_archive_dest_2;
    18. NAME TYPE VALUE
    19. ------------------------------------ ----------- ------------------------------
    20. log_archive_dest_2 string
    21. log_archive_dest_20 string
    22. log_archive_dest_21 string
    23. log_archive_dest_22 string
    24. log_archive_dest_23 string
    25. log_archive_dest_24 string
    26. log_archive_dest_25 string
    27. log_archive_dest_26 string
    28. log_archive_dest_27 string
    29. log_archive_dest_28 string
    30. log_archive_dest_29 string
    31. SQL>

    参数说明:

    alter system set log_archive_dest_2='SERVICE=tnsorclstandby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orclstandby' scope=spfile;

    参数中tnsorclstandby是主库(注意是主库)中tnsnames.ora文件中配置的用于访问从库的tnsname名称。(前述暂未向主库tnsnames.ora中添加tnsorclstandby,后续会添加,这里先配置)

    上述alert命令执行后再查询,未显示到设置结果是因为未重启数据库。

    5.4.5查看及修改参数log_archive_dest_state_1和log_archive_dest_state_2

    查看

    1. SQL> show parameter log_archive_dest_state_1;
    2. NAME TYPE VALUE
    3. ------------------------------------ ----------- ------------------------------
    4. log_archive_dest_state_1 string enable
    5. log_archive_dest_state_10 string enable
    6. log_archive_dest_state_11 string enable
    7. log_archive_dest_state_12 string enable
    8. log_archive_dest_state_13 string enable
    9. log_archive_dest_state_14 string enable
    10. log_archive_dest_state_15 string enable
    11. log_archive_dest_state_16 string enable
    12. log_archive_dest_state_17 string enable
    13. log_archive_dest_state_18 string enable
    14. log_archive_dest_state_19 string enable
    15. SQL> show parameter log_archive_dest_state_2;
    16. NAME TYPE VALUE
    17. ------------------------------------ ----------- ------------------------------
    18. log_archive_dest_state_2 string enable
    19. log_archive_dest_state_20 string enable
    20. log_archive_dest_state_21 string enable
    21. log_archive_dest_state_22 string enable
    22. log_archive_dest_state_23 string enable
    23. log_archive_dest_state_24 string enable
    24. log_archive_dest_state_25 string enable
    25. log_archive_dest_state_26 string enable
    26. log_archive_dest_state_27 string enable
    27. log_archive_dest_state_28 string enable
    28. log_archive_dest_state_29 string enable
    29. SQL>

    如需修改,使用如下命令

    alter system set log_archive_dest_state_1 = ENABLE;
    alter system set log_archive_dest_state_2 = ENABLE;

    5.4.6查看或修改数据文件位置

    目标是保证主库从库数据文件位置一致,不一致则用命令修改。

    1. SQL> select name from v$datafile;
    2. NAME
    3. --------------------------------------------------------------------------------
    4. D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
    5. D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
    6. D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
    7. D:\ORACLE\ORADATA\ORCL\USERS01.DBF
    8. D:\ORACLE\ORADATA\ORCL\VAMS_DATA_0.DBF
    9. SQL>

    5.4.7主库操作-修改db_file_name_convert

    db_file_name_convert说明

    db_file_name_convert 主数据库和备用数据库的数据文件转换目录对映(如果两数据库的目录结构不一样),如果有多个对映,逐一指明对映关系。

    关键命令

    alter system set db_file_name_convert='D:\oracle\oradata\orclstandby\','D:\oracle\oradata\orcl\' scope=spfile;

    修改后需要重启数据库才能生效

    1. Microsoft Windows [版本 10.0.14393]
    2. (c) 2016 Microsoft Corporation。保留所有权利。
    3. D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl as sysdba
    4. SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 15:44:52 2022
    5. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    6. 连接到:
    7. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    8. With the Partitioning, OLAP, Data Mining and Real Application Testing options
    9. SQL> select name from v$datafile;
    10. NAME
    11. --------------------------------------------------------------------------------
    12. D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
    13. D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
    14. D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
    15. D:\ORACLE\ORADATA\ORCL\USERS01.DBF
    16. D:\ORACLE\ORADATA\ORCL\VAMS_DATA_0.DBF
    17. SQL> show parameter db_file_name_convert;
    18. NAME TYPE VALUE
    19. ------------------------------------ ----------- ------------------------------
    20. db_file_name_convert string
    21. SQL> alter system set db_file_name_convert='D:\oracle\oradata\orclstandby\','D:\oracle\oradata\orcl\' scope=spfile;
    22. 系统已更改。
    23. SQL> show parameter db_file_name_convert;
    24. NAME TYPE VALUE
    25. ------------------------------------ ----------- ------------------------------
    26. db_file_name_convert string
    27. SQL> shutdown immediate;
    28. 数据库已经关闭。
    29. 已经卸载数据库。
    30. ORACLE 例程已经关闭。
    31. SQL> startup;
    32. ORACLE 例程已经启动。
    33. Total System Global Area 1286066176 bytes
    34. Fixed Size 2175408 bytes
    35. Variable Size 822087248 bytes
    36. Database Buffers 452984832 bytes
    37. Redo Buffers 8818688 bytes
    38. 数据库装载完毕。
    39. 数据库已经打开。
    40. SQL> show parameter db_file_name_convert;
    41. NAME TYPE VALUE
    42. ------------------------------------ ----------- ------------------------------
    43. db_file_name_convert string D:\oracle\oradata\orclstandby\
    44. , D:\oracle\oradata\orcl\
    45. SQL>

    5.4.8主库操作-修改log_file_name_convert

    关键命令

    alter system set log_file_name_convert='D:\oracle\oradata\orclstandby\','D:\oracle\oradata\orcl\' scope=spfile;

    修改后需要重启数据库才生效

    1. SQL> show parameter log_file_name_convert;
    2. NAME TYPE VALUE
    3. ------------------------------------ ----------- ------------------------------
    4. log_file_name_convert string
    5. SQL> select member from v$logfile;
    6. MEMBER
    7. --------------------------------------------------------------------------------
    8. D:\ORACLE\ORADATA\ORCL\REDO03.LOG
    9. D:\ORACLE\ORADATA\ORCL\REDO02.LOG
    10. D:\ORACLE\ORADATA\ORCL\REDO01.LOG
    11. SQL> alter system set log_file_name_convert='D:\oracle\oradata\orclstandby\','D:\oracle\oradata\orcl\' scope=spfile;
    12. 系统已更改。
    13. SQL> select member from v$logfile;
    14. MEMBER
    15. --------------------------------------------------------------------------------
    16. D:\ORACLE\ORADATA\ORCL\REDO03.LOG
    17. D:\ORACLE\ORADATA\ORCL\REDO02.LOG
    18. D:\ORACLE\ORADATA\ORCL\REDO01.LOG
    19. SQL> show parameter log_file_name_convert;
    20. NAME TYPE VALUE
    21. ------------------------------------ ----------- ------------------------------
    22. log_file_name_convert string
    23. SQL> shutdown immediate;
    24. 数据库已经关闭。
    25. 已经卸载数据库。
    26. ORACLE 例程已经关闭。
    27. SQL> startup;
    28. ORACLE 例程已经启动。
    29. Total System Global Area 1286066176 bytes
    30. Fixed Size 2175408 bytes
    31. Variable Size 822087248 bytes
    32. Database Buffers 452984832 bytes
    33. Redo Buffers 8818688 bytes
    34. 数据库装载完毕。
    35. 数据库已经打开。
    36. SQL> show parameter log_file_name_convert;
    37. NAME TYPE VALUE
    38. ------------------------------------ ----------- ------------------------------
    39. log_file_name_convert string D:\oracle\oradata\orclstandby\
    40. , D:\oracle\oradata\orcl\
    41. SQL>

    5.4.9查看及修改参数standby_file_management

    参数含义:dg环境的standby_file_management参数,oracle解释是主库数据文件变化时,从库自动更新

    查看命令【show parameter standby_file_management;】

    修改为auto的命令【alter system set standby_file_management=auto scope=spfile;】

    1. SQL> show parameter standby_file_management;
    2. NAME TYPE VALUE
    3. ------------------------------------ ----------- ------------------------------
    4. standby_file_management string MANUAL
    5. SQL> alter system set standby_file_management=auto scope=spfile;
    6. 系统已更改。
    7. SQL>

    5.4.10查看及修改参数fal_client

    查看命令【show parameter fal_client;】

    修改命令【alter system set fal_client='tnsorcl' scope=both;】

    修改命令中tnsorcl是主库tnsnames.ora中配置的访问主库的tns连接名。

    网搜参数说明如下

    fal_server和fal_client,FAL即Fetch Archive Log,其值为Oracle Net service name,即tnsnames.ora中的服务名。

    设置这两个参数可以用来解决Archive Gaps。

    一旦产生了gap,fal_client会自动向fal_server请求传输gap的archivelog。

    设置了这2个参数,就不需要在产生gap时手动向standby注册归档日志了。

    所需要做的就是确认主库有这些归档日志,并且主库的控制文件中有这些日志的注册信息。

    fal_client设置为数据库自身的service name,fal_server设置为远端数据库的service name。

    fal_server可以设置多个值,用逗号隔开。

    primary:

    *.fal_server='dev01dg'

    *.fal_client='dev01'

    standby:

    *.fal_server='dev01'

    *.fal_client='dev01dg'

    我的cmd实践如下

    1. SQL> show parameter fal_client;
    2. NAME TYPE VALUE
    3. ------------------------------------ ----------- ------------------------------
    4. fal_client string
    5. SQL> alter system set fal_client='tnsorcl' scope=both;
    6. 系统已更改。
    7. SQL> show parameter fal_client;
    8. NAME TYPE VALUE
    9. ------------------------------------ ----------- ------------------------------
    10. fal_client string tnsorcl
    11. SQL>

    5.4.11查看及修改参数fal_server

    查看命令【show parameter fal_server;】

    修改命令【alter system set fal_server='tnsorclstandby' scope=both;】

    修改命令中'tnsorclstandby'是主库tnsnames.ora中配置的访问从库的tns连接名(后续会配置)。

    我的cmd实践记录

    1. SQL> show parameter fal_server;
    2. NAME TYPE VALUE
    3. ------------------------------------ ----------- ------------------------------
    4. fal_server string
    5. SQL> alter system set fal_server='tnsorclstandby' scope=both;
    6. 系统已更改。
    7. SQL> show parameter fal_server;
    8. NAME TYPE VALUE
    9. ------------------------------------ ----------- ------------------------------
    10. fal_server string tnsorclstandby
    11. SQL>

    5.5主库监听修改

    查看原始监听,进入D:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN,记事本打开listener.ora

    1. # listener.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
    2. # Generated by Oracle configuration tools.
    3. SID_LIST_LISTENER =
    4. (SID_LIST =
    5. (SID_DESC =
    6. (SID_NAME = CLRExtProc)
    7. (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
    8. (PROGRAM = extproc)
    9. (ENVS = "EXTPROC_DLLS=ONLY:D:\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    10. )
    11. )
    12. LISTENER =
    13. (DESCRIPTION_LIST =
    14. (DESCRIPTION =
    15. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    16. (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521))
    17. )
    18. )
    19. ADR_BASE_LISTENER = D:\oracle

    添加

        (SID_DESC =   

          (GLOBAL_DBNAME = orcl)

          (SID_NAME = orcl)

          (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)     

        )

    修改为如下

    1. # listener.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
    2. # Generated by Oracle configuration tools.
    3. SID_LIST_LISTENER =
    4. (SID_LIST =
    5. (SID_DESC =
    6. (SID_NAME = CLRExtProc)
    7. (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
    8. (PROGRAM = extproc)
    9. (ENVS = "EXTPROC_DLLS=ONLY:D:\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    10. )
    11. (SID_DESC =
    12. (GLOBAL_DBNAME = orcl)
    13. (SID_NAME = orcl)
    14. (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
    15. )
    16. )
    17. LISTENER =
    18. (DESCRIPTION_LIST =
    19. (DESCRIPTION =
    20. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    21. (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521))
    22. )
    23. )
    24. ADR_BASE_LISTENER = D:\oracle

    5.6主库查看监听

    1. Microsoft Windows [版本 10.0.14393]
    2. (c) 2016 Microsoft Corporation。保留所有权利。
    3. C:\Users\Administrator>lsnrctl status
    4. LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 18-11月-2022 08:57:36
    5. Copyright (c) 1991, 2010, Oracle. All rights reserved.
    6. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
    7. LISTENER 的 STATUS
    8. ------------------------
    9. 别名 LISTENER
    10. 版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
    11. 启动日期 18-11月-2022 08:48:37
    12. 正常运行时间 00 小时 98
    13. 跟踪级别 off
    14. 安全性 ON: Local OS Authentication
    15. SNMP OFF
    16. 监听程序参数文件 D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
    17. 监听程序日志文件 d:\oracle\diag\tnslsnr\WIN16-ORADG-PRI\listener\alert\log.xml
    18. 监听端点概要...
    19. (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
    20. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN16-ORADG-PRI)(PORT=1521)))
    21. 服务摘要..
    22. 服务 "CLRExtProc" 包含 1 个实例。
    23. 实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    24. 服务 "orcl" 包含 1 个实例。
    25. 实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
    26. 服务 "orclXDB" 包含 1 个实例。
    27. 实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
    28. 命令执行成功
    29. C:\Users\Administrator>lsnrctl status
    30. LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 18-11月-2022 17:11:27
    31. Copyright (c) 1991, 2010, Oracle. All rights reserved.
    32. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
    33. LISTENER 的 STATUS
    34. ------------------------
    35. 别名 LISTENER
    36. 版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
    37. 启动日期 18-11月-2022 08:48:37
    38. 正常运行时间 08 小时 2259
    39. 跟踪级别 off
    40. 安全性 ON: Local OS Authentication
    41. SNMP OFF
    42. 监听程序参数文件 D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
    43. 监听程序日志文件 d:\oracle\diag\tnslsnr\WIN16-ORADG-PRI\listener\alert\log.xml
    44. 监听端点概要...
    45. (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
    46. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN16-ORADG-PRI)(PORT=1521)))
    47. 服务摘要..
    48. 服务 "CLRExtProc" 包含 1 个实例。
    49. 实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    50. 服务 "orcl" 包含 1 个实例。
    51. 实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
    52. 服务 "orclXDB" 包含 1 个实例。
    53. 实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
    54. 命令执行成功
    55. C:\Users\Administrator>lsnrctl reload
    56. LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 18-11月-2022 17:12:15
    57. Copyright (c) 1991, 2010, Oracle. All rights reserved.
    58. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
    59. 命令执行成功
    60. C:\Users\Administrator>lsnrctl status
    61. LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 18-11月-2022 17:12:19
    62. Copyright (c) 1991, 2010, Oracle. All rights reserved.
    63. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
    64. LISTENER 的 STATUS
    65. ------------------------
    66. 别名 LISTENER
    67. 版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
    68. 启动日期 18-11月-2022 08:48:37
    69. 正常运行时间 08 小时 2351
    70. 跟踪级别 off
    71. 安全性 ON: Local OS Authentication
    72. SNMP OFF
    73. 监听程序参数文件 D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
    74. 监听程序日志文件 d:\oracle\diag\tnslsnr\WIN16-ORADG-PRI\listener\alert\log.xml
    75. 监听端点概要...
    76. (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
    77. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN16-ORADG-PRI)(PORT=1521)))
    78. 服务摘要..
    79. 服务 "CLRExtProc" 包含 1 个实例。
    80. 实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    81. 服务 "orcl" 包含 2 个实例。
    82. 实例 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    83. 实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
    84. 服务 "orclXDB" 包含 1 个实例。
    85. 实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
    86. 命令执行成功
    87. C:\Users\Administrator>

    5.7主库-查看及修改tnsnames.ora

    原始

    1. # tnsnames.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
    2. # Generated by Oracle configuration tools.
    3. ORACLR_CONNECTION_DATA =
    4. (DESCRIPTION =
    5. (ADDRESS_LIST =
    6. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    7. )
    8. (CONNECT_DATA =
    9. (SID = CLRExtProc)
    10. (PRESENTATION = RO)
    11. )
    12. )
    13. ORCL =
    14. (DESCRIPTION =
    15. (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521))
    16. (CONNECT_DATA =
    17. (SERVER = DEDICATED)
    18. (SERVICE_NAME = orcl)
    19. )
    20. )

    主库-修改新增tnsorcl和tnsorclstandby

    配置项tnsorcl是主库中连接自身的tnsname,host是主库计算机名或ip。

    配置项tnsorclstandby是主库中连接从库的tnsname,host是从库计算机名或ip。

    注意这两个配置项的名称与前述主库参数配置的参数名是对应的,否则前述参数修改会无法生效。

    1. # tnsnames.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
    2. # Generated by Oracle configuration tools.
    3. ORACLR_CONNECTION_DATA =
    4. (DESCRIPTION =
    5. (ADDRESS_LIST =
    6. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    7. )
    8. (CONNECT_DATA =
    9. (SID = CLRExtProc)
    10. (PRESENTATION = RO)
    11. )
    12. )
    13. ORCL =
    14. (DESCRIPTION =
    15. (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521))
    16. (CONNECT_DATA =
    17. (SERVER = DEDICATED)
    18. (SERVICE_NAME = orcl)
    19. )
    20. )
    21. tnsorcl =
    22. (DESCRIPTION =
    23. (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521))
    24. (CONNECT_DATA =
    25. (SERVICE_NAME = orcl)
    26. )
    27. )
    28. tnsorclstandby =
    29. (DESCRIPTION =
    30. (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521))
    31. (CONNECT_DATA =
    32. (SERVICE_NAME = orcl)
    33. )
    34. )

    6.从库(备库)-DataGuard配置

    6.1主库密码文件拷贝到从库相同位置并改名

    主库密码文件为PWDorcl.ora,路径【D:\oracle\product\11.2.0\dbhome_1\database】

    将主库的PWDorcl.ora手动拷贝到从库的相同目录(D:\oracle\product\11.2.0\dbhome_1\database)。

    将从库的此文件改名为PWDorclstandby.ora,名称中orclstandby是备库的db_unique_name。

    6.2初始化参数文件

    6.2.1在主库中生成初始化参数文件INITorcl.ora

    注意是主库中操作,因已有的spfile文件无法修改,所以依靠spfile生成pfile(INITorcl.ora)。

    理论:

    ORACLE中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件,可以分为两种类型。它们是在数据库实例启动时候加载的,决定了数据库的物理结构、内存、数据库的限制及系统大量的默认值、数据库的各种物理属性、指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重要文件。

    PFILE:初始化参数文件(Initialization Parameters Files),Oracle 9i之前,ORACLE一直采用PFILE方式存储初始化参数,该文件为文本文件。

    SPFILE:服务器参数文件(Server Parameter Files),从Oracle 9i开始,Oracle引入了SPFILE文件,该文件为二进制格式,不能通过手工修改。

    PFILE与SPFILE的区别: 1:PFILE是文本文件的,而SPFILE是二进制格式的。PFILE文件可以用文本编辑器打开手工配置、而SPFILE不行,只能通过SQL命令在线修改。从操作系统上可以看到这两者的区别,初始化参数文件为ASCII文本文件,SPFILE为数据文件。

    创建pfile(INITorcl.ORA)的命令【create pfile from spfile;】

    执行之后,将在【D:\oracle\product\11.2.0\dbhome_1\database】路径下生成INITorcl.ORA,此文件之前不存在。

    (主库中生成INITorcl.ORA的目的是将其拷贝到从库中进行修改)

    1. SQL> create pfile from spfile;
    2. 文件已创建。
    3. SQL>

    6.2.2拷贝主库pfile参数文件(INITorcl.ORA)到从库并重命名

    将主库[D:\oracle\product\11.2.0\dbhome_1\database]下INITorcl.ORA文件拷贝到从库相同位置,并改名为INITorclstandby.ORA

    对拷贝到从库后的INITorclstandby.ORA内容修改。

    INITorclstandby.ORA原始内容

    1. orcl.__db_cache_size=486539264
    2. orcl.__java_pool_size=16777216
    3. orcl.__large_pool_size=16777216
    4. orcl.__oracle_base='D:\oracle'#ORACLE_BASE set from environment
    5. orcl.__pga_aggregate_target=436207616
    6. orcl.__sga_target=855638016
    7. orcl.__shared_io_pool_size=0
    8. orcl.__shared_pool_size=318767104
    9. orcl.__streams_pool_size=0
    10. *.audit_file_dest='D:\oracle\admin\orcl\adump'
    11. *.audit_trail='db'
    12. *.compatible='11.2.0.0.0'
    13. *.control_files='D:\oracle\oradata\orcl\control01.ctl','D:\oracle\recovery_area\orcl\control02.ctl'
    14. *.db_block_size=8192
    15. *.db_domain=''
    16. *.db_name='orcl'
    17. *.db_recovery_file_dest='D:\oracle\recovery_area'
    18. *.db_recovery_file_dest_size=4102029312
    19. *.diagnostic_dest='D:\oracle'
    20. *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
    21. *.fal_client='tnsorcl'
    22. *.fal_server='tnsorclstandby'
    23. *.log_archive_config='DG_CONFIG=(orcl,orclstandby)'
    24. *.log_archive_dest_1='LOCATION=D:\oracle\product\11.2.0\dbhome_1\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'
    25. *.log_archive_dest_2='SERVICE=tnsorclstandby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orclstandby'
    26. *.memory_target=1287651328
    27. *.open_cursors=300
    28. *.processes=150
    29. *.remote_login_passwordfile='EXCLUSIVE'
    30. *.standby_file_management='AUTO'
    31. *.undo_tablespace='UNDOTBS1'

    修改项

    改后

    新增

    *.db_unique_name='orclstandby'

    修改

    *.audit_file_dest='D:\oracle\admin\orcl\adump'

    *.audit_file_dest='D:\oracle\admin\orclstandby\adump'

    修改

    *.control_files='D:\oracle\oradata\orcl\control01.ctl','D:\oracle\recovery_area\orcl\control02.ctl'

    *.control_files='D:\oracle\oradata\orclstandby\control01.ctl','D:\oracle\recovery_area\orclstandby\control02.ctl'

    修改

    *.log_archive_dest_1='LOCATION=D:\oracle\product\11.2.0\dbhome_1\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'

    *.log_archive_dest_1='LOCATION=D:\oracle\product\11.2.0\dbhome_1\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orclstandby'

    修改

    *.log_archive_dest_2='SERVICE=tnsorclstandby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orclstandby'

    *.log_archive_dest_2='SERVICE=tnsorcl LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'

    *.fal_client='tnsorcl'

    *.fal_client='tnsorclstandby'

    *.fal_server='tnsorclstandby'

    *.fal_server='tnsorcl'

    完整修改后INITorclstandby.ORA的内容

    1. orcl.__db_cache_size=486539264
    2. orcl.__java_pool_size=16777216
    3. orcl.__large_pool_size=16777216
    4. orcl.__oracle_base='D:\oracle'#ORACLE_BASE set from environment
    5. orcl.__pga_aggregate_target=436207616
    6. orcl.__sga_target=855638016
    7. orcl.__shared_io_pool_size=0
    8. orcl.__shared_pool_size=318767104
    9. orcl.__streams_pool_size=0
    10. *.audit_file_dest='D:\oracle\admin\orclstandby\adump'
    11. *.audit_trail='db'
    12. *.compatible='11.2.0.0.0'
    13. *.control_files='D:\oracle\oradata\orclstandby\control01.ctl','D:\oracle\recovery_area\orclstandby\control02.ctl'
    14. *.db_block_size=8192
    15. *.db_domain=''
    16. *.db_name='orcl'
    17. *.db_unique_name='orclstandby'
    18. *.db_recovery_file_dest='D:\oracle\recovery_area'
    19. *.db_recovery_file_dest_size=4102029312
    20. *.diagnostic_dest='D:\oracle'
    21. *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
    22. *.fal_client='tnsorclstandby'
    23. *.fal_server='tnsorcl'
    24. *.log_archive_config='DG_CONFIG=(orcl,orclstandby)'
    25. *.log_archive_dest_1='LOCATION=D:\oracle\product\11.2.0\dbhome_1\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orclstandby'
    26. *.log_archive_dest_2='SERVICE=tnsorclstandby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orclstandby'
    27. *.memory_target=1287651328
    28. *.open_cursors=300
    29. *.processes=150
    30. *.remote_login_passwordfile='EXCLUSIVE'
    31. *.standby_file_management='AUTO'
    32. *.undo_tablespace='UNDOTBS1'

    6.2.3上述参数中部分路径手动创建

    从库中根据从库INITorclstandby.ORA文件中涉及的如下路径手工创建目录:

    D:\oracle\admin\orclstandby\adump

    D:\oracle\oradata\orclstandby\

    D:\oracle\recovery_area\orclstandby\

    D:\oracle\product\11.2.0\dbhome_1\archivelog

    6.3从库-配置静态监听

    配置前

    1. # listener.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
    2. # Generated by Oracle configuration tools.
    3. SID_LIST_LISTENER =
    4. (SID_LIST =
    5. (SID_DESC =
    6. (SID_NAME = CLRExtProc)
    7. (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
    8. (PROGRAM = extproc)
    9. (ENVS = "EXTPROC_DLLS=ONLY:D:\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    10. )
    11. )
    12. LISTENER =
    13. (DESCRIPTION_LIST =
    14. (DESCRIPTION =
    15. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    16. (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521))
    17. )
    18. )
    19. ADR_BASE_LISTENER = D:\oracle

    配置后

    1. # listener.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
    2. # Generated by Oracle configuration tools.
    3. SID_LIST_LISTENER =
    4. (SID_LIST =
    5. (SID_DESC =
    6. (SID_NAME = CLRExtProc)
    7. (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
    8. (PROGRAM = extproc)
    9. (ENVS = "EXTPROC_DLLS=ONLY:D:\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    10. )
    11. (SID_DESC =
    12. (GLOBAL_DBNAME = orcl)
    13. (SID_NAME = orclstandby)
    14. (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
    15. )
    16. )
    17. LISTENER =
    18. (DESCRIPTION_LIST =
    19. (DESCRIPTION =
    20. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    21. (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521))
    22. )
    23. )
    24. ADR_BASE_LISTENER = D:\oracle

    6.4配置db_home_1中的tnsnames.ora文件

    配置前

    1. # tnsnames.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
    2. # Generated by Oracle configuration tools.
    3. ORACLR_CONNECTION_DATA =
    4. (DESCRIPTION =
    5. (ADDRESS_LIST =
    6. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    7. )
    8. (CONNECT_DATA =
    9. (SID = CLRExtProc)
    10. (PRESENTATION = RO)
    11. )
    12. )

    配置后

    1. # tnsnames.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
    2. # Generated by Oracle configuration tools.
    3. ORACLR_CONNECTION_DATA =
    4. (DESCRIPTION =
    5. (ADDRESS_LIST =
    6. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    7. )
    8. (CONNECT_DATA =
    9. (SID = CLRExtProc)
    10. (PRESENTATION = RO)
    11. )
    12. )
    13. ORCL =
    14. (DESCRIPTION =
    15. (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521))
    16. (CONNECT_DATA =
    17. (SERVER = DEDICATED)
    18. (SERVICE_NAME = orcl)
    19. )
    20. )
    21. tnsorcl =
    22. (DESCRIPTION =
    23. (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521))
    24. (CONNECT_DATA =
    25. (SERVICE_NAME = orcl)
    26. )
    27. )
    28. tnsorclstandby =
    29. (DESCRIPTION =
    30. (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521))
    31. (CONNECT_DATA =
    32. (SERVICE_NAME = orcl)
    33. )
    34. )

    如果从库中安装有oracle client,则需按上述内容配置client中的监听文件。路径:D:\oracle\product\11.2.0\client_1\network\admin

    6.5创建windows-service

    由于规划备库的instance_name为orclstandby

    这里oradim参数如下

    oradim –new –sid orclstandby

    执行如下

    Windows资源管理器进入D:\oracle\product\11.2.0\dbhome_1\BIN

    输入cmd

    1. Microsoft Windows [版本 10.0.14393]
    2. (c) 2016 Microsoft Corporation。保留所有权利。
    3. D:\oracle\product\11.2.0\dbhome_1\BIN>oradim -new -sid orclstandby
    4. 实例已创建。
    5. D:\oracle\product\11.2.0\dbhome_1\BIN>

    执行之后打开“服务”查看,新增了一项OracleServiceoraclestandby的服务,手动右键将其修改为自动启动。

    再次查看监听状态,监听有变化

    1. Microsoft Windows [版本 10.0.14393]
    2. (c) 2016 Microsoft Corporation。保留所有权利。
    3. C:\Users\Administrator>lsnrctl status
    4. LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 21-11月-2022 10:47:07
    5. Copyright (c) 1991, 2010, Oracle. All rights reserved.
    6. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
    7. LISTENER 的 STATUS
    8. ------------------------
    9. 别名 LISTENER
    10. 版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
    11. 启动日期 21-11月-2022 09:28:48
    12. 正常运行时间 01 小时 1835
    13. 跟踪级别 off
    14. 安全性 ON: Local OS Authentication
    15. SNMP OFF
    16. 监听程序参数文件 D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
    17. 监听程序日志文件 d:\oracle\diag\tnslsnr\WIN16-ORADG-STD\listener\alert\log.xml
    18. 监听端点概要...
    19. (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
    20. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN16-ORADG-STD)(PORT=1521)))
    21. 服务摘要..
    22. 服务 "CLRExtProc" 包含 1 个实例。
    23. 实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    24. 服务 "orcl" 包含 1 个实例。
    25. 实例 "orclstandby (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    26. 命令执行成功
    27. C:\Users\Administrator>

    6.6从库尝试解决sqlplus登录ORA-12560: TNS: 协议适配器错误

    由于之前从库创建过orcl的数据库实例,在本次实验前删除了实例,但注册表留存了ORACLE_SID,这里需要手动修改注册表。

    修改注册表

    HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1

    ORACLE_SID由orcl改为orclstandby

    改后重启服务中的oracle监听和OracleServiceorclstandby

    修改注册表后再次sqlplus登录ok

    1. Microsoft Windows [版本 10.0.14393]
    2. (c) 2016 Microsoft Corporation。保留所有权利。
    3. D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus /nolog
    4. SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 11:10:22 2022
    5. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    6. SQL> conn sys/orcl as sysdba;
    7. ERROR:
    8. ORA-12560: TNS: 协议适配器错误
    9. SQL> conn sys/orcl as sysdba;
    10. 已连接到空闲例程。
    11. SQL>

    6.7从库使用pfile文件创建spfile文件

    命令

    create spfile from pfile;

    执行命令改后

    在目录【D:\oracle\product\11.2.0\dbhome_1\database】下自动生成文件SPFILEORCLSTANDBY.ORA

    6.8从库测试sqlplus通过tnsname连接主库与从库

    成功

    1. D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl@orcl as sysdba
    2. SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 14:22:05 2022
    3. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    4. 已连接到空闲例程。
    5. SQL> 已断开连接
    6. D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl@tnsorcl as sysdba
    7. SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 14:22:09 2022
    8. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    9. 连接到:
    10. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    11. With the Partitioning, OLAP, Data Mining and Real Application Testing options
    12. SQL> 从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    13. With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
    14. D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl@tnsorclstandby as sysdba
    15. SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 14:22:14 2022
    16. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    17. 已连接到空闲例程。
    18. SQL> 已断开连接
    19. D:\oracle\product\11.2.0\dbhome_1\BIN>tnsping orcl
    20. TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 21-11月-2022 14:22:20
    21. Copyright (c) 1997, 2010, Oracle. All rights reserved.
    22. 已使用的参数文件:
    23. D:\oracle\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
    24. 已使用 TNSNAMES 适配器来解析别名
    25. 尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))
    26. OK (10 毫秒)
    27. D:\oracle\product\11.2.0\dbhome_1\BIN>tnsping tnsorcl
    28. TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 21-11月-2022 14:22:29
    29. Copyright (c) 1997, 2010, Oracle. All rights reserved.
    30. 已使用的参数文件:
    31. D:\oracle\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
    32. 已使用 TNSNAMES 适配器来解析别名
    33. 尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = orcl)))
    34. OK (0 毫秒)
    35. D:\oracle\product\11.2.0\dbhome_1\BIN>tnsping tnsorclstandby
    36. TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 21-11月-2022 14:22:33
    37. Copyright (c) 1997, 2010, Oracle. All rights reserved.
    38. 已使用的参数文件:
    39. D:\oracle\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
    40. 已使用 TNSNAMES 适配器来解析别名
    41. 尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = orcl)))
    42. OK (10 毫秒)
    43. D:\oracle\product\11.2.0\dbhome_1\BIN>

    6.9主库-测试验证tnsping和sqlplus通过主备tnsname连接

    测试连接成功,命令同备库命令,这里不再列出。

    6.10备库操作-修改db_file_name_convert和log_file_name_convert

    注意其中两个参数与主库此命令参数值不同,参数值互换了。

    关键命令

    alter system set db_file_name_convert='D:\oracle\oradata\orcl','D:\oracle\oradata\orclstandby' scope=spfile;

    关键命令

    alter system set log_file_name_convert='D:\oracle\oradata\orcl','D:\oracle\oradata\orclstandby' scope=spfile;

    修改后重启。

    cmd记录如下

    1. D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl as sysdba;
    2. SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 16:14:44 2022
    3. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    4. 连接到:
    5. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    6. With the Partitioning, OLAP, Data Mining and Real Application Testing options
    7. SQL> show parameter db_file_name_convert;
    8. NAME TYPE VALUE
    9. ------------------------------------ ----------- ------------------------------
    10. db_file_name_convert string
    11. SQL> select name from v$datafile;
    12. NAME
    13. --------------------------------------------------------------------------------
    14. D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
    15. D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
    16. D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
    17. D:\ORACLE\ORADATA\ORCL\USERS01.DBF
    18. D:\ORACLE\ORADATA\ORCL\VAMS_DATA_0.DBF
    19. SQL> alter system set db_file_name_convert='D:\oracle\oradata\orcl','D:\oracle\oradata\orclstandby' scope=spfile;
    20. 系统已更改。
    21. SQL> select member from v$logfile;
    22. MEMBER
    23. --------------------------------------------------------------------------------
    24. D:\ORACLE\ORADATA\ORCL\REDO03.LOG
    25. D:\ORACLE\ORADATA\ORCL\REDO02.LOG
    26. D:\ORACLE\ORADATA\ORCL\REDO01.LOG
    27. SQL> alter system set log_file_name_convert='D:\oracle\oradata\orcl','D:\oracle\oradata\orclstandby' scope=spfile;
    28. 系统已更改。
    29. SQL> shutdown immediate;
    30. ORA-01109: 数据库未打开
    31. 已经卸载数据库。
    32. ORACLE 例程已经关闭。
    33. SQL> startup nomount;
    34. ORACLE 例程已经启动。
    35. Total System Global Area 1286066176 bytes
    36. Fixed Size 2175408 bytes
    37. Variable Size 754978384 bytes
    38. Database Buffers 520093696 bytes
    39. Redo Buffers 8818688 bytes
    40. SQL> show parameter db_file_name_convert;
    41. NAME TYPE
    42. ------------------------------------ ----------------------
    43. VALUE
    44. ------------------------------
    45. db_file_name_convert string
    46. D:\oracle\oradata\orcl, D:\ora
    47. cle\oradata\orclstandby
    48. SQL> show parameter log_file_name_convert;
    49. NAME TYPE
    50. ------------------------------------ ----------------------
    51. VALUE
    52. ------------------------------
    53. log_file_name_convert string
    54. D:\oracle\oradata\orcl, D:\ora
    55. cle\oradata\orclstandby
    56. SQL>

    7.备库-通过rman将主库数据文件复制到从库

    Cmd切换到目录【D:\oracle\product\11.2.0\dbhome_1\BIN】

    命令【rman target sys/orcl@tnsorcl auxiliary sys/orcl@tnsorclstandby】

    在RMAN提示符后输入

    【duplicate target database for standby from active database nofilenamecheck;】

    提示

    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: Duplicate Db 命令 (在 11/21/2022 15:01:53 上) 失败
    RMAN-06403: 无法获得完全授权的会话
    RMAN-04006: 来自辅助数据库的错误: ORA-01034: ORACLE not available
    ORA-27101: shared memory realm does not exist

    解决办法将数据库以nomount方式启动。

    1. Microsoft Windows [版本 10.0.14393]
    2. (c) 2016 Microsoft Corporation。保留所有权利。
    3. D:\oracle\product\11.2.0\dbhome_1\BIN>rman target sys/orcl@tnsorcl auxiliary sys/orcl@tnsorclstandby
    4. 恢复管理器: Release 11.2.0.1.0 - Production on 星期一 1121 15:00:11 2022
    5. Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
    6. 连接到目标数据库: ORCL (DBID=1629940155)
    7. 已连接到辅助数据库 (未启动)
    8. RMAN> duplicate target database for standby from active database nofilenamecheck;
    9. 启动 Duplicate Db 于 21-11月-22
    10. RMAN-00571: ===========================================================
    11. RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    12. RMAN-00571: ===========================================================
    13. RMAN-03002: Duplicate Db 命令 (在 11/21/2022 15:01:53 上) 失败
    14. RMAN-06403: 无法获得完全授权的会话
    15. RMAN-04006: 来自辅助数据库的错误: ORA-01034: ORACLE not available
    16. ORA-27101: shared memory realm does not exist
    17. RMAN>
    18. ^C
    19. D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl as sysdba;
    20. SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 15:16:41 2022
    21. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    22. 已连接到空闲例程。
    23. SQL> shutdown immediate
    24. ORA-01034: ORACLE not available
    25. ORA-27101: shared memory realm does not exist
    26. SQL> startup nomount
    27. ORACLE 例程已经启动。
    28. Total System Global Area 1286066176 bytes
    29. Fixed Size 2175408 bytes
    30. Variable Size 754978384 bytes
    31. Database Buffers 520093696 bytes
    32. Redo Buffers 8818688 bytes
    33. SQL>

    成功操作记录

    1. D:\oracle\product\11.2.0\dbhome_1\BIN>rman target sys/orcl@tnsorcl auxiliary sys/orcl@tnsorclstandby
    2. 恢复管理器: Release 11.2.0.1.0 - Production on 星期一 1121 16:31:39 2022
    3. Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
    4. 连接到目标数据库: ORCL (DBID=1629940155)
    5. 已连接到辅助数据库: ORCL (未装载)
    6. RMAN> duplicate target database for standby from active database nofilenamecheck;
    7. 启动 Duplicate Db 于 21-11月-22
    8. 使用目标数据库控制文件替代恢复目录
    9. 分配的通道: ORA_AUX_DISK_1
    10. 通道 ORA_AUX_DISK_1: SID=63 设备类型=DISK
    11. 内存脚本的内容:
    12. {
    13. backup as copy reuse
    14. targetfile 'D:\oracle\product\11.2.0\dbhome_1\DATABASE\PWDorcl.ORA' auxiliary format
    15. 'D:\oracle\product\11.2.0\dbhome_1\DATABASE\PWDorclstandby.ORA' ;
    16. }
    17. 正在执行内存脚本
    18. 启动 backup 于 21-11月-22
    19. 分配的通道: ORA_DISK_1
    20. 通道 ORA_DISK_1: SID=198 设备类型=DISK
    21. 完成 backup 于 21-11月-22
    22. 内存脚本的内容:
    23. {
    24. backup as copy current controlfile for standby auxiliary format 'D:\ORACLE\ORADATA\ORCLSTANDBY\CONTROL01.CTL';
    25. restore clone controlfile to 'D:\ORACLE\RECOVERY_AREA\ORCLSTANDBY\CONTROL02.CTL' from
    26. 'D:\ORACLE\ORADATA\ORCLSTANDBY\CONTROL01.CTL';
    27. }
    28. 正在执行内存脚本
    29. 启动 backup 于 21-11月-22
    30. 使用通道 ORA_DISK_1
    31. 通道 ORA_DISK_1: 启动数据文件副本
    32. 复制备用控制文件
    33. 输出文件名=D:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\SNCFORCL.ORA 标记=TAG20221121T163146 RECID=8 STAMP=1121358707
    34. 通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:03
    35. 完成 backup 于 21-11月-22
    36. 启动 restore 于 21-11月-22
    37. 使用通道 ORA_AUX_DISK_1
    38. 通道 ORA_AUX_DISK_1: 已复制控制文件副本
    39. 完成 restore 于 21-11月-22
    40. 内存脚本的内容:
    41. {
    42. sql clone 'alter database mount standby database';
    43. }
    44. 正在执行内存脚本
    45. sql 语句: alter database mount standby database
    46. 内存脚本的内容:
    47. {
    48. set newname for tempfile 1 to
    49. "D:\ORACLE\ORADATA\ORCLSTANDBY\TEMP01.DBF";
    50. set newname for tempfile 2 to
    51. "D:\ORACLE\ORADATA\ORCLSTANDBY\VAMS_TEMP_0.DBF";
    52. switch clone tempfile all;
    53. set newname for datafile 1 to
    54. "D:\ORACLE\ORADATA\ORCLSTANDBY\SYSTEM01.DBF";
    55. set newname for datafile 2 to
    56. "D:\ORACLE\ORADATA\ORCLSTANDBY\SYSAUX01.DBF";
    57. set newname for datafile 3 to
    58. "D:\ORACLE\ORADATA\ORCLSTANDBY\UNDOTBS01.DBF";
    59. set newname for datafile 4 to
    60. "D:\ORACLE\ORADATA\ORCLSTANDBY\USERS01.DBF";
    61. set newname for datafile 5 to
    62. "D:\ORACLE\ORADATA\ORCLSTANDBY\VAMS_DATA_0.DBF";
    63. backup as copy reuse
    64. datafile 1 auxiliary format
    65. "D:\ORACLE\ORADATA\ORCLSTANDBY\SYSTEM01.DBF" datafile
    66. 2 auxiliary format
    67. "D:\ORACLE\ORADATA\ORCLSTANDBY\SYSAUX01.DBF" datafile
    68. 3 auxiliary format
    69. "D:\ORACLE\ORADATA\ORCLSTANDBY\UNDOTBS01.DBF" datafile
    70. 4 auxiliary format
    71. "D:\ORACLE\ORADATA\ORCLSTANDBY\USERS01.DBF" datafile
    72. 5 auxiliary format
    73. "D:\ORACLE\ORADATA\ORCLSTANDBY\VAMS_DATA_0.DBF" ;
    74. sql 'alter system archive log current';
    75. }
    76. 正在执行内存脚本
    77. 正在执行命令: SET NEWNAME
    78. 正在执行命令: SET NEWNAME
    79. 临时文件 1 在控制文件中已重命名为 D:\ORACLE\ORADATA\ORCLSTANDBY\TEMP01.DBF
    80. 临时文件 2 在控制文件中已重命名为 D:\ORACLE\ORADATA\ORCLSTANDBY\VAMS_TEMP_0.DBF
    81. 正在执行命令: SET NEWNAME
    82. 正在执行命令: SET NEWNAME
    83. 正在执行命令: SET NEWNAME
    84. 正在执行命令: SET NEWNAME
    85. 正在执行命令: SET NEWNAME
    86. 启动 backup 于 21-11月-22
    87. 使用通道 ORA_DISK_1
    88. 通道 ORA_DISK_1: 启动数据文件副本
    89. 输入数据文件: 文件号=00001 名称=D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
    90. 输出文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\SYSTEM01.DBF 标记=TAG20221121T163201
    91. 通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:01:16
    92. 通道 ORA_DISK_1: 启动数据文件副本
    93. 输入数据文件: 文件号=00005 名称=D:\ORACLE\ORADATA\ORCL\VAMS_DATA_0.DBF
    94. 输出文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\VAMS_DATA_0.DBF 标记=TAG20221121T163201
    95. 通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:35
    96. 通道 ORA_DISK_1: 启动数据文件副本
    97. 输入数据文件: 文件号=00002 名称=D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
    98. 输出文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\SYSAUX01.DBF 标记=TAG20221121T163201
    99. 通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:55
    100. 通道 ORA_DISK_1: 启动数据文件副本
    101. 输入数据文件: 文件号=00003 名称=D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
    102. 输出文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\UNDOTBS01.DBF 标记=TAG20221121T163201
    103. 通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:15
    104. 通道 ORA_DISK_1: 启动数据文件副本
    105. 输入数据文件: 文件号=00004 名称=D:\ORACLE\ORADATA\ORCL\USERS01.DBF
    106. 输出文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\USERS01.DBF 标记=TAG20221121T163201
    107. 通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01
    108. 完成 backup 于 21-11月-22
    109. sql 语句: alter system archive log current
    110. 内存脚本的内容:
    111. {
    112. switch clone datafile all;
    113. }
    114. 正在执行内存脚本
    115. 数据文件 1 已转换成数据文件副本
    116. 输入数据文件副本 RECID=8 STAMP=1121358906 文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\SYSTEM01.DBF
    117. 数据文件 2 已转换成数据文件副本
    118. 输入数据文件副本 RECID=9 STAMP=1121358907 文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\SYSAUX01.DBF
    119. 数据文件 3 已转换成数据文件副本
    120. 输入数据文件副本 RECID=10 STAMP=1121358907 文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\UNDOTBS01.DBF
    121. 数据文件 4 已转换成数据文件副本
    122. 输入数据文件副本 RECID=11 STAMP=1121358907 文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\USERS01.DBF
    123. 数据文件 5 已转换成数据文件副本
    124. 输入数据文件副本 RECID=12 STAMP=1121358907 文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\VAMS_DATA_0.DBF
    125. 完成 Duplicate Db 于 21-11月-22
    126. RMAN>

    复制成功

    进入从库windows系统,查看目录【D:\oracle\oradata\orclstandby】已经自动获得了来自主机的拷贝。

    8.添加主库和备库的standby日志组

    添加standby日志组需要注意的事项:

    standby日志组个数:配置为redo日志组个数+1

    在主库与备库都添加standby日志组。主库可以不添加,但是如果后期发生主备切换,还是要添加,所以最好一次性添加。

    只查询standby日志组: select * from v$standby_log ;

    理论知识

    注: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)

    8.1主库添加standby日志组

    添加前

    1. SQL*Plus: Release 11.2.0.1.0 Production on 星期二 11月 22 08:46:03 2022
    2. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    3. 请输入用户名: / as sysdba
    4. 连接到:
    5. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    6. With the Partitioning, OLAP, Data Mining and Real Application Testing options
    7. SQL> archive log list
    8. 数据库日志模式 存档模式
    9. 自动存档 启用
    10. 存档终点 D:\oracle\product\11.2.0\dbhome_1\archivelog
    11. 最早的联机日志序列 44
    12. 下一个存档日志序列 46
    13. 当前日志序列 46
    14. SQL> show parameter log_archive_format;
    15. NAME TYPE VALUE
    16. ------------------------------------ ----------- ------------------------------
    17. log_archive_format string ARC%S_%R.%T
    18. SQL> show parameter DB_RECOVERY_FILE_DEST;
    19. NAME TYPE VALUE
    20. ------------------------------------ ----------- ------------------------------
    21. db_recovery_file_dest string D:\oracle\recovery_area
    22. db_recovery_file_dest_size big integer 3912M
    23. SQL> select name,log_mode from v$database;
    24. NAME LOG_MODE
    25. --------- ------------
    26. ORCL ARCHIVELOG
    27. SQL> select * from v$option where parameter='Oracle Data Guard';
    28. PARAMETER
    29. ----------------------------------------------------------------
    30. VALUE
    31. ----------------------------------------------------------------
    32. Oracle Data Guard
    33. TRUE
    34. SQL> select name,force_logging from v$database;
    35. NAME FOR
    36. --------- ---
    37. ORCL YES
    38. SQL> select group#,bytes/1024/1024 as Mb from v$log;
    39. GROUP# MB
    40. ---------- ----------
    41. 1 50
    42. 2 50
    43. 3 50
    44. SQL>

    原redo有3个,这里要添加4个standbyredo log。

    命令

    alter database add standby logfile group 11 'D:\oracle\oradata\orcl\standbyredo11.log' size 50M;

    alter database add standby logfile group 12 'D:\oracle\oradata\orcl\standbyredo12.log' size 50M;

    alter database add standby logfile group 13 'D:\oracle\oradata\orcl\standbyredo13.log' size 50M;

    alter database add standby logfile group 14 'D:\oracle\oradata\orcl\standbyredo14.log' size 50M;

    1. Microsoft Windows [版本 10.0.14393]
    2. (c) 2016 Microsoft Corporation。保留所有权利。
    3. D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus / as sysdba
    4. SQL*Plus: Release 11.2.0.1.0 Production on 星期二 11月 22 09:22:49 2022
    5. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    6. 连接到:
    7. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    8. With the Partitioning, OLAP, Data Mining and Real Application Testing options
    9. SQL> alter database add standby logfile group 11 'D:\oracle\oradata\orcl\standbyredo11.log' size 50M;
    10. 数据库已更改。
    11. SQL> alter database add standby logfile group 12 'D:\oracle\oradata\orcl\standbyredo12.log' size 50M;
    12. 数据库已更改。
    13. SQL> alter database add standby logfile group 13 'D:\oracle\oradata\orcl\standbyredo13.log' size 50M;
    14. 数据库已更改。
    15. SQL> alter database add standby logfile group 14 'D:\oracle\oradata\orcl\standbyredo14.log' size 50M;
    16. 数据库已更改。
    17. SQL>

    8.2从库添加standby日志组

    用命令shutdown immediate关闭数据库

    然后用startup重启数据库

    四个命令如下

    操作完成后自动生成standbyredo四个log文件

    1. Microsoft Windows [版本 10.0.14393]
    2. (c) 2016 Microsoft Corporation。保留所有权利。
    3. D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus / as sysdba
    4. SQL*Plus: Release 11.2.0.1.0 Production on 星期二 11月 22 09:37:23 2022
    5. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    6. 已连接到空闲例程。
    7. SQL> select group#,bytes/1024/1024 as Mb from v$log;
    8. select group#,bytes/1024/1024 as Mb from v$log
    9. *
    10. 1 行出现错误:
    11. ORA-01034: ORACLE not available
    12. 进程 ID: 0
    13. 会话 ID: 0 序列号: 0
    14. SQL> alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' siez 50M;
    15. alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' siez 50M
    16. *
    17. 1 行出现错误:
    18. ORA-01034: ORACLE not available
    19. 进程 ID: 0
    20. 会话 ID: 0 序列号: 0
    21. SQL> shutdown immediate
    22. ORA-01034: ORACLE not available
    23. ORA-27101: shared memory realm does not exist
    24. SQL> startup nomount
    25. ORACLE 例程已经启动。
    26. Total System Global Area 1286066176 bytes
    27. Fixed Size 2175408 bytes
    28. Variable Size 754978384 bytes
    29. Database Buffers 520093696 bytes
    30. Redo Buffers 8818688 bytes
    31. SQL> select group#,bytes/1024/1024 as Mb from v$log;
    32. select group#,bytes/1024/1024 as Mb from v$log
    33. *
    34. 1 行出现错误:
    35. ORA-01507: ??????
    36. SQL> alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' siez 50M;
    37. alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' siez 50M
    38. *
    39. 1 行出现错误:
    40. ORA-00933: SQL ???????
    41. SQL> alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' size 50M;
    42. alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' size 50M
    43. *
    44. 1 行出现错误:
    45. ORA-01507: ??????
    46. SQL> shutdown immediate
    47. ORA-01507: ??????
    48. ORACLE 例程已经关闭。
    49. SQL> startup
    50. ORACLE 例程已经启动。
    51. Total System Global Area 1286066176 bytes
    52. Fixed Size 2175408 bytes
    53. Variable Size 754978384 bytes
    54. Database Buffers 520093696 bytes
    55. Redo Buffers 8818688 bytes
    56. 数据库装载完毕。
    57. 数据库已经打开。
    58. SQL> select group#,bytes/1024/1024 as Mb from v$log;
    59. GROUP# MB
    60. ---------- ----------
    61. 1 50
    62. 2 50
    63. 3 50
    64. SQL> alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' size 50M;
    65. 数据库已更改。
    66. SQL> alter database add standby logfile group 12 'D:\oracle\oradata\orclstandby\standbyredo12.log' size 50M;
    67. 数据库已更改。
    68. SQL> alter database add standby logfile group 13 'D:\oracle\oradata\orclstandby\standbyredo13.log' size 50M;
    69. 数据库已更改。
    70. SQL> alter database add standby logfile group 14 'D:\oracle\oradata\orclstandby\standbyredo14.log' size 50M;
    71. 数据库已更改。
    72. SQL>

    9备库-启用日志同步

    1. D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl as sysdba;
    2. SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 16:56:28 2022
    3. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    4. 连接到:
    5. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    6. With the Partitioning, OLAP, Data Mining and Real Application Testing options
    7. SQL> alter database recover managed standby database disconnect from session;
    8. 数据库已更改。
    9. SQL> recover managed standby database cancel;
    10. 完成介质恢复。
    11. SQL> shutdown immediate;
    12. ORA-01109: 数据库未打开
    13. 已经卸载数据库。
    14. ORACLE 例程已经关闭。
    15. SQL> startup nomount;
    16. ORACLE 例程已经启动。
    17. Total System Global Area 1286066176 bytes
    18. Fixed Size 2175408 bytes
    19. Variable Size 754978384 bytes
    20. Database Buffers 520093696 bytes
    21. Redo Buffers 8818688 bytes
    22. SQL> alter database mount standby database;
    23. 数据库已更改。
    24. SQL> alter database open read only;
    25. 数据库已更改。
    26. SQL> alter database recover managed standby database using current logfile disconnect from session;
    27. alter database recover managed standby database using current logfile disconnect from session
    28. *
    29. 1 行出现错误:
    30. ORA-38500: USING CURRENT LOGFILE option not available without standby redo logs
    31. SQL> alter database recover managed standby database disconnect from session;
    32. 数据库已更改。
    33. SQL>

    上述命令设置同步后,只有在切换日志时才同步,不会自动同步。

    自动同步要点,两条指令

    第一条

    从库:alter database recover managed standby database disconnect from session;

    执行后确保将从库OPEN_MODE状态改为READ ONLY WITH APPLY

    上述这条指令只是开启了同步,但并不是实时同步。如果从库只执行这条指令,则仅当主库执行主库强制归档命令【ALTER SYSTEM SWITCH LOGFILE;】后,从库才能查询到最新数据。

    第二条
    从库:alter database recover managed standby database using current logfile disconnect;

    需要注意的是,上述第一第二两条指令都会将从库OPEN_MODE状态改为READ ONLY WITH APPLY,但只有第二条指令能开启实时同步。

    从库cmd操作如下

    1. SQL> select open_mode from v$database;
    2. OPEN_MODE
    3. --------------------
    4. READ ONLY WITH APPLY
    5. SQL> alter database recover managed standby database using current logfile disconnect;
    6. alter database recover managed standby database using current logfile disconnect
    7. *
    8. 1 行出现错误:
    9. ORA-01153: 激活了不兼容的介质恢复
    10. SQL> alter database recover managed standby database cancel;
    11. 数据库已更改。
    12. SQL> alter database recover managed standby database using current logfile disconnect;
    13. 数据库已更改。
    14. SQL> select open_mode from v$database;
    15. OPEN_MODE
    16. --------------------
    17. READ ONLY WITH APPLY
    18. SQL>

    10.DataGuard状态查看

    10.1主库状态查看

    命令

    select open_mode,database_role,protection_mode,protection_level from v$database;

    1. SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 17:22:49 2022
    2. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    3. 请输入用户名: sys as sysdba
    4. 输入口令:
    5. 连接到:
    6. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    7. With the Partitioning, OLAP, Data Mining and Real Application Testing options
    8. SQL> select open_mode,database_role,protection_mode,protection_level from v$database;
    9. OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
    10. -------------------- ---------------- -------------------- --------------------
    11. READ WRITE PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
    12. SQL>

    10.2从库状态查看

    命令

    select open_mode,database_role,protection_mode,protection_level from v$database;

    1. D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl as sysdba;
    2. SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 17:20:40 2022
    3. Copyright (c) 1982, 2010, Oracle. All rights reserved.
    4. 连接到:
    5. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    6. With the Partitioning, OLAP, Data Mining and Real Application Testing options
    7. SQL> select open_mode,database_role,protection_mode,protection_level from v$database;
    8. OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
    9. -------------------- ---------------- -------------------- --------------------
    10. READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
    11. SQL>

    11测试Dataguard主库写,然后从库读

    主库操作

    1. SQL> create table testdg03(id number,name varchar2(50));
    2. 表已创建。
    3. SQL> insert into testdg03 values(1,'wdh-2022-11-22 14:43');
    4. 已创建 1 行。
    5. SQL> commit;
    6. 提交完成。
    7. SQL>

    从库查询,ok

    1. SQL> select * from testdg03;
    2. ID NAME
    3. ---------- --------------------------------------------------
    4. 1 wdh-2022-11-22 14:43
    5. SQL>

    其他问题

    设置自动同步后,将主库从库均重启,但从库启动后OPEN_MODE为READ ONLY,并非READ ONLY WITH APPLY,需要手动进入从库下发命令修改OPEN_MODE。

    解决从库-windows服务启动时未启动实例

    开始菜单-Oracle-OraDb11g_home1下点击Administration Assistant for windows软件

     

     

    启动关闭选项修改为【服务启动时启动实例】 

     

    上述确定后,注册表也相应自动改变了,如下

    【HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1】

    查看默认实例 Oracle主目录-OraDb11g_home1-右键属性

    参考资料

    https://www.cnblogs.com/lottu/p/9542053.html

    https://www.cnblogs.com/lijiaman/p/10663047.html

    Windows环境Oracle搭建Data Guard_阿坚87的博客-CSDN博客

    windows搭建oracle dataguard,本人亲测_佐手烈焰魂的博客-CSDN博客

    Oracle11g DG实战配置(Windows版)(一)基础说明_0xfather的博客-CSDN博客

  • 相关阅读:
    nginx反向代理动静分离和负载均衡
    基于SpringBoot和Vue2.0的轻量级博客开发
    .NET C#基础(6):命名空间 - 有名字的作用域
    Java项目之“拼图小游戏”
    laravel 中 npm run 同时执行多个命令
    记录发生同一个实体用在多个不同的controller接口展示不同的字段报空指针的问题。
    sysstat系列:pidstat
    1.10 while语句(Python)
    使用split.js库实现网页布局分割
    JavaSE之数组
  • 原文地址:https://blog.csdn.net/wangdonghao137/article/details/127997079