- SAP 监控
- CDN下载加速
- 全球数据传输加速
- 高可用网站架构云化
- 核心数据库上云
- 应用容器化上云
- Linux服务器迁移上云
- 域名转入华为云解析
- 第三方云集群迁移至华为云CCE
- 使用自定义域名托管静态网站
- 通过VPN构建跨境网络
- 云上敏捷开发DevOps实践
- 基于Discuz快速搭建论坛
- 基于Tomcat快速构建Java web环境
- 基于WordPress搭建个人网站
- 快速构建FTP站点
- 快速构建高可用四层负载均衡
- 无服务器告警推送
- 基于Jenkins快速部署源码编译环境
- 快速部署高可用MongoDB
- 基于开源Odoo快速部署ERP系统
- 快速部署高可用七层负载均衡
- SAP Backint安装指南
- 华为云SAP on DB2安装
- 华为云基于SIOS的SAP高可用配置
- 快速部署战斧跨境电商管理系统
- 基于MetaTown构建数字资产平台
- 数字资产秒杀场景解决方案
- 基于开源wangmarketCMS快速建站
- 快速部署高可用MHA-MySQL集群
- 快速部署高可用的RabbitMQ集群
- 数据库上云
- 语音识别解决方案
- 游戏批量开服数据库解决方案
- 基于Zpan快速构建私有网盘
- 等保三级解决方案
- 基于迅响快速构建响应式网站
- 快速部署高可用Redis集群
- 快速部署赛瀚德MES系统
- 基于Ploto构建自动驾驶平台
- 无服务器日志实时分析
- 快速创建云数据库RDS 克隆实例
- 无服务器图片生成缩略图
- 快速构建Node.js运行环境
- 快速部署高可用Docker Swarm集群
- 云和恩墨数据库统一管理平台
- 基于万户快速建站
- 防勒索病毒安全解决方案
- 基于SNAT公网访问解决方案
- 基于CCE快速部署Volcano批量调度系统
- 无服务器文件解压
- 定时开关机解决方案
- 运维平台数据库解决方案
- CDN日志定时转储解决方案
- 基于VPCEP实现跨VPC连接ELB
- 基于Nginx Ingress实现灰度发布
- 基于蓝凌MK-PaaS快速构建OA系统
- 快速部署SAP S4HANA云上环境
- 快速部署高可用PostgreSQL
- 快速部署宝塔面板
- 通过Nginx反向代理访问OBS最佳实践
- 快速部署永洪BI平台
- 基于SmartBI快速构建商业智能分析平台
- 基于CCE容器快速建站
- 快速搭建OpenVPN
- 云上跨VPC添加实例到ELB最佳实践
- 企业云上办公桌面解决方案
- CDN自动刷新缓存解决方案
- CDN自动预热解决方案
- 快速部署TongWeb应用服务器
- 基于GitLab快速部署仓库管理系统
- 无服务器视频转码解决方案
- 快速部署SAP B1云上环境
- 无服务器日志文件上传LTS
- 基于云手机搭建安卓测试集群
- 基于Hexo快速搭建博客
- 基于Zabbix搭建运维监控平台
- 快速搭建WDCP管理系统
- 游戏服务托管解决方案
- 快速构建基于事件网格的运维审计环境
- 快速构建高可用Pulsar集群
- 快速构建高可用Solr集群
- 基于JumpServer快速搭建远程安全运维环境
- 快速搭建高可用Elasticsearch集群
- 基于DataGuard实现Oracle数据库快速迁移上云
- 快速搭建高可用InfluxDB集群
- 基于DBSyncer快速实现数据库迁移
- 基于WGCLOUD搭建运维监控平台
- 快速搭建DataX数据库迁移环境
- 基于辅助弹性网卡实现ECS绑定多IP
- 定时批量创建/删除ECS实例
- 公网IP不变业务迁移最佳实践
- 文档下载
- 通用参考
链接复制成功!
快速部署
本章节主要帮助用户快速部署该解决方案。用户可按照本章节部署步骤进行部署;或者下载部署脚本,根据代码仓中README.md的说明执行脚本完成部署。
参数名称 |
类型 |
参数解释 |
---|---|---|
SOURCE_ORACLE_SID |
String |
源端oracle数据库实例名 |
TARGET_ORACLE_SID |
String |
目标端oracle数据库实例名 |
SOURCE_DB_UNIQUE_NAME |
String |
源端oracle数据库全局唯一名称 |
TARGET_DB_UNIQUE_NAME |
String |
目标端oracle数据库全局唯一名称 |
SOURCE_ORACLE_BASE |
String |
源端oracle根目录 |
TARGET_ORACLE_BASE |
String |
目标端oracle根目录 |
SOURCE_ORACLE_HOME |
String |
源端oracle产品目录 |
TARGET_ORACLE_HOME |
String |
目标端oracle产品目录 |
SOURCE_TNS_ID |
String |
源端数据库tns连接标识 |
TARGET_TNS_ID |
String |
目标端数据库tns连接标识,需与SOURCE_TNS_ID不同 |
SOURCE_SERVICE_NAME |
String |
源端oracle用于数据库连接的全局名称 |
TARGET_SERVICE_NAME |
String |
目标端oracle用于数据库连接的全局名称 |
SOURCE_GLOBAL_DBNAME |
String |
源端oracle数据库全局名称 |
TARGET_GLOBAL_DBNAME |
String |
目标端oracle数据库全局名称 |
SOURCE_EIP |
String |
源端弹性公网IP |
TARGET_EIP |
String |
目标端弹性公网IP |
SOURCE_ORACLE_PWD |
String |
源端oracle数据库sys用户密码 |
以下部署步骤中出现上表参数,均用"$+参数名"代替。按照部署步骤在命令行执行命令时,需要将对应参数名替换为参数实际值。主库对应源端,备库对应目标端。
【部署参数查询说明】:
以下简要说明各部署参数如何查询(切换至oracle用户执行指令)。
- ORACLE_SID(数据库实例名),ORACLE_BASE(oracle根目录),ORACLE_HOME(oracle产品目录):命令行输入以下指令查询
echo $ORACLE_SID echo $ORACLE_BASE echo $ORACLE_HOME
- DB_UNIQUE_NAME(oracle数据库全局唯一名称),SERVICE_NAME(用于数据库连接的全局名称):命令行输入以下指令查询
sqlplus / as sysdba << end startup; show parameter name;
图1 查询DB_UNIQUE_NAME和SERVICE_NAME
- TNS_ID(数据库tns连接标识):在tnsnames.ora中自定义,文件路径为"$SOURCE_ORACLE_HOME/network/admin/tnsnames.ora"
- GLOBAL_DBNAME:命令行输入以下指令查询
sqlplus / as sysdba << end startup; select * from global_name;
图2 查询GLOBAL_DBNAME
- EIP:源端和目标端动态分配
源端dataguard部署
切换至oracle用户执行以下部署步骤:
- 创建本地日志归档目录,需要输入root用户密码。
1 2
su - root -c "mkdir -p /oraarch/$SOURCE_ORACLE_SID" su - root -c "chown -R oracle.oinstall /oraarch"
图3 创建源端归档目录
- 登录数据库,启动归档模式,打开数据强制日志,创建数据库初始化文件spfile。
# shutdown为危险操作,会关闭数据库业务 sqlplus / as sysdba << end shutdown immediate; startup mount; alter database archivelog; alter database force logging; create spfile from pfile; shutdown immediate; end
- 登录数据库,设置归档日志本地和远程目录,设置数据库连接参数,设置主库日志文件。
查看主库已有redo日志组(默认3个),查看方法:
sqlplus / as sysdba << end startup mount; select * from v$logfile;
图4 查询redo日志组数
alter database add standby logfile指令添加的日志文件组数比已有redo日志组多一组,可根据上一步查询结果更改:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# shutdown为危险操作,会关闭数据库业务 sqlplus / as sysdba << end alter system set log_archive_dest_1='location=/oraarch/$SOURCE_ORACLE_SID valid_for=(all_logfiles,all_roles) db_unique_name=$SOURCE_DB_UNIQUE_NAME' scope=both; alter system set log_archive_dest_2='service=$TARGET_TNS_ID lgwr sync valid_for=(online_logfiles,primary_role) db_unique_name=$TARGET_DB_UNIQUE_NAME' scope=both; alter system set log_archive_dest_state_1=enable; alter system set log_archive_dest_state_2=enable; alter system set standby_file_management=manual scope=both; alter system set fal_client='$SOURCE_TNS_ID' scope=spfile; alter system set fal_server='$TARGET_TNS_ID' scope=spfile; alter database add standby logfile group 4 ('$SOURCE_ORACLE_BASE/oradata/$SOURCE_ORACLE_SID/standbyredo04.log') size 200M; alter database add standby logfile group 5 ('$SOURCE_ORACLE_BASE/oradata/$SOURCE_ORACLE_SID/standbyredo05.log') size 200M; alter database add standby logfile group 6 ('$SOURCE_ORACLE_BASE/oradata/$SOURCE_ORACLE_SID/standbyredo06.log') size 200M; alter database add standby logfile group 7 ('$SOURCE_ORACLE_BASE/oradata/$SOURCE_ORACLE_SID/standbyredo07.log') size 200M; shutdown immediate; end
- 设置数据库tns连接文件tnsnames.ora,该文件用于定义dataguard数据库通信配置和连接标识符。
echo " $SOURCE_TNS_ID = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = $SOURCE_SERVICE_NAME) ) ) $TARGET_TNS_ID = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = $TARGET_EIP)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = $TARGET_SERVICE_NAME) ) ) " >> $SOURCE_ORACLE_HOME/network/admin/tnsnames.ora
- 设置数据库监听文件listener.ora,用于监听客户端请求。
source_hostname=$(hostname) echo " SID_LIST_LISTENER = (SID_LIST = (SID_DESC= (GLOBAL_DBNAME=$SOURCE_GLOBAL_DBNAME) (ORACLE_HOME=$SOURCE_ORACLE_HOME) (SID_NAME=$SOURCE_ORACLE_SID) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = $source_hostname)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) " >> $SOURCE_ORACLE_HOME/network/admin/listener.ora
- 传输密码文件至目标端(提供scp方式参考),需输入目标端oracle用户密码。密码文件用于目标端rman连接源端和复制主库时的权限验证,完成传输后源端和目标端oracle数据库sys用户的密码相同。
scp -o StrictHostKeyChecking=no $SOURCE_ORACLE_HOME/dbs/orapw$SOURCE_ORACLE_SID oracle@$TARGET_EIP:$TARGET_ORACLE_HOME/dbs/orapw$TARGET_ORACLE_SID
- 创建oracle初始化文件,传输至目标端。
sqlplus / as sysdba << end create pfile='/home/oracle/temp.ora' from spfile; end scp -o StrictHostKeyChecking=no /home/oracle/temp.ora oracle@$TARGET_EIP:$TARGET_ORACLE_HOME/dbs/init$TARGET_ORACLE_SID.ora
- 启动监听并打开数据库至open状态。
lsnrctl start sqlplus / as sysdba << end startup; end
图5 启动监听,并打开数据库至open状态
目标端dataguard部署
切换至oracle用户执行以下部署步骤:
- 创建本地日志归档目录,需要输入root用户密码。
1 2
su - root -c "mkdir -p /oraarch/$TARGET_ORACLE_SID" su - root -c "chown -R oracle.oinstall /oraarch"
图6 创建目标端归档目录
- 登录数据库,创建数据库初始化文件spfile,启动归档模式,打开数据强制日志。
# shutdown为危险操作,会关闭数据库业务 sqlplus / as sysdba << end shutdown immediate; create spfile from pfile; startup mount; alter database archivelog; alter database force logging; shutdown immediate; end
- 设置数据库tns连接文件tnsnames.ora,该文件用于定义dataguard数据库通信配置和连接标识符。
echo " $TARGET_TNS_ID = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = $TARGET_SERVICE_NAME) ) ) $SOURCE_TNS_ID = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = $SOURCE_EIP)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = $SOURCE_SERVICE_NAME) ) ) " >> $TARGET_ORACLE_HOME/network/admin/tnsnames.ora
- 设置数据库监听文件listener.ora,用于监听客户端请求。
echo " SID_LIST_LISTENER = (SID_LIST = (SID_DESC= (GLOBAL_DBNAME=$TARGET_GLOBAL_DBNAME) (ORACLE_HOME=$TARGET_ORACLE_HOME) (SID_NAME=$TARGET_ORACLE_SID) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = $target_hostname)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) " >> $TARGET_ORACLE_HOME/network/admin/listener.ora
- 修改源端传输的数据库初始化文件pfile。
echo " *.db_unique_name='$TARGET_DB_UNIQUE_NAME' *.log_file_name_convert='$SOURCE_ORACLE_BASE/oradata/$SOURCE_ORACLE_SID','$TARGET_ORACLE_BASE/oradata/$TARGET_ORACLE_SID' *.db_file_name_convert='$SOURCE_ORACLE_BASE/oradata/$SOURCE_ORACLE_SID','$TARGET_ORACLE_BASE/oradata/$TARGET_ORACLE_SID' *.standby_file_management='manual' " >> $TARGET_ORACLE_HOME/dbs/init$TARGET_ORACLE_SID.ora pfile_path="$TARGET_ORACLE_HOME/dbs/init$TARGET_ORACLE_SID.ora" sed -i "s!\*.log_archive_dest_1='.*db_unique_name=$SOURCE_DB_UNIQUE_NAME'!*.log_archive_dest_1='location=/oraarch/$TARGET_ORACLE_SID valid_for=(all_logfiles,all_roles) db_unique_name=$TARGET_DB_UNIQUE_NAME'!g" "$pfile_path" sed -i "s/\*.log_archive_dest_2='.*db_unique_name=$TARGET_DB_UNIQUE_NAME'/*.log_archive_dest_2='service=$SOURCE_TNS_ID lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=$SOURCE_DB_UNIQUE_NAME'/g" "$pfile_path" sed -i "s/\*.fal_client='$SOURCE_TNS_ID'/*.fal_client='$TARGET_TNS_ID'/g" "$pfile_path" sed -i "s/\*.fal_server='$TARGET_TNS_ID'/*.fal_server='$SOURCE_TNS_ID'/g" "$pfile_path"
- 依照新的pfile更新数据库初始化文件spfile并启动监听。
lsnrctl start sqlplus / as sysdba << end create spfile from pfile='$TARGET_ORACLE_HOME/dbs/init$TARGET_ORACLE_SID.ora'; startup nomount end
- rman复制主库,迁移和同步源端oracle存量数据。(源端密码文件已传输到目标端,二者的oracle数据库sys用户密码保持一致)
rman target sys/$SOURCE_ORACLE_PWD@$SOURCE_TNS_ID auxiliary sys/$SOURCE_ORACLE_PWD@$TARGET_TNS_ID << end duplicate target database for standby from active database nofilenamecheck dorecover; end
图7 rman开始复制主库
图8 rman成功复制主库
- 查看主库和备库的数据库角色和切换状态,验证dataguard是否部署成功(该步骤执行前可能需要等待1-2分钟,等待dataguard配置和同步完成)
select database_role, switchover_status from v$database;
图9 查看主库状态
图10 查看备库状态
- 启动数据库至open状态,开启主备库实时同步,同步源端oracle数据库增量数据。
sqlplus / as sysdba << end alter database open; alter database recover managed standby database using current logfile disconnect from session; end
图11 开启主备库实时同步