百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

DataGuard搭建及踩坑记录(dataguard failover)

mhr18 2024-10-19 05:59 29 浏览 0 评论

一、 Dataguard搭建

Dataguard的主要信息



(一) DataGuard准备工作:

1. 主库数据库安装:

2. 备库数据库安装:

只安装数据库软件,不创建数据库


(二) 主库配置

1. 主库启用归档

1) 查看及修改数据库归档模式

使用sys以sysdba方式登录数据库(以下均是以这种方式登录数据库)

archive log list

2) 设置数据库归档模式

如果不是归档模式,需要将数据库设置为归档模式,如下:

A. 关闭数据库

shutdown immediate;

B. 启动数据库到mount状态

startup mount;

C. 设置归档模式

alter database archivelog;

从主库拷贝相关文件到备库

2. 强制产生日志

alter database force logging;

3. 创建密码文件,供备库使用

查看xxx:\oracle\product\11.2.0\dbhome_1\database\PWDorcl.ora 文件是否存在,如果存在,不需要再次创建,如果没有,以系统管理员方式运行cmd,其中输入:

orapwd file=xxx:\oracle\product\11.2.0\dbhome_1\database\PWDorcl.ora password=sys entries=10

目录根据oracle安装的实际情况修改

数据库SID为orcl所以,文件名为PWDorcl.ora,根据实际情况修改。

4. 主库添加备用联机日志

alter database add standby logfile 'xxx:\oracle\oradata\orcl\redo01_dg.log' size 50m;
alter database add standby logfile 'xxx:\oracle\oradata\orcl\redo02_dg.log' size 50m;
alter database add standby logfile 'xxx:\oracle\oradata\orcl\redo03_dg.log' size 50m;

文件大小跟原日志大小一致

添加数量跟原文件数量一样,默认是3个,这里也添加三个


5. 修改pfile参数,添加dataguard相关参数

导出pfile

create pfile='xxx:\oracle\pfile.ora' from spfile;

在xxx:\oracle目录下会生成pfile.ora文件,用文本编辑器打开,并添加相关参数,红色部分为添加的内容。

orcl.__db_cache_size=339738624

orcl.__java_pool_size=4194304

orcl.__large_pool_size=4194304

orcl.__oracle_base='xxx:\oracle'#ORACLE_BASE set from environment

orcl.__pga_aggregate_target=335544320

orcl.__sga_target=503316480

orcl.__shared_io_pool_size=0

orcl.__shared_pool_size=146800640

orcl.__streams_pool_size=0

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

*.audit_trail='db'

*.compatible='11.2.0.0.0'

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

*.db_block_size=8192

*.db_domain=''

*.db_name='orcl'

*.db_recovery_file_dest='xxx:\oracle\flash_recovery_area'

*.db_recovery_file_dest_size=4039114752

*.diagnostic_dest='xxx:\oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.memory_target=838860800

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

*.db_unique_name='dbwrite'

*.fal_client='dbwrite'

*.fal_server='dbread'

*.log_archive_config='DG_CONFIG=(dbwrite,dbread)'

*.log_archive_dest_1='LOCATION=D:\oracle\flash_recovery_area\orcl\ARCHIVELOG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dbwrite'

*.log_archive_dest_2='SERVICE=dbread LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dbread'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

*.standby_file_management='AUTO'
  • *.db_unique_name='dbwrite' #数据库的unique_name为dbwrite
  • *.fal_client='dbwrite' 当需要主从切换时,dbwrite设为备库,这个值对应ora的设置
  • *.fal_server='dbread' 当需要主从切换时,dbread设为主库,这个值对应ora的设置
  • *.log_archive_config='DG_CONFIG=(dbwrite,dbread)'定义DG中所有有效的DB_UNIQUE_NAME名字的列表,主从的设置相同
  • *.log_archive_dest_1='LOCATION=xx:\oracle\flash_recovery_area\orcl\ARCHIVELOG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dbwrite'归档日志的存放位置,LOCATION为存放在本地,LGWR意为之传输redo日志,VALID_FOR=(ALL_LOGFILES,ALL_ROLES)定义所有类型的日志文件和不论主库备库角色一律传递归档到此目录
  • *.log_archive_dest_2='SERVICE=dbread LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dbread'第2个归档日志存放的位置,SERIVCE是用于指定备用数据库的TNSNAMES描述符
  • *.log_archive_dest_state_1='ENABLE'
  • *.log_archive_dest_state_2='ENABLE'
  • *.standby_file_management='AUTO'该参数只在当前库为备库时生效,提前设置以便需要进行主备角色切换时使用。建议将其值设置为AUTO


6. 以修改完的pfile重新启动数据库

关闭数据库

shutdown immediate;

使用修改完的pfile启动数据库到nomount状态

startup pfile='xxx:\oracle\pfile.ora' nomount;

创建spfile

create spfile from pfile='xxx:\oracle\pfile.ora';

创建pfile

create pfile from spfile;

7. 建立备库用的控制文件

启动数据到到mount状态

alter database mount;

简历备库用的控制文件

alter database create standby controlfile as 'xxx:\oracle\standby_ctl01.ctl';

8. 关闭主库

为拷贝文件做准备

shutdown immediate;

9. 修改listener.ora和tnsnames.ora

修改listener.ora,添加

红色部分为新增加的内容

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = xxx:\oracle\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:xxx:\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = xxx:\oracle\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = xxx:\oracle\product\11.2.0\dbhome_1)
(SID_NAME = orcl)
)
)

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

ADR_BASE_LISTENER = xxx:\oracle

修改tnsnames.ora,如下:

# tnsnames.ora Network Configuration File: xxx:\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)
)
)

DBREAD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.108)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)


DBWRITE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.116)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.116)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

红色部分为新增加的内容


(三) 备库配置

因为备库只安装了软件,所以数据库所需要的相关文件没有,需要手工创建

1. 创建备库需要的文件夹

mkdir xxx:\oracle\admin\orcl 
mkdir xxx:\oracle\admin\orcl\adump 
mkdir xxx:\oracle\admin\orcl\bdump
mkdir xxx:\oracle\admin\orcl\cdump
mkdir xxx:\oracle\admin\orcl\dpdump 
mkdir xxx:\oracle\admin\orcl\pfile 
mkdir xxx:\oracle\admin\orcl\udump 
mkdir xxx:\oracle\diag\rdbms

mkdir xxx:\oracle\diag\tnslsnr

mkdir xxx:\oracle\flash_recovery_area\orcl

mkdir xxx:\oracle\flash_recovery_area\ARCHIVELOG\

mkdir xxx:\oracle\oradata\orcl

2. 从主库拷贝相关文件到备库

拷贝xxx:\oracle\oradata\orcl目录下除了控制文件外,其他所有文件到备库相同目录中

拷贝备份的控制文件到xxx:\oracle\oradata\orcl下,重命名为CONTROL01.CTL

拷贝到xxx:\oracle\flash_recovery_area\orcl目录下,重命名为CONTROL02.CTL

拷贝密码文件PWDorcl.ora,到备库的xxx:\oracle\product\11.2.0\dbhome_1\database\目录下。

拷贝pfile文件到备库的xxx:\oracle目录下


3. 修改pfile文件

orcl.__db_cache_size=339738624
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='xxx:\oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=335544320
orcl.__sga_target=503316480
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=146800640
orcl.__streams_pool_size=0
*.audit_file_dest='xxx:\oracle\admin\orcl\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='xxx:\oracle\oradata\orcl\control01.ctl','xxx:\oracle\flash_recovery_area\orcl\control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='xxx:\oracle\flash_recovery_area'
*.db_recovery_file_dest_size=4039114752
*.diagnostic_dest='xxx:\oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.memory_target=838860800
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
*.db_unique_name='dbread'
*.fal_client='dbread'
*.fal_server='dbwrite'
*.log_archive_config='DG_CONFIG=(dbwrite,dbread)'
*.log_archive_dest_1='LOCATION=xxx:\oracle\flash_recovery_area LGWR VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dbread'
*.log_archive_dest_2='SERVICE=dbwrite LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dbwrite'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.standby_file_management='AUTO'

内容与主库类似

红色部分与主库有区别

4. 修改listener.ora和tnsnames.ora

同主库,略,如果没有这两个文件,可以从主库拷贝。

5. 修改sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES= (NONE)

6. 设置ORACLE_SID和ORACLE_UNQNAME环境变量

ORACLE_SID为orcl

ORACLE_UNQNAME为dbread

7. 创建实例

以系统管理员身份运行cmd

oradim –new –sid orcl

8. 以pfile启动数据库

sqlplus/nolog

以sys用户sysdba身份连接到数据库

connect sys/sys as sysdba

startup pfile='xxx:\oracle\pfile.ora' nomount

创建spfile

create spfile from pfile='xxx:\oracle\pfile.ora';

创建pfile

create pfile from spfile;


(四) 启动DataGuard

1. 备库启动

关闭备库

shutdown immediate;

启动到nomount

startup nomount;

手动恢复状态

alter database mount standby database;


备库调整为“READ ONLY”状态

alter database open read only;


在“READ ONLY”状态下进一步启动备库的恢复

alter database recover managed standby database using current logfile disconnect;

确认下备库的状态

select open_mode from v$database

确认是 READ ONLY WITH APPLY

2. 主库启动

正常启动即可


(五) DATAGUARD的关闭

1. 关闭主库

Sys用户sysdba身份登录后,正常关闭主库

shutdown immediate;

2. 关闭备库(如果需要)

Sys用户sysdba身份登录后,

停止同步

alter database recover managed standby database cancel;

关闭数据库

shutdown immediate

相关推荐

【预警通报】关于WebLogic存在远程代码执行高危漏洞的预警通报

近日,Oracle官方发布了2021年1月关键补丁更新公告CPU(CriticalPatchUpdate),共修复了包括CVE-2021-2109(WeblogicServer远程代码执行漏洞)...

医院信息系统突发应急演练记录(医院信息化应急演练)

信息系统突发事件应急预案演练记录演练内容信息系统突发事件应急预案演练参与人员信息科参与科室:全院各部门日期xxxx-xx-xx时间20:00至24:00地点信息科记录:xxx1、...

一文掌握怎么利用Shell+Python实现完美版的多数据源备份程序

简介:在当今数字化时代,无论是企业还是个人,数据的安全性和业务的连续性都是至关重要的。数据一旦丢失,可能会造成无法估量的损失。因此,如何有效地对分布在不同位置的数据进行备份,尤其是异地备份,成为了一个...

docker搭建系统环境(docker搭建centos)

Docker安装(CentOS7)1.卸载旧版Docker#检查已安装版本yumlistinstalled|grepdocker#卸载旧版本yumremove-ydocker.x...

基础篇:数据库 SQL 入门教程(sql数据库入门书籍推荐)

SQL介绍什么是SQLSQL指结构化查询语言,是用于访问和处理数据库的标准的计算机语言。它使我们有能力访问数据库,可与多种数据库程序协同工作,如MSAccess、DB2、Informix、M...

Java21杀手级新特性!3行代码性能翻倍

导语某券商系统用这招,交易延迟从12ms降到0.8ms!本文揭秘Oracle官方未公开的Record模式匹配+虚拟线程深度优化+向量API神操作,代码量直降70%!一、Record模式匹配(代码量↓8...

一文读懂JDK21的虚拟线程(java虚拟线程)

概述JDK21已于2023年9月19日发布,作为Oracle标准Java实现的一个LTS版本发布,发布了15想新特性,其中虚拟线程呼声较高。虚拟线程是JDK21中引入的一项重要特性,它是一种轻量级的...

效率!MacOS下超级好用的Linux虚拟工具:Lima

对于MacOS用户来说,搭建Linux虚拟环境一直是件让人头疼的事。无论是VirtualBox还是商业的VMware,都显得过于笨重且配置复杂。今天,我们要介绍一个轻巧方便的纯命令行Linux虚拟工具...

所谓SaaS(所谓三维目标一般都应包括)

2010年前后,一个科技媒体的主编写一些关于云计算的概念性问题,就可以作为头版头条了。那时候的云计算,更多的还停留在一些概念性的问题上。而基于云计算而生的SaaS更是“养在深闺人未识”,一度成为被IT...

ORA-00600 「25027」 「x」报错(报错0xc0000001)

问题现象:在用到LOB大对象的业务中,进行数据的插入,失败了,在报警文件中报错:ORA-00600:内部错误代码,参数:[25027],[10],[0],[],[],[],[],[...

安卓7源码编译(安卓源码编译环境lunch失败,uname命令找不到)

前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...

编译安卓源码(编译安卓源码 电脑配置)

前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...

360 Vulcan Team首战告捷 以17.5万美金强势领跑2019“天府杯“

2019年11月16日,由360集团、百度、腾讯、阿里巴巴、清华大学与中科院等多家企业和研究机构在成都联合主办了2019“天府杯”国际网络安全大赛暨2019天府国际网络安全高峰论坛。而开幕当日最激荡人...

Syslog 日志分析与异常检测技巧(syslog发送日志配置)

系统日志包含有助于分析网络设备整体运行状况的重要信息。然而,理解并从中提取有效数据往往颇具挑战。本文将详解从基础命令行工具到专业日志管理软件的全流程分析技巧,助你高效挖掘Syslog日志价值。Gr...

从Oracle演进看数据库技术的发展(从oracle演进看数据库技术的发展的过程)

数据库技术发展本质上是应用需求驱动与基础架构演进的双向奔赴,如何分析其技术发展的脉络和方向?考虑到oracle数据库仍然是这个领域的王者,以其为例,管中窥豹,对其从Oracle8i到23ai版本的核...

取消回复欢迎 发表评论: