Oracle 服务器迁移的一些经验
前言
通过此文章来分享一下 Oracle 服务器迁移过程中的一些经验,希望对大家有些许帮助。
本文旨在帮助更多的同学,会提及一些基本命令或技巧,但不赘述,后续有机会再进一步分享各个细节。
背景
之前因机房迁移等原因,接手过一些 Oracle 服务器,并将它们从机房 A 的机器上,迁移到机房 B 的机器上。
备份
经历过大灾大难的都深刻体会到其重要性。然而此处,不只备份数据库的数据。
什么? 你们已经通过 Ansible/Salt/脚本将所有配置文件管理及备份等全部自动化了?
英雄所见略同!在迁移过程中,数据库方面已经逐渐通过 Salt 实现了配置管理自动化。
备份 Linux 系统文件及 Oracle 配置文件
因为配置文件是静态的,可在迁移前备份一下。要知道,机房迁移完成后,再想看原来的配置,没有备份,只能悔不当初了。
备份 Linux 系统文件
数据库相关的 Linux 系统配置文件。
以下系统文件如果 Ops 已经通过 Ansible 或 Salt 等做了自动化管理,此步可略过。
/etc/hosts
/etc/sysctl.conf
/etc/security/limits.conf
其他可能有用的 Linux(CentOS) 系统文件
/etc/*release
/home/oracle/.bash_history
/root/.bash_history
/root/.bash_profile
/root/.bashrc
/etc/yum.repos.d/
/var/spool/cron/
/proc/version
/proc/meminfo
/proc/cpuinfo
/proc/vmstat
/proc/filesystems
/etc/issue
/etc/resolv.conf
/etc/ssh/sshd_config
/etc/ssh/ssh_config
/etc/passwd
/etc/hosts
/etc/sysctl.conf
/etc/pam.d/login
/etc/security/limits.conf
/etc/security/limits.d
/etc/selinux/config
/etc/sudoers
/etc/sudoers.d/
备份 Oracle 相关配置文件
有的系统中也用到了 Oracle Gateway,考虑它安装配置较独立且并不十分普遍,此处未列出 Oracle Gateway 相关配置文件。
/home/oracle/.bash_profile
/etc/oraInst.loc
/etc/oratab
$ORA_INVENTORY/orainstRoot.sh
$ORACLE_HOME/root.sh
$ORACLE_HOME/network/admin/listener.ora
$ORACLE_HOME/network/admin/tnsnames.ora
$ORACLE_HOME/dbs/init*.ora
$ORACLE_HOME/dbs/orapw*.ora
备份 Oracle 数据库
通过以下各种方式备份,有备无患。此步是在迁移完成,最后停库关机前的操作。因其也属于备份,故将其提前至此。
- exp 备份
- expdp 备份
- RMAN 备份
- 导出各个 schema 备份
- 拷贝数据库文物理件(停数据库后)
历史备份迁移
将各种历史备份( exp,expdp,RMAN 备份等) 从原 rsync 服务器迁移到新的 rsync 服务器。
数据库相关软件备份
虽然 Oracle 官网有可下载,为避免不必要的麻烦,将安装软件也备份一下。况且以后想再找相同版本的软件,并不一定容易。
如果是按拷贝物理文件的方式迁移,后面想再通过安装的方式搭建生产或测试环境,就需要这些软件了。
注: 目前已通过 Salt 实现了 Oracle 一键安装及配置管理自动化,相关软件也放在了统一的服务器以实现配置管理自动化。
其他备份
如数据库服务器上各种脚本等。
Oracle 高可用
在数据库迁移过程在有可能用到 Oracle 高可用架构,在此给出其大致结构图供参考。
Oracle Data Guard
Oracle Fast-Start Failover
Switchover 也类似。
Oracle 数据库迁移方式
方式一 Dataguard 主从切换
能够做主从的话,此方式为最佳方式。切换时间短,对业务影响较小。
如受网络等因素影响,两个机房无法做主从,此方式将不适用。
方式二 通过 RMAN 备份
RMAN 备份,即全量备份,是实例级的备份。如:控制文件,数据文件,archive log 等。
RMAN 是做备份恢复的常用方式。
它可以用于如下场景:
- 数据库迁移
- 搭建测试环境,根据生产 RMAN 恢复出来
- 做基于时间点(PITR)的恢复
当然,RMAN 功能远不止于此。
方式三 直接拷贝数据库文件
前提:相同操作系统版本,相同数据库版本等
优点:操作相对简单,除安装必要的依赖包外,只需复制文件即可
注意:额的数据库版本在拷贝数据库文件后有可能不需要额外处理,有的则可能需要作进一步处理,如执行 clone.pl
等命令。
配置文件
/home/oracle/.bash_profile
/etc/oratab
$ORACLE_HOME/network/admin/listener.ora
$ORACLE_HOME/network/admin/tnsnames.ora
$ORACLE_HOME/dbs/init*.ora
$ORACLE_HOME/dbs/orapw*.ora
控制文件
通过以下 SQL 查询控制文件位置
SELECT name FROM v$controlfile;
数据目录
${ORACLE_BASE}/oradata
${ORACLE_BASE}/fast_recovery_area
有的数据目录放在了单独的硬盘(如 SSD)上,可以通过 SQL查询数据文件位置
SELECT name FROM v$datafile;
archive log
通过如下 SQL 查询 archive log 位置
ARCHIVE LOG LIST;
SHOW PARAMETER arch;
方式四 通过 exp 或 expdp 备份
跨平台的可以考虑这种方式。如从 Windows 迁移到 Linux上。
此次迁移中,一些单机的数据库采用了此种方式。
方式五 其他
如通过 Golden Gate 等。
Oracle Gateway
一些系统中用到了Oracle Gateway。
如果需要从 Oracle 访问 其他类型数据库(如 SQL Server),就需要安装配置 Oracle Gateway 了。
定时任务
各个用户下的各个定时任务及相关脚本也需要注意迁移到新的机器。
配置文件
由于迁移后机器名可能有变化,所有相关的配置也需要相应修改。
数据传输
机房 A 到机房 B 网络是通的,但机房 B 到机房 A 网络是不通的。另外,本地网络可以访问机房 A 和机房 B 里的机器,但机房 A 里的机器不能通过 ssh 或 scp 访问机房 B 里的机器。
对于动辄几百G的数据,通过本地网络下载和上传无疑是十分低效的。
根据不同情况可以采用如下两种方法。
网络传输神器 - nc
相信很多大牛看到这个名字,已经露出会意的微笑。
nc 的一个优点就是,不需要用户名密码,简单易用,只要网络通即可,并且传输效率也是不错的。
以下是 nc 命令用法示例。
在接收端执行如下命令准备接收:
nc -l 54321| pv |tar -xvf -
在发送端发送文件:
tar -cvf - test.txt |nc test.corp.com 54321
文件同步神器 - rsync
相比 nc 命令,rsync 的以下优势,也给本次数据迁移带来了极大便利:
一,增量同步。如几百G的文件,用 nc 的话,如果中途失败,还得重头再来
二,通过 exclude-from 参数可以过虑掉大量的日志文件或目录等
rsync 还经常用于备份等,当然,rsync 命令功能及用途远不止于此。
以下是 rsync 命令用法示例。
rsync -aP /test/dir1 alvin@10.20.20.1::test/
rsync -aP /test/dir1 alvin@10.20.20.1::test/ --password-file=$PASSWORD_FILE --exclude-from="$EXCLUDE_FILE"
相信大家已经注意到上面示例中的远端路径 10.20.20.1::test。
是的,rsync 是需要在服务器端配置的,10.20.20.1::test 就是配置好的路径。
其配置也较简单,在此略过。
配置管理自动化
通过上述内容,大家可以看到有大量的人工操作,而且并不一定面面俱到。
如果配置管理(如通过 Ansible 或 Salt 等)做的好的话,会简单方便很多。
自动化做到极致情况下,Oracle 服务器迁移所需要做的可能仅有如下这些:
注:目前配置管理自动化所涉及的所有脚本,配置文件等均已提交 git,所有软件都放在统一的服务器上。
准备工作
在新机器上,跑一下 fresh install 的配置管理自动化脚本,所有的软件自动安装,用户自动创建并配置,操作系统文件等将自动配置好数据迁移
通过以上任一合适的方式迁移数据库配置管理
在新机器上,跑一下配置管理自动化,所有需要修改的配置及脚本、定时任务等均自动部署
原文链接:
https://www.cnblogs.com/dbadaily/p/oracle-migration.html
您浏览的网址与此链接不一致的话,则为未授权的转载,为了更好的阅读体验,建议阅读原文。
公众号
关注 DBA Daily 公众号,第一时间收到文章的更新。
通过一线 DBA 的日常工作,学习实用数据库技术干货!
公众号优质文章推荐
GitLab supports only PostgreSQL now
Oracle 服务器迁移的一些经验的更多相关文章
- Oracle数据库迁移到AWS云的方案
当前云已经成为常态,越来越多的企业希望使用云来增加基础设施的弹性.减轻基础设施的维护压力,运维的成本等.很多企业使用云碰到的难题之一是如何将现有的应用迁移到云上,将现有应用的中间件系统.Web系统及其 ...
- SQL SERVER 2008向ORACLE 11G迁移示例
来源于:http://www.cnblogs.com/hiizsk/ 由SQL SERVER 2008向ORACLE 11G迁移过程记录之一-表 使用Oracle Sql Developer将SQL ...
- 线上Linux服务器运维安全策略经验分享
线上Linux服务器运维安全策略经验分享 https://mp.weixin.qq.com/s?__biz=MjM5NTU2MTQwNA==&mid=402022683&idx=1&a ...
- Oracle JDK迁移指南
Oracle JDK迁移指南 https://docs.oracle.com/en/java/javase/11/migrate/index.html#JSMIG-GUID-C25E2B1D-6C24 ...
- Oracle 服务器结构
[学习目标] 作为一个数据库管理员(DBA),经常会遇到各种没有见过的问题.除了宝贵的经验外, 通过理论基础去对问题进行判断.解决是至关重要的.因此,Oracle 服务器的结构和组成 是学习Oracl ...
- 【微学堂】线上Linux服务器运维安全策略经验分享
技术转载:https://mp.weixin.qq.com/s?__biz=MjM5NTU2MTQwNA==&mid=402022683&idx=1&sn=6d403ab4 ...
- Oracle数据库迁移至PostgreSQL数据库问题及解决
Oracle数据库迁移PostgreSQL数据库问题及解决 目录 如何计划迁移数据库(现状及问题分析) 统计系统表及表功能 解耦公共表 建立数据库 迁移表结构 导入表数据 改SQL语法 保证数据时效性 ...
- 将Oracle数据库迁移到达梦数据库
公司某产品在项目现场上常用到的数据库有Oracle和达梦. 做性能测试需要根据项目现场预埋大量的基础数据和业务数据,耗费时间.精力.故完成Oracle数据库的性能测试之后,采用直接将Oracle数据库 ...
- oracle 表迁移方法 (二) 约束不失效
DB:11.2.0.3.0 在oracle 表迁移方法 (一)中,只是move了一张普通的表,如果表的字段带有主键约束呢 ? [oracle@db01 ~]$ sqlplus / as sysdba ...
随机推荐
- 聊聊C#中的composite模式
写在前面 Composite组合模式属于设计模式中比较热门的一个,相信大家对它一定不像对访问者模式那么陌生,毕竟谁又没有遇到过树形结构呢.不过所谓温故而知新,我们还是从一个例子出发,起底一下这个模式吧 ...
- TypeScript(5)类、继承、多态
前言 对于传统的 JavaScript 程序我们会使用函数和基于原型的继承来创建可重用的组件,但对于熟悉使用面向对象方式的程序员使用这些语法就有些棘手,因为他们用的是基于类的继承并且对象是由类构建出来 ...
- opencv-python获取视频信息
代码 import cv2 if __name__ == '__main__': # 读取视频 capture = cv2.VideoCapture('./videos/person.mp4') # ...
- SpringBoot + JWT + Redis 开源知识社区系统
「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识.准备 Java 面试,首选 JavaGuide!:https://javaguide.cn/ 你好,我是 Guide!这 ...
- UiPath数据抓取Data Scraping的介绍和使用
一.数据抓取(Data Scraping)的介绍 使用截据抓取使您可以将浏览器,应用程序或文档中的结构化数据提取到数据库,.csv文件甚至Excel电子表格中. 二.Data Scraping在UiP ...
- 关于nginx 和 uwsgi
关于nginx和uWSGI和Django之间的关系,我觉得要理一下. 原文链接 为什么要用nginx 因为我们要使用https协议访问.(y总说django不支持,但是我查了一下,django也可以支 ...
- 不存在的!python说不给数据的浏览器是不存在的!
有时候我们些代码是总发此疑惑? 为什么别人采集 xx 网站的时候能成功,而我却总是不返回给数据出现这种原因时往往是我们没有给够伪装, 被识别了出来~ 就像人,你出门肯定是要穿衣服的对不,如果你不穿! ...
- IDEA项目启动乱码小方块
在看完执行了网上各种文章之后,我发现没有一个适合我的. 最终,终于,在朋友的远程帮助下解决了. 如果你还有这个问题的话,可以试一下这个: 右键项目,打开终端,执行下面这个命令(手动指定一下maven ...
- ACM组合计数入门
1 排列组合 1.1 排列 \[A_n^m=n(n-1)(n-2)\cdots(n-m+1)=\frac{n!}{(n-m)!} \] 定义:从 n 个中选择 m 个组成有序数列,其中不同数列的数量. ...
- DNS 系列(一):为什么更新了 DNS 记录不生效?
我们在上网时如果想要访问到另一台机器上的内容,通常只需要直接输入一串地址,例如:www.upyun.com,就能够准确访问到自己想要访问的网站.但是实际上这只是方便我们记忆的字符形式网络标识,真正让我 ...