- 由 虚拟的现实创建于10月 12, 2023 需要 6 分钟阅读时间
1、目的
实现Oracle数据库双机高可用,降低单点故障数据丢失风险。
2、适用范围
信息部维护人员/门店维护员。
3、责任人员
网络管理员/网络工程师
4、说明
配置两台数据库服务器,使用Oracle DATAGUARD技术做主备库。
5、详细操作指南
5.1、DataGuard简介
灾难恢复能力目标
- 恢复时间目标(RTO):数分钟
- 恢复点目标(RPO):0到15分钟
- Oracle高可用技术
RMAN备份(必需部署),数据库物理备份。
RMAN是ORACLE提供的恢复和备份工具,是随Oracle服务器软件一同安装的工具软件,它可以用来备份和恢复数据库文件、归档日志和控制文件,用来执行完全或不完全的数据库恢复。
与传统工具相比,RMAN具有独特的优势:跳过未使用的数据块。当备份一个RMAN备份集时,RMAN不会备份从未被写入的数据块,而传统的方式无法获知那些是未被使用的数据块。RMAN使用Oracle特有的二进制压缩模式,与传统备份的压缩方式相比,能够最大程度地压缩数据块中的一些典型数据。
Data Guard备库(强烈建议部署),Data Guard是Oracle公司提出的数据库容灾技术,它提供了一种管理、监测和自动运行的体系结构,用于创建和维护一个或多个备份数据库。通过传输和运行数据库日志文件,来保持生产和备份数据库的数据一致性。
一旦数据库因某种情况而不可用时,备份数据库将正常切换或故障切换为新的生产数据库,以达到无数据损失或最小化数据损失的目的,为业务系统提供持续的数据服务能力。
dataguard优势:
- 原理:复制归档日志或在线日志
- 稳定性极高,备库redo apply性能优秀
- 维护简单,极少出现问题
- 自动坏块修复
- 备库可以只读状态打开,提供查询和报表功能
- 复制方式:通过恢复机制实现秒级复制,可以实现同步复制或异步复制
- 资源占用:复制通过数据库的LGWR进程完成,仅占用数据库少量资源
- 企业版内的免费功能
Data Guard与远程磁盘镜像技术相比优势如下
Data Guard | 远程磁盘镜像技术 | |
容灾能力 | 有 | 有 |
网络传输量 | 少 | 多 |
自动坏块修复 | 有 | 没有 |
备份数据库可以提供查询和报表功能 | 有 | 没有 |
传输无关性 | 是 | 与硬件相关 |
容灾环境的集中安装、管理 | 有 | 没有 |
简洁的failover/switchover功能 | 有 | 没有 |
在一些情况下,业务不允许丢失数据。在另外一些情况下,数据库的可用性比丢失数据更为重要。一些应用需要最强的数据库性能并且能容忍丢失少量的数据。下面的描述概述了三种不同的数据保护模式。
最大保护模式 – 这种保护模式确保如果主数据库故障不会发生数据丢失。要提供这种级别的保护,恢复每个事务所需的重做数据必须在事务提交之前同时写到本地联机重做日志和至少一个备数据库上的备重做日志。要确保不发生数据丢失,如果故障导致主数据库无法写重做流到至少一个事务一致性备数据库的备重做日志时,主数据库会关闭。
最大可用性模式 – 这种保护模式提供了可能的最高级别的数据保护,而不用与主数据库的可用性相折衷。与最大保护模式相同,在恢复事务所需的重做写到本地联机重做日志和至少一个事务一致性备数据库上的备重做日志之前,事务将不会提交。
与最大保护模式不同的是,如果故障导致主数据库无法写重做流到异地备重做日志时,主数据库不会关闭。替代地,主数据库以最大性能模式运行直到故障消除,并且解决所有重做日志文件中的中断。当所有中断解决之后,主数据库自动继续以最大可用性模式运行。
这种模式确保如果主数据库故障,但是只有当第二次故障没有阻止完整的重做数据集从主数据库发送到至少一个备数据库时,不发生数据丢失。
最大性能模式 – 这种保护模式(默认)提供了可能的最高级别的数据保护,而不影响主数据库的性能。这是通过允许事务在恢复该事务所需重做数据在写到本地联机重做日志后立即提交而实现的。
主数据库的重做数据流也写到至少一个备数据库,但是那个重做流相对于创建重做数据的事务是异步写的。
当所用的网络连接有足够的带宽,这种模式提供了近似于最大可用性模式的数据保护级别,并且对主数据库性能的影响最小。
最大保护和最大可用性模式需要备重做日志文件配置在配置中的至少一个备数据库上。所有三种保护模式需要在LOG_ARCHIVE_DEST_n 初始化参数上指定特定的日志传输属性以发送重做数据到至少一个备数据库。查看5.6 节以获得数据保护模式的完整信息。
5.2、DataGuard参考资料
http://www.open-open.com/doc/view/e796dffc2b0146dfbd78686b7ce1fdcb
+http://blog.csdn.net/robbie1314520/article/details/8267283+
Oracle企业版和标准版有什么区别:
select * from v$version;
select * from product_component_version;
查看版本功能select * from v$option;
标准版不支持DataGuard
检查是否支持DataGuard
select * from v$option where parameter = 'Managed Standby';
5.3、安全补丁更新
上传补丁包到tmp目录
unzip /tmp/p6880880_112000_Linux-x86-64_OPatch-tools.zip unzip /tmp/p24006111_112040_Linux-x86-64(11.2.0.4.161018)spx.zip mv /tmp/24006111/ /tmp/OPatch/ cp -r /tmp/OPatch/ $ORACLE_HOME/ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
验证安装/opt/oracle/product/11.2/db_1/OPatch/opatch lsinv
5.4、主库增加一个VIP
主库:在主库上多配置一个虚拟IP,主要防止故障转移时,可以将此IP直接转移到备库上,而客户端应用不用变
[root@dg1 ~]# cd /etc/sysconfig/network-scripts/ [root@dg1 network-scripts]# cp ifcfg-ens160 ifcfg-ens160:1 vi /etc/sysconfig/network-scripts/ifcfg-ens160:1 [root@dg1 network-scripts]# systemctl restart network
备库:
配置主库处于归档模式
sqlplus / as sysdba
开启数据库logging和archivelog mode
SQL>alter database force logging; SQL> select log_mode from v$database; SQL> archive log list
shutdown immediate; startup mount alter database archivelog;
将数据设置为自动归档使用下列命令:
alter system set log_archive_start=true scope=spfile; archive log list; alter database open;
配置主库文件:
vim /opt/oracle/product/11.2/db_1/network/admin/listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521)) ) ) ADR_BASE_LISTENER = /opt/oracle SID_LIST_LISTENER2 = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /opt/oracle/product/11.2/db_1) (SID_NAME = orcl) ) ) LISTENER2 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522)) (ADDRESS = (PROTOCOL = TCP)(HOST = dgvip)(PORT = 1522)) ) ) ADR_BASE_LISTENER2 = /opt/oracle vim /opt/oracle/product/11.2/db_1/network/admin/tnsnames.ora orcl= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) orcldg2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dg2)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) orclvip = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dgvip)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
配置备库文件
vim /opt/oracle/product/11.2/db_1/network/admin/listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /opt/oracle/product/11.2/db_1) (SID_NAME = orcl) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = dg2)(PORT = 1521)) ) ADR_BASE_LISTENER = /opt/oracle vim /opt/oracle/product/11.2/db_1/network/admin/tnsnames.ora orcldg1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) orcldg2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dg2)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
创建主库pfile
sqlplus / as sysdba SQL> create pfile from spfile; SQL> shutdown immediate
修改主库pfile
vim /opt/oracle/product/11.2/db_1/dbs/initorcl.ora
增加以下字符
*.db_unique_name=orcldg1 *.log_archive_config='dg_config=(orcl,orcldg2)' *.fal_server=orcl *.fal_client=orcldg1 *.log_archive_dest_2='service=orcldg2 lgwr sync affirm NET_TIMEOUT=120 valid_for=(online_logfiles,primary_role) db_unique_name=orcldg2' *.LOG_ARCHIVE_DEST_STATE_1=ENABLE *.LOG_ARCHIVE_DEST_STATE_2=ENABLE *.STANDBY_FILE_MANAGEMENT=AUTO
创建备库pfile
使用scp命令将主库的pfile拷贝到备库所在服务器相同目录下,并修改如下参数:
scp -r $ORACLE_HOME/dbs/initorcl.ora oracle@192.168.0.238:$ORACLE_HOME/dbs/initorcl.ora vim /opt/oracle/product/11.2/db_1/dbs/initorcl.ora
*.db_unique_name=orcldg2 *.log_archive_config='dg_config=(orcldg,orcldg2)' *.fal_server=orcl *.fal_client=orcldg2 *.log_archive_dest_2='service=orcldg1 lgwr sync affirm NET_TIMEOUT=120 valid_for=(online_logfiles,primary_role) db_unique_name=orcldg1' *.LOG_ARCHIVE_DEST_STATE_1=ENABLE *.LOG_ARCHIVE_DEST_STATE_2=ENABLE *.STANDBY_FILE_MANAGEMENT=AUTO
登录备库
SQL> shutdown immediate
以pfile创建spfile并启动数据库到nomount:
SQL>startup nomount pfile= '/opt/oracle/product/11.2/db_1/dbs/initorcl.ora' create spfile from pfile; SQL> startup nomount pfile= '/opt/oracle/product/11.2/db_1/dbs/initorcl.ora' ORA-32006: LOG_ARCHIVE_START initialization parameter has been deprecated
检测主备库的网络连通性
主库:
[oracle@dg1 ~]$ sqlplus / as sysdba conn sys/www.myj123.com@orcldg1 as sysdba conn sys/www.myj123.com@orcldg2 as sysdba
Connected.
备库:
[oracle@dg2 ~]$ sqlplus / as sysdba conn sys/www.myj123.com@orcldg2 as sysdba conn sys/www.myj123.com@orcldg1 as sysdba
配置主库为最大可用模式
SQL> shutdown immediate SQL> startup mount SQL> select database_role,protection_mode from v$database; SQL> alter database set standby database to maximize availability;
扩展知识:
修改为availability(最大可用) 到performance(最大性能)模式命令
alter database set standby database to maximize performance;
在主库和备库创建备份目录
mkdir -p /recovery_area/orcl/backup chown -R oracle.oinstall /recovery_area/orcl/backup chmod -R 775 /recovery_area/orcl/backup/
5.5、使用rman备份主库数据库
[oracle@dg1 dbs]$ rman target /
备份当前控制文件:
RMAN>backup format '/recovery_area/orcl/backup/controlfile_%U' current controlfile for standby;
备份数据文件和归档日志文件:
RMAN>backup format '/recovery_area/orcl/backup/db_%U' database plus archivelog;
把备份集拷贝到和备库/recovery_area/orcl/backup/下(与主库目录路径一致):
scp -r /recovery_area/orcl/backup/* oracle@192.168.0.238:/recovery_area/orcl/backup/
5.6、在备库上还原主库的数据库
[oracle@dg2 ~]$ sqlplus / as sysdba SQL> shutdown immediate SQL> startup nomount
使用rman的rman duplicate创建备用数据库:
rman target sys/www.myj123.com@orcldg1 auxiliary / RMAN>duplicate target database for standby nofilenamecheck;
备用数据库完成之后,数据库会自动开启到mount模式
[oracle@dg2 ~]$ sqlplus / as sysdba SQL>select status from v$instance;
SQL>alter database recover managed standby database disconnect from session;
或
SQL>alter database recover managed standby database using current logfile disconnect from session;
检查是否有错误信息出现:
SQL>select error from v$archive_dest where target='STANDBY';
5.7、检查备库日志应用情况
SQL> select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;
如果不是处于maximum availability高可用模式,就关闭主库重启到mount,修改为高可用模式:
SQL>shutdown immediate; SQL>alter database mount; SQL>alter database set standby database to maximize availability; (alter database set standby database to maximize {protection | availability | performance } ) SQL>select protection_mode,protection_level from v$database;
SQL>alter database open;
主库上操作,只需修改主库,会自动应用同步到备库。
为主备库分别创建standby日志文件(至少比redo log多一组):
取消备库日志应用再执行以下:
SQL>alter database recover managed standby database cancel;
主库:startup mount
alter database add standby logfile '/oradata/orcl/stdredo01.log' size 50m; alter database add standby logfile '/oradata/orcl/stdredo02.log' size 50m; alter database add standby logfile '/oradata/orcl/stdredo03.log' size 50m; alter database add standby logfile '/oradata/orcl/stdredo04.log' size 50m; select group#,status,member from v$logfile;
备库: startup mount
alter database add standby logfile '/oradata/orcl/stdredo01.log' size 50m; alter database add standby logfile '/oradata/orcl/stdredo02.log' size 50m; alter database add standby logfile '/oradata/orcl/stdredo03.log' size 50m; alter database add standby logfile '/oradata/orcl/stdredo04.log' size 50m; select group#,status,member from v$logfile;
--在备库中确定相关进程是否全部启动:
SQL> select process,status from v$managed_standby;
5.8、测试主备库模式变化
(默认情况下:主库和备库均为startup状态)
SQL> select status from v$instance;
将备库shutdown后,主库的PROTECTION_LEVEL将变为RESYNCHRONIZATION
SQL> select protection_mode,protection_level from v$database;
再启动备库,稍等二分钟,可发现又变回了AVAILABILITY状态
SQL> archive log list;
5.9、验证配置
--同步验证:在主库创建一个datatest表空间,然后在备库上验证是否有同步过来
--查看备库是否存在日志断点:
SQL> select * from v$archive_gap;
主库:
备库:
主库:创建一个toptest表空间
CREATE TABLESPACE toptest DATAFILE '/oradata/orcl/toptest.dbf ' SIZE 512M AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED BLOCKSIZE 8k; SQL> select name from v$datafile;
备库上查看当前日志:在主库上创建的表空间,在备库上也出现了
SQL> select name from v$datafile;
5.10、脱离dataguard环境(去掉备库)
在主库上操作
alter database set standby to maximize performance; alter database open;
- 无标签
添加评论