这种方式在某些情况下是可行的,但在企业级的生产环境中使用这种方法来搭建备库是有风险的,因为它涉及到将主库的所有文件复制到备库,并且可能会面临一些配置不一致、版本或补丁不匹配的问题。
不过,鉴于你提到的是通过 scp 和 tar 方式传输文件,我们可以在这个基础上给出一个详细的操作步骤,但必须明确指出一些潜在的风险和最佳实践。
方法可行性分析
通过将主库的 oracle 安装目录和 oraInventory 目录打包并恢复到备库,可以实现备库的 Oracle 安装目录复制,但是有几个注意事项:
- Oracle版本一致性:确保主库与备库的 Oracle 版本完全一致。
- 操作系统一致性:主备库的操作系统版本、补丁、内核等要完全一致,否则可能会导致复制的文件不兼容,甚至出现无法启动的情况。
- oraInventory一致性:oraInventory 目录保存了 Oracle 安装的元数据,若主备库不一致,可能会导致一些组件无法正确识别。
注意事项:
- 推荐的做法是 在备库上重新安装相同版本的 Oracle,并应用相同的补丁,而不是直接复制主库的 Oracle 安装目录。复制文件的方式只适用于比较简单的环境,且不适合长时间维护。
- 建议使用 RMAN 或 Data Guard 来进行备库的搭建和同步,这两种方式更为稳定、安全。
详细操作步骤
- 准备工作
确保主备库操作系统和 Oracle 版本一致。你可以使用以下命令检查主库的版本
SELECT * FROM v$version;
同时,确保 Oracle 的相关补丁已经应用到主库。如果需要,记录主库的补丁信息,并在备库上应用相同的补丁。
-
在备库安装 Oracle
假设备库服务器上没有安装 Oracle,你需要按照与主库相同的版本和配置安装 Oracle 数据库。可以使用 Oracle 官方的安装包进行安装,具体安装步骤参考 Oracle 官方文档。 -
打包主库的 Oracle 安装目录
在主库上,通过 tar 打包 Oracle 安装目录和 oraInventory 目录。
# 打包 Oracle 安装目录
tar cvf oracle.tar /u01/app/oracle
# 打包 oraInventory 目录
tar cvf oraInventory.tar /u01/app/oraInventory
- 传输安装包到备库
通过 scp 将打包好的安装文件传输到备库。
# 将 oracle.tar 和 oraInventory.tar 传输到备库
scp oracle.tar oracle@10.1.10.89:/u01/app/bak_file
scp oraInventory.tar oracle@10.1.10.89:/u01/app/bak_file
- 解压并恢复安装文件到备库
在备库上解压这些安装文件。
# 切换到 Oracle 用户
su - oracle
# 切换到根目录并解压文件
cd /
tar xvf oracle.tar
tar xvf oraInventory.tar
- 配置环境变量(.bash_profile)
确保备库的环境变量配置正确,尤其是 Oracle 用户的 bash_profile 文件。打开并编辑 ~oracle/.bash_profile,确保以下内容正确配置:
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
- 检查主库补丁情况
在主库上,使用以下 SQL 查询检查已安装的补丁:
SELECT * FROM DBA registry;
记录下主库的补丁信息。
- 在备库上安装相同的补丁
在备库上检查是否有与主库一致的补丁。如果有不同,使用 opatch 工具将相同的补丁安装到备库上。
# 安装补丁(如果有不同的补丁)
opatch apply
- 配置备库
确保备库数据库的初始化参数和主库保持一致。你可以从主库复制 init.ora 或 spfile.ora 配置文件到备库,或者手动在备库上设置相同的参数。
特别是以下关键参数要与主库保持一致:
-- 主库和备库要设置相同的数据库唯一名称
ALTER SYSTEM SET DB_UNIQUE_NAME='PrimaryDB' SCOPE=BOTH;
- 执行 root.sh 脚本
如果你在安装 Oracle 时选择了 root 用户执行相关操作,你需要在备库上执行 root.sh 脚本。
# 切换到 root 用户并执行 root.sh 脚本
su - root
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh
- 在备库上恢复数据
从主库通过 RMAN 备份和恢复数据库。你可以使用 RMAN 来恢复主库的数据库到备库。
rman target sys/password@primaryDB
# 备份主库数据库
BACKUP DATABASE PLUS ARCHIVELOG;
# 将备份文件传输到备库
scp /oracle/backup/* oracle@10.1.10.89:/u01/app/oracle/backup/
# 在备库上恢复数据库
rman target sys/password@standbyDB
RESTORE DATABASE;
RECOVER DATABASE;
- 配置归档日志和从库同步
- 配置主库发送归档日志到备库:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standbyDB ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standbyDB' SCOPE=BOTH;
ALTER SYSTEM SET FAL_CLIENT='standbyDB' SCOPE=BOTH;
- 在备库上启动归档日志应用进程:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
- 测试和验证
- 验证主备库数据同步: 在备库上检查归档日志的应用情况:
SELECT PROCESS, STATUS, THREAD#, SEQUENCE# FROM V$MANAGED_STANDBY;
- 验证备库同步状态: 在主库上查询归档日志传输状态:
SELECT THREAD#, SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG;
- 验证备库是否能够接管主库角色: 如果配置了 Data Guard,可以测试故障切换过程,确保备库能够成功接管。
四、总结
通过将主库的安装目录和 oraInventory 打包并传输到备库的方式可以实现备库的配置,但它不如使用 RMAN 或 Data Guard 配置来的稳定可靠。在实际生产环境中,建议使用更为标准的做法:
- 在备库上安装相同版本的 Oracle 并应用相同补丁。
- 使用 RMAN 备份和恢复 来将主库的数据恢复到备库。
- 配置 Data Guard 或 Standby Database 来确保主从库的同步和高可用性。