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文件内容如下
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
127.0.0.1 localhost
::1 localhost
192.168.7.181 WIN16-ORADG-PRI
192.168.7.182 WIN16-ORADG-STD
配置hosts文件后,cmd中使用如下命令可刷新host,无需重启服务器。
ipconfig /flushdns
主库ping host记录
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>hostname
WIN16-ORADG-PRI
C:\Users\Administrator>ping WIN16-ORADG-PRI -4
正在 Ping WIN16-ORADG-PRI [192.168.7.181] 具有 32 字节的数据:
来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
192.168.7.181 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
C:\Users\Administrator>ping WIN16-ORADG-STD -4
正在 Ping WIN16-ORADG-STD [192.168.7.182] 具有 32 字节的数据:
来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
192.168.7.182 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
C:\Users\Administrator>
从库ping host记录
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>hostname
WIN16-ORADG-STD
C:\Users\Administrator>ping WIN16-ORADG-STD -4
正在 Ping WIN16-ORADG-STD [192.168.7.182] 具有 32 字节的数据:
来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.7.182 的回复: 字节=32 时间<1ms TTL=128
192.168.7.182 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
C:\Users\Administrator>ping WIN16-ORADG-PRI -4
Ping 请求找不到主机 WIN16-ORADG-PRI。请检查该名称,然后重试。
C:\Users\Administrator>ping WIN16-ORADG-PRI -4
Ping 请求找不到主机 WIN16-ORADG-PRI。请检查该名称,然后重试。
C:\Users\Administrator>ipconfig /flushdns
Windows IP 配置
已成功刷新 DNS 解析缓存。
C:\Users\Administrator>ping WIN16-ORADG-PRI -4
正在 Ping WIN16-ORADG-PRI [192.168.7.181] 具有 32 字节的数据:
来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.7.181 的回复: 字节=32 时间<1ms TTL=128
192.168.7.181 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
5.主库-DataGuard配置
5.1查询及启用强制记录日志
查询是否启用强制记录日志
select force_logging from v$database;
如果未启用,则使用下面语句来开启强制记录日志
alter database force logging;
cmd记录
SQL*Plus: Release 11.2.0.1.0 Production on 星期四 11月 17 09:29:17 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
请输入用户名: sys as sysdba
输入口令:
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select force_logging from v$database;
FOR
---
NO
SQL> alter database force logging;
数据库已更改。
SQL> select force_logging from v$database;
FOR
---
YES
SQL>
5.3查询及启用归档
查询命令
select log_mode from v$database;
cmd记录
SQL> archive log list;
数据库日志模式 非存档模式
自动存档 禁用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 28
当前日志序列 30
SQL> select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG
SQL>
上述显示未启用归档模式。
如果未启用归档,可以按照如下步骤开启归档
----Oracle 11g数据库归档模式开启
--STEP1:以sysdba角色登陆数据库
sqlplus / as sysdba
--STEP2:干净的关闭数据库
shutdown immediate
--STEP3:将数据库启动到mount状态
startup mount
--STEP4:开启归档
alter database archivelog;
--STEP5:打开数据库
alter database open
Cmd记录如下
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1286066176 bytes
Fixed Size 2175408 bytes
Variable Size 754978384 bytes
Database Buffers 520093696 bytes
Redo Buffers 8818688 bytes
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 28
下一个存档日志序列 30
当前日志序列 30
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
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
SQL> show parameter db_unique_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string orcl
SQL> show parameter log_archive_config;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_config string
SQL> show parameter db_unique_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string orcl
SQL> show parameter log_archive_config;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_config string
SQL> alter system set log_archive_config='DG_CONFIG=(orcl,orclstandby)' scope=spfile;
系统已更改。
SQL> show parameter log_archive_config;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_config string
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: 对参数的修改会同时记录在服务器参数文件和內存中,对于动态参数立即生效,对静态参数不能用这个选项
重启数据库后查询结果如下
SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 18 08:58:49 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
请输入用户名: sys as sysdba
输入口令:
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> show parameter log_archive_config;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_config string DG_CONFIG=(orcl,orclstandby)
SQL>
5.4.3修改参数log_archive_dest_1
SQL> show parameter log_archive_dest_1;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
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;
系统已更改。
SQL> show parameter log_archive_dest_1;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string LOCATION=D:\oracle\product\11.
2.0\dbhome_1\archivelog VALID_
FOR=(ALL_LOGFILES,ALL_ROLES) D
B_UNIQUE_NAME=orcl
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
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;
5.4.4修改参数log_archive_dest_2
SQL> show parameter log_archive_dest_2;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2 string
log_archive_dest_20 string
log_archive_dest_21 string
log_archive_dest_22 string
log_archive_dest_23 string
log_archive_dest_24 string
log_archive_dest_25 string
log_archive_dest_26 string
log_archive_dest_27 string
log_archive_dest_28 string
log_archive_dest_29 string
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;
系统已更改。
SQL> show parameter log_archive_dest_2;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2 string
log_archive_dest_20 string
log_archive_dest_21 string
log_archive_dest_22 string
log_archive_dest_23 string
log_archive_dest_24 string
log_archive_dest_25 string
log_archive_dest_26 string
log_archive_dest_27 string
log_archive_dest_28 string
log_archive_dest_29 string
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
查看
SQL> show parameter log_archive_dest_state_1;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_1 string enable
log_archive_dest_state_10 string enable
log_archive_dest_state_11 string enable
log_archive_dest_state_12 string enable
log_archive_dest_state_13 string enable
log_archive_dest_state_14 string enable
log_archive_dest_state_15 string enable
log_archive_dest_state_16 string enable
log_archive_dest_state_17 string enable
log_archive_dest_state_18 string enable
log_archive_dest_state_19 string enable
SQL> show parameter log_archive_dest_state_2;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_2 string enable
log_archive_dest_state_20 string enable
log_archive_dest_state_21 string enable
log_archive_dest_state_22 string enable
log_archive_dest_state_23 string enable
log_archive_dest_state_24 string enable
log_archive_dest_state_25 string enable
log_archive_dest_state_26 string enable
log_archive_dest_state_27 string enable
log_archive_dest_state_28 string enable
log_archive_dest_state_29 string enable
SQL>
如需修改,使用如下命令
alter system set log_archive_dest_state_1 = ENABLE;
alter system set log_archive_dest_state_2 = ENABLE;
5.4.6查看或修改数据文件位置
目标是保证主库从库数据文件位置一致,不一致则用命令修改。
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
D:\ORACLE\ORADATA\ORCL\USERS01.DBF
D:\ORACLE\ORADATA\ORCL\VAMS_DATA_0.DBF
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;
修改后需要重启数据库才能生效
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 15:44:52 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
D:\ORACLE\ORADATA\ORCL\USERS01.DBF
D:\ORACLE\ORADATA\ORCL\VAMS_DATA_0.DBF
SQL> show parameter db_file_name_convert;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
SQL> alter system set db_file_name_convert='D:\oracle\oradata\orclstandby\','D:\oracle\oradata\orcl\' scope=spfile;
系统已更改。
SQL> show parameter db_file_name_convert;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 1286066176 bytes
Fixed Size 2175408 bytes
Variable Size 822087248 bytes
Database Buffers 452984832 bytes
Redo Buffers 8818688 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter db_file_name_convert;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string D:\oracle\oradata\orclstandby\
, D:\oracle\oradata\orcl\
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;
修改后需要重启数据库才生效
SQL> show parameter log_file_name_convert;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_file_name_convert string
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
D:\ORACLE\ORADATA\ORCL\REDO03.LOG
D:\ORACLE\ORADATA\ORCL\REDO02.LOG
D:\ORACLE\ORADATA\ORCL\REDO01.LOG
SQL> alter system set log_file_name_convert='D:\oracle\oradata\orclstandby\','D:\oracle\oradata\orcl\' scope=spfile;
系统已更改。
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
D:\ORACLE\ORADATA\ORCL\REDO03.LOG
D:\ORACLE\ORADATA\ORCL\REDO02.LOG
D:\ORACLE\ORADATA\ORCL\REDO01.LOG
SQL> show parameter log_file_name_convert;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_file_name_convert string
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 1286066176 bytes
Fixed Size 2175408 bytes
Variable Size 822087248 bytes
Database Buffers 452984832 bytes
Redo Buffers 8818688 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter log_file_name_convert;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_file_name_convert string D:\oracle\oradata\orclstandby\
, D:\oracle\oradata\orcl\
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;】
SQL> show parameter standby_file_management;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
standby_file_management string MANUAL
SQL> alter system set standby_file_management=auto scope=spfile;
系统已更改。
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实践如下
SQL> show parameter fal_client;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
fal_client string
SQL> alter system set fal_client='tnsorcl' scope=both;
系统已更改。
SQL> show parameter fal_client;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
fal_client string tnsorcl
SQL>
5.4.11查看及修改参数fal_server
查看命令【show parameter fal_server;】
修改命令【alter system set fal_server='tnsorclstandby' scope=both;】
修改命令中'tnsorclstandby'是主库tnsnames.ora中配置的访问从库的tns连接名(后续会配置)。
我的cmd实践记录
SQL> show parameter fal_server;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
fal_server string
SQL> alter system set fal_server='tnsorclstandby' scope=both;
系统已更改。
SQL> show parameter fal_server;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
fal_server string tnsorclstandby
SQL>
5.5主库监听修改
查看原始监听,进入D:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN,记事本打开listener.ora
# listener.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(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 = WIN16-ORADG-PRI)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\oracle
添加
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(SID_NAME = orcl)
(ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
)
修改为如下
# listener.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(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")
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(SID_NAME = orcl)
(ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\oracle
5.6主库查看监听
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>lsnrctl status
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 18-11月-2022 08:57:36
Copyright (c) 1991, 2010, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
启动日期 18-11月-2022 08:48:37
正常运行时间 0 天 0 小时 9 分 8 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
监听程序日志文件 d:\oracle\diag\tnslsnr\WIN16-ORADG-PRI\listener\alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN16-ORADG-PRI)(PORT=1521)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
C:\Users\Administrator>lsnrctl status
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 18-11月-2022 17:11:27
Copyright (c) 1991, 2010, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
启动日期 18-11月-2022 08:48:37
正常运行时间 0 天 8 小时 22 分 59 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
监听程序日志文件 d:\oracle\diag\tnslsnr\WIN16-ORADG-PRI\listener\alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN16-ORADG-PRI)(PORT=1521)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
C:\Users\Administrator>lsnrctl reload
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 18-11月-2022 17:12:15
Copyright (c) 1991, 2010, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
命令执行成功
C:\Users\Administrator>lsnrctl status
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 18-11月-2022 17:12:19
Copyright (c) 1991, 2010, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
启动日期 18-11月-2022 08:48:37
正常运行时间 0 天 8 小时 23 分 51 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
监听程序日志文件 d:\oracle\diag\tnslsnr\WIN16-ORADG-PRI\listener\alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN16-ORADG-PRI)(PORT=1521)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 2 个实例。
实例 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
C:\Users\Administrator>
5.7主库-查看及修改tnsnames.ora
原始
# tnsnames.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
主库-修改新增tnsorcl和tnsorclstandby
配置项tnsorcl是主库中连接自身的tnsname,host是主库计算机名或ip。
配置项tnsorclstandby是主库中连接从库的tnsname,host是从库计算机名或ip。
注意这两个配置项的名称与前述主库参数配置的参数名是对应的,否则前述参数修改会无法生效。
# tnsnames.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
tnsorcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
tnsorclstandby =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
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的目的是将其拷贝到从库中进行修改)
SQL> create pfile from spfile;
文件已创建。
SQL>
6.2.2拷贝主库pfile参数文件(INITorcl.ORA)到从库并重命名
将主库[D:\oracle\product\11.2.0\dbhome_1\database]下INITorcl.ORA文件拷贝到从库相同位置,并改名为INITorclstandby.ORA
对拷贝到从库后的INITorclstandby.ORA内容修改。
INITorclstandby.ORA原始内容
orcl.__db_cache_size=486539264
orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='D:\oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=436207616
orcl.__sga_target=855638016
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=318767104
orcl.__streams_pool_size=0
*.audit_file_dest='D:\oracle\admin\orcl\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='D:\oracle\oradata\orcl\control01.ctl','D:\oracle\recovery_area\orcl\control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='D:\oracle\recovery_area'
*.db_recovery_file_dest_size=4102029312
*.diagnostic_dest='D:\oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_client='tnsorcl'
*.fal_server='tnsorclstandby'
*.log_archive_config='DG_CONFIG=(orcl,orclstandby)'
*.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_2='SERVICE=tnsorclstandby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orclstandby'
*.memory_target=1287651328
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.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的内容
orcl.__db_cache_size=486539264
orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='D:\oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=436207616
orcl.__sga_target=855638016
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=318767104
orcl.__streams_pool_size=0
*.audit_file_dest='D:\oracle\admin\orclstandby\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='D:\oracle\oradata\orclstandby\control01.ctl','D:\oracle\recovery_area\orclstandby\control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_unique_name='orclstandby'
*.db_recovery_file_dest='D:\oracle\recovery_area'
*.db_recovery_file_dest_size=4102029312
*.diagnostic_dest='D:\oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_client='tnsorclstandby'
*.fal_server='tnsorcl'
*.log_archive_config='DG_CONFIG=(orcl,orclstandby)'
*.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'
*.memory_target=1287651328
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
6.2.3上述参数中部分路径手动创建
从库中根据从库INITorclstandby.ORA文件中涉及的如下路径手工创建目录:
D:\oracle\admin\orclstandby\adump
D:\oracle\oradata\orclstandby\
D:\oracle\recovery_area\orclstandby\
6.3从库-配置静态监听
配置前
# listener.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(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 = WIN16-ORADG-STD)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\oracle
配置后
# listener.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(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")
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(SID_NAME = orclstandby)
(ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\oracle
6.4配置db_home_1中的tnsnames.ora文件
配置前
# tnsnames.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
配置后
# tnsnames.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
tnsorcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
tnsorclstandby =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
如果从库中安装有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
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
D:\oracle\product\11.2.0\dbhome_1\BIN>oradim -new -sid orclstandby
实例已创建。
D:\oracle\product\11.2.0\dbhome_1\BIN>
执行之后打开“服务”查看,新增了一项OracleServiceoraclestandby的服务,手动右键将其修改为自动启动。
再次查看监听状态,监听有变化
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>lsnrctl status
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 21-11月-2022 10:47:07
Copyright (c) 1991, 2010, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
启动日期 21-11月-2022 09:28:48
正常运行时间 0 天 1 小时 18 分 35 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
监听程序日志文件 d:\oracle\diag\tnslsnr\WIN16-ORADG-STD\listener\alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN16-ORADG-STD)(PORT=1521)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个实例。
实例 "orclstandby (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
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
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 11:10:22 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> conn sys/orcl as sysdba;
ERROR:
ORA-12560: TNS: 协议适配器错误
SQL> conn sys/orcl as sysdba;
已连接到空闲例程。
SQL>
6.7从库使用pfile文件创建spfile文件
命令
create spfile from pfile;
执行命令改后
在目录【D:\oracle\product\11.2.0\dbhome_1\database】下自动生成文件SPFILEORCLSTANDBY.ORA
6.8从库测试sqlplus通过tnsname连接主库与从库
成功
D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl@orcl as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 14:22:05 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
已连接到空闲例程。
SQL> 已断开连接
D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl@tnsorcl as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 14:22:09 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> 从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl@tnsorclstandby as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 14:22:14 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
已连接到空闲例程。
SQL> 已断开连接
D:\oracle\product\11.2.0\dbhome_1\BIN>tnsping orcl
TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 21-11月-2022 14:22:20
Copyright (c) 1997, 2010, Oracle. All rights reserved.
已使用的参数文件:
D:\oracle\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))
OK (10 毫秒)
D:\oracle\product\11.2.0\dbhome_1\BIN>tnsping tnsorcl
TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 21-11月-2022 14:22:29
Copyright (c) 1997, 2010, Oracle. All rights reserved.
已使用的参数文件:
D:\oracle\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-PRI)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = orcl)))
OK (0 毫秒)
D:\oracle\product\11.2.0\dbhome_1\BIN>tnsping tnsorclstandby
TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 21-11月-2022 14:22:33
Copyright (c) 1997, 2010, Oracle. All rights reserved.
已使用的参数文件:
D:\oracle\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN16-ORADG-STD)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = orcl)))
OK (10 毫秒)
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记录如下
D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl as sysdba;
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 16:14:44 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> show parameter db_file_name_convert;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
D:\ORACLE\ORADATA\ORCL\USERS01.DBF
D:\ORACLE\ORADATA\ORCL\VAMS_DATA_0.DBF
SQL> alter system set db_file_name_convert='D:\oracle\oradata\orcl','D:\oracle\oradata\orclstandby' scope=spfile;
系统已更改。
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
D:\ORACLE\ORADATA\ORCL\REDO03.LOG
D:\ORACLE\ORADATA\ORCL\REDO02.LOG
D:\ORACLE\ORADATA\ORCL\REDO01.LOG
SQL> alter system set log_file_name_convert='D:\oracle\oradata\orcl','D:\oracle\oradata\orclstandby' scope=spfile;
系统已更改。
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 1286066176 bytes
Fixed Size 2175408 bytes
Variable Size 754978384 bytes
Database Buffers 520093696 bytes
Redo Buffers 8818688 bytes
SQL> show parameter db_file_name_convert;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
db_file_name_convert string
D:\oracle\oradata\orcl, D:\ora
cle\oradata\orclstandby
SQL> show parameter log_file_name_convert;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
log_file_name_convert string
D:\oracle\oradata\orcl, D:\ora
cle\oradata\orclstandby
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方式启动。
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
D:\oracle\product\11.2.0\dbhome_1\BIN>rman target sys/orcl@tnsorcl auxiliary sys/orcl@tnsorclstandby
恢复管理器: Release 11.2.0.1.0 - Production on 星期一 11月 21 15:00:11 2022
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到目标数据库: ORCL (DBID=1629940155)
已连接到辅助数据库 (未启动)
RMAN> duplicate target database for standby from active database nofilenamecheck;
启动 Duplicate Db 于 21-11月-22
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
RMAN>
^C
D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl as sysdba;
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 15:16:41 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
已连接到空闲例程。
SQL> shutdown immediate
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 1286066176 bytes
Fixed Size 2175408 bytes
Variable Size 754978384 bytes
Database Buffers 520093696 bytes
Redo Buffers 8818688 bytes
SQL>
成功操作记录
D:\oracle\product\11.2.0\dbhome_1\BIN>rman target sys/orcl@tnsorcl auxiliary sys/orcl@tnsorclstandby
恢复管理器: Release 11.2.0.1.0 - Production on 星期一 11月 21 16:31:39 2022
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到目标数据库: ORCL (DBID=1629940155)
已连接到辅助数据库: ORCL (未装载)
RMAN> duplicate target database for standby from active database nofilenamecheck;
启动 Duplicate Db 于 21-11月-22
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: SID=63 设备类型=DISK
内存脚本的内容:
{
backup as copy reuse
targetfile 'D:\oracle\product\11.2.0\dbhome_1\DATABASE\PWDorcl.ORA' auxiliary format
'D:\oracle\product\11.2.0\dbhome_1\DATABASE\PWDorclstandby.ORA' ;
}
正在执行内存脚本
启动 backup 于 21-11月-22
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=198 设备类型=DISK
完成 backup 于 21-11月-22
内存脚本的内容:
{
backup as copy current controlfile for standby auxiliary format 'D:\ORACLE\ORADATA\ORCLSTANDBY\CONTROL01.CTL';
restore clone controlfile to 'D:\ORACLE\RECOVERY_AREA\ORCLSTANDBY\CONTROL02.CTL' from
'D:\ORACLE\ORADATA\ORCLSTANDBY\CONTROL01.CTL';
}
正在执行内存脚本
启动 backup 于 21-11月-22
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动数据文件副本
复制备用控制文件
输出文件名=D:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\SNCFORCL.ORA 标记=TAG20221121T163146 RECID=8 STAMP=1121358707
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:03
完成 backup 于 21-11月-22
启动 restore 于 21-11月-22
使用通道 ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: 已复制控制文件副本
完成 restore 于 21-11月-22
内存脚本的内容:
{
sql clone 'alter database mount standby database';
}
正在执行内存脚本
sql 语句: alter database mount standby database
内存脚本的内容:
{
set newname for tempfile 1 to
"D:\ORACLE\ORADATA\ORCLSTANDBY\TEMP01.DBF";
set newname for tempfile 2 to
"D:\ORACLE\ORADATA\ORCLSTANDBY\VAMS_TEMP_0.DBF";
switch clone tempfile all;
set newname for datafile 1 to
"D:\ORACLE\ORADATA\ORCLSTANDBY\SYSTEM01.DBF";
set newname for datafile 2 to
"D:\ORACLE\ORADATA\ORCLSTANDBY\SYSAUX01.DBF";
set newname for datafile 3 to
"D:\ORACLE\ORADATA\ORCLSTANDBY\UNDOTBS01.DBF";
set newname for datafile 4 to
"D:\ORACLE\ORADATA\ORCLSTANDBY\USERS01.DBF";
set newname for datafile 5 to
"D:\ORACLE\ORADATA\ORCLSTANDBY\VAMS_DATA_0.DBF";
backup as copy reuse
datafile 1 auxiliary format
"D:\ORACLE\ORADATA\ORCLSTANDBY\SYSTEM01.DBF" datafile
2 auxiliary format
"D:\ORACLE\ORADATA\ORCLSTANDBY\SYSAUX01.DBF" datafile
3 auxiliary format
"D:\ORACLE\ORADATA\ORCLSTANDBY\UNDOTBS01.DBF" datafile
4 auxiliary format
"D:\ORACLE\ORADATA\ORCLSTANDBY\USERS01.DBF" datafile
5 auxiliary format
"D:\ORACLE\ORADATA\ORCLSTANDBY\VAMS_DATA_0.DBF" ;
sql 'alter system archive log current';
}
正在执行内存脚本
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
临时文件 1 在控制文件中已重命名为 D:\ORACLE\ORADATA\ORCLSTANDBY\TEMP01.DBF
临时文件 2 在控制文件中已重命名为 D:\ORACLE\ORADATA\ORCLSTANDBY\VAMS_TEMP_0.DBF
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 backup 于 21-11月-22
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00001 名称=D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
输出文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\SYSTEM01.DBF 标记=TAG20221121T163201
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:01:16
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00005 名称=D:\ORACLE\ORADATA\ORCL\VAMS_DATA_0.DBF
输出文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\VAMS_DATA_0.DBF 标记=TAG20221121T163201
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:35
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00002 名称=D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
输出文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\SYSAUX01.DBF 标记=TAG20221121T163201
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:55
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00003 名称=D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
输出文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\UNDOTBS01.DBF 标记=TAG20221121T163201
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:15
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00004 名称=D:\ORACLE\ORADATA\ORCL\USERS01.DBF
输出文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\USERS01.DBF 标记=TAG20221121T163201
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01
完成 backup 于 21-11月-22
sql 语句: alter system archive log current
内存脚本的内容:
{
switch clone datafile all;
}
正在执行内存脚本
数据文件 1 已转换成数据文件副本
输入数据文件副本 RECID=8 STAMP=1121358906 文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\SYSTEM01.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 RECID=9 STAMP=1121358907 文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\SYSAUX01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 RECID=10 STAMP=1121358907 文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\UNDOTBS01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 RECID=11 STAMP=1121358907 文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\USERS01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 RECID=12 STAMP=1121358907 文件名=D:\ORACLE\ORADATA\ORCLSTANDBY\VAMS_DATA_0.DBF
完成 Duplicate Db 于 21-11月-22
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日志组
添加前
SQL*Plus: Release 11.2.0.1.0 Production on 星期二 11月 22 08:46:03 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
请输入用户名: / as sysdba
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 D:\oracle\product\11.2.0\dbhome_1\archivelog
最早的联机日志序列 44
下一个存档日志序列 46
当前日志序列 46
SQL> show parameter log_archive_format;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_format string ARC%S_%R.%T
SQL> show parameter DB_RECOVERY_FILE_DEST;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string D:\oracle\recovery_area
db_recovery_file_dest_size big integer 3912M
SQL> select name,log_mode from v$database;
NAME LOG_MODE
--------- ------------
ORCL ARCHIVELOG
SQL> select * from v$option where parameter='Oracle Data Guard';
PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
Oracle Data Guard
TRUE
SQL> select name,force_logging from v$database;
NAME FOR
--------- ---
ORCL YES
SQL> select group#,bytes/1024/1024 as Mb from v$log;
GROUP# MB
---------- ----------
1 50
2 50
3 50
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;
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期二 11月 22 09:22:49 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> alter database add standby logfile group 11 'D:\oracle\oradata\orcl\standbyredo11.log' size 50M;
数据库已更改。
SQL> alter database add standby logfile group 12 'D:\oracle\oradata\orcl\standbyredo12.log' size 50M;
数据库已更改。
SQL> alter database add standby logfile group 13 'D:\oracle\oradata\orcl\standbyredo13.log' size 50M;
数据库已更改。
SQL> alter database add standby logfile group 14 'D:\oracle\oradata\orcl\standbyredo14.log' size 50M;
数据库已更改。
SQL>
8.2从库添加standby日志组
用命令shutdown immediate关闭数据库
然后用startup重启数据库
四个命令如下
操作完成后自动生成standbyredo四个log文件
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期二 11月 22 09:37:23 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
已连接到空闲例程。
SQL> select group#,bytes/1024/1024 as Mb from v$log;
select group#,bytes/1024/1024 as Mb from v$log
*
第 1 行出现错误:
ORA-01034: ORACLE not available
进程 ID: 0
会话 ID: 0 序列号: 0
SQL> alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' siez 50M;
alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' siez 50M
*
第 1 行出现错误:
ORA-01034: ORACLE not available
进程 ID: 0
会话 ID: 0 序列号: 0
SQL> shutdown immediate
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 1286066176 bytes
Fixed Size 2175408 bytes
Variable Size 754978384 bytes
Database Buffers 520093696 bytes
Redo Buffers 8818688 bytes
SQL> select group#,bytes/1024/1024 as Mb from v$log;
select group#,bytes/1024/1024 as Mb from v$log
*
第 1 行出现错误:
ORA-01507: ??????
SQL> alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' siez 50M;
alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' siez 50M
*
第 1 行出现错误:
ORA-00933: SQL ???????
SQL> alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' size 50M;
alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' size 50M
*
第 1 行出现错误:
ORA-01507: ??????
SQL> shutdown immediate
ORA-01507: ??????
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1286066176 bytes
Fixed Size 2175408 bytes
Variable Size 754978384 bytes
Database Buffers 520093696 bytes
Redo Buffers 8818688 bytes
数据库装载完毕。
数据库已经打开。
SQL> select group#,bytes/1024/1024 as Mb from v$log;
GROUP# MB
---------- ----------
1 50
2 50
3 50
SQL> alter database add standby logfile group 11 'D:\oracle\oradata\orclstandby\standbyredo11.log' size 50M;
数据库已更改。
SQL> alter database add standby logfile group 12 'D:\oracle\oradata\orclstandby\standbyredo12.log' size 50M;
数据库已更改。
SQL> alter database add standby logfile group 13 'D:\oracle\oradata\orclstandby\standbyredo13.log' size 50M;
数据库已更改。
SQL> alter database add standby logfile group 14 'D:\oracle\oradata\orclstandby\standbyredo14.log' size 50M;
数据库已更改。
SQL>
9备库-启用日志同步
D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl as sysdba;
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 16:56:28 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> alter database recover managed standby database disconnect from session;
数据库已更改。
SQL> recover managed standby database cancel;
完成介质恢复。
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 1286066176 bytes
Fixed Size 2175408 bytes
Variable Size 754978384 bytes
Database Buffers 520093696 bytes
Redo Buffers 8818688 bytes
SQL> alter database mount standby database;
数据库已更改。
SQL> alter database open read only;
数据库已更改。
SQL> alter database recover managed standby database using current logfile disconnect from session;
alter database recover managed standby database using current logfile disconnect from session
*
第 1 行出现错误:
ORA-38500: USING CURRENT LOGFILE option not available without standby redo logs
SQL> alter database recover managed standby database disconnect from session;
数据库已更改。
SQL>
上述命令设置同步后,只有在切换日志时才同步,不会自动同步。
自动同步要点,两条指令
第一条
从库:alter database recover managed standby database disconnect from session;
执行后确保将从库OPEN_MODE状态改为READ ONLY WITH APPLY
第二条
从库:alter database recover managed standby database using current logfile disconnect;
从库cmd操作如下
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
SQL> alter database recover managed standby database using current logfile disconnect;
alter database recover managed standby database using current logfile disconnect
*
第 1 行出现错误:
ORA-01153: 激活了不兼容的介质恢复
SQL> alter database recover managed standby database cancel;
数据库已更改。
SQL> alter database recover managed standby database using current logfile disconnect;
数据库已更改。
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
SQL>
10.DataGuard状态查看
10.1主库状态查看
命令
select open_mode,database_role,protection_mode,protection_level from v$database;
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 17:22:49 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
请输入用户名: sys as sysdba
输入口令:
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select open_mode,database_role,protection_mode,protection_level from v$database;
OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
-------------------- ---------------- -------------------- --------------------
READ WRITE PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
SQL>
10.2从库状态查看
命令
select open_mode,database_role,protection_mode,protection_level from v$database;
D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus sys/orcl as sysdba;
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 17:20:40 2022
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select open_mode,database_role,protection_mode,protection_level from v$database;
OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
-------------------- ---------------- -------------------- --------------------
READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
SQL>
11测试Dataguard主库写,然后从库读
主库操作
SQL> create table testdg03(id number,name varchar2(50));
表已创建。
SQL> insert into testdg03 values(1,'wdh-2022-11-22 14:43');
已创建 1 行。
SQL> commit;
提交完成。
SQL>
从库查询,ok
SQL> select * from testdg03;
ID NAME
---------- --------------------------------------------------
1 wdh-2022-11-22 14:43
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博客