当前位置:首页 > 问答 > 正文

Oracle数据库主从配置怎么弄,步骤和要点简单说说,不复杂的那种

Oracle数据库的主从配置,通常我们称之为“Data Guard”物理备库配置,下面我用最简单的大白话把步骤和要点说一下,整个过程就像是给主数据库找一个一模一样的“跟班”或“影子”,主库做什么,从库就跟着做什么,这样主库万一出问题了,从库能立刻顶上。

第一步:准备工作

在开始之前,你得先把环境准备好,这就像请客吃饭前得先买菜洗菜一样。

  1. 准备两台服务器:一台作为主库(Primary Database),另一台作为从库(Standby Database),这两台服务器的硬件配置和操作系统版本最好是一样的,避免因为环境差异出怪问题,Oracle软件的版本也必须完全一致,包括小版本号。
  2. 安装Oracle软件:在两台服务器上都安装好相同版本的Oracle数据库软件,注意,只需要安装软件,先不要创建数据库,从库的数据库是通过从主库复制过来的数据文件创建的。
  3. 网络要通:确保两台服务器之间网络是连通的,能互相ping通,最好能配置好主机名解析(比如在/etc/hosts文件里加上对方的主机名和IP地址),这样后面配置起来更方便。
  4. 规划好目录结构:为了让管理更简单,建议主库和从库的Oracle软件安装路径、数据文件存放路径等完全保持一致,比如主库的数据文件在/u01/app/oracle/oradata/PROD,那么从库也最好用同样的路径,如果不一致,后续需要额外的配置,会复杂一些。

第二步:配置主库

这一步是告诉主库:“你要开始做大哥了,得有个大哥的样子,把你做的所有事情都记录下来,方便你的跟班学习。”

  1. 开启归档模式:这是最关键的一步,默认情况下,数据库可能没开启归档,归档就是把数据库的重做日志文件(Redo Log)在写满之后备份出来保存,这是从库同步数据的“粮食”,你需要重启数据库到mount状态,然后执行命令开启归档模式。
    • 具体操作(根据Oracle官方文档的通用步骤):用sqlplus以sysdba身份登录,先shutdown immediate关闭数据库,然后startup mount启动到mount状态,再执行alter database archivelog;开启归档,最后alter database open;打开数据库。
  2. 强制记录重做日志:为了确保所有数据变更都能被同步到从库,建议设置FORCE LOGGING模式,这可以防止一些特殊的操作(比如加了NOLOGGING子句的操作)绕过重做日志,导致主从数据不一致,命令是:alter database force logging;
  3. 创建密码文件:确保主库有密码文件,并且从库服务器能通过网络使用这个密码文件连接到主库,这涉及到密码文件的复制和参数REMOTE_LOGIN_PASSWORDFILE的设置,通常设为EXCLUSIVE
  4. 修改参数文件:需要修改一些数据库的初始化参数,让主库知道自己的角色以及从库的存在,主要修改以下几个(根据Oracle官方文档对Data Guard Broker配置的简化,即使不用Broker,这些参数也是核心):
    • LOG_ARCHIVE_CONFIG:设置成'DG_CONFIG=(主库唯一名,从库唯一名)',告诉主库这个Data Guard环境里都有谁。
    • LOG_ARCHIVE_DEST_1:配置本地归档路径,就是告诉主库把归档日志存到哪儿。
    • LOG_ARCHIVE_DEST_2:配置远程归档路径,这是重中之重,告诉主库把归档日志通过网络发送到从库的哪个地址、哪个服务名,这里需要指定SERVICE(从库的网络服务名)、ASYNCSYNC(异步/同步传输)、VALID_FOR(何时生效)和LGWR(使用日志写入进程来传输)等属性。SERVICE=standby_db ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby
    • LOG_ARCHIVE_DEST_STATE_1LOG_ARCHIVE_DEST_STATE_2:确保这两个参数都设置为ENABLE,使归档路径生效。
    • 修改完参数后,通常需要重启主库才能生效。

第三步:准备从库

现在轮到准备“跟班”了。

  1. 备份主库:你需要把主库的完整数据文件复制到从库服务器上,可以使用RMAN(Oracle的备份恢复工具)来做一次全量备份,然后把备份文件拷贝到从库服务器,也可以用最简单粗暴的方法:在数据库关闭状态下,直接把整个数据文件目录打包压缩,然后复制到从库,但生产环境通常不允许长时间停机,所以用RMAN热备份更常见。
  2. 复制相关文件:除了数据文件,还需要把主库的密码文件、参数文件(pfile或spfile)也复制到从库服务器,复制参数文件后,需要根据从库的情况进行修改,主要是修改DB_UNIQUE_NAME(给从库起个唯一名,不能和主库一样)、CONTROL_FILES(控制文件路径)、LOG_ARCHIVE_DEST_n参数(角色互换一下,把指向自己的改成PRIMARY_ROLE,指向对方的改成STANDBY_ROLE)等。
  3. 在从库上创建服务名:在从库服务器的网络配置文件(tnsnames.ora)里,要配置好连接到主库的服务名,同样,主库的tnsnames.ora里也要有连接到从库的服务名,这样两台机器才能互相通信。

第四步:创建并启动从库

东西都准备好了,现在让“跟班”开始工作。

  1. 启动从库到nomount状态:使用修改好的从库参数文件,启动数据库实例到nomount状态。
  2. 还原控制文件:从库的控制文件需要是从主库备份出来的,使用RMAN,连接到从库实例,执行RESTORE STANDBY CONTROLFILE FROM ...命令来还原控制文件,还原成功后,把从库启动到mount状态。
  3. 恢复数据文件:如果之前是用RMAN备份的,现在就用RMAN把数据文件还原并恢复到某个时间点,如果是直接复制的数据文件,可以跳过还原,直接进行恢复。
  4. 开始同步:最关键的一步,执行恢复命令:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;,这个命令告诉从库,开始不断地应用从主库传输过来的重做日志,进入实时的同步状态,加上USING CURRENT LOGFILE可以让从库实时应用,减少数据延迟。DISCONNECT是让这个操作在后台进行。

第五步:检查与验证

配置完了,得看看效果怎么样。

  1. 查看同步状态:在主库或从库上,可以查询V$MANAGED_STANDBY视图,看看同步进程(MRP进程)是否正常运行,有没有报错。
  2. 检查归档日志传输和应用情况:查询V$ARCHIVE_DEST_STATUS等视图,可以看到最新的归档日志是否已经成功传输到从库,以及从库应用到了哪个日志序列号,确保应用没有落后。
  3. 测试切换:在一切稳定后,可以尝试进行一次手工的切换(Switchover),测试一下主从角色是否能正常互换,这是检验配置是否成功的最佳方式,切记要在业务低峰期进行,并做好备份。

简单总结一下要点:

  • 环境一致:主从环境越像越好,省麻烦。
  • 归档是基础:主库不开归档,一切免谈。
  • 网络是桥梁:参数文件里的服务名配置一定要对,确保主从能通话。
  • 参数是灵魂:那几个LOG_ARCHIVE_DEST_n参数是核心,角色和路径别配反了。
  • 验证是关键:配完了一定要检查日志应用状态,不能想当然。

这个过程听起来步骤不少,但一步步做下来,其实逻辑很清晰,如果遇到问题,最主要的就是查两边的告警日志(alert log),里面通常会记录详细的错误信息,这是最好的排错依据。

Oracle数据库主从配置怎么弄,步骤和要点简单说说,不复杂的那种