一 整体项目实施流程
目前需要迁移一套数据库,对应的两套生产库都运行在 WINDOWS 上面,目标端为 LINUX 环境,计划采用逻辑迁移方式进行
|
Step |
实施内容 |
责任人及参与人员 |
时间安排 |
形成文档 |
|
前期具体调研及项目需求分析阶段: |
||||
|
1. |
整体系统及 需求调研 调研 |
徐乔伟 |
1 天 |
项目系统调研文档、具体实施文档 |
|
第一实施阶段:(测试迁移)( 无需停应用) |
||||
|
1. |
模拟整个迁移过程 |
徐乔伟 庄晓东 |
1 天 |
核心数据库迁移文档 |
|
2. |
应用厂商必须要有熟知业务的人员在场测试确认应用 确保业务在新环境上面运行正常,这一步对正式迁移至关重要 |
创业 |
2 天 |
|
|
第三实施阶段:正式实施阶段:(正式迁移) |
||||
|
1 . |
停止正式业务 |
创业 |
1 天 |
|
|
2. |
依照测试阶段正式迁移 |
徐乔伟 |
||
|
3 . |
应用厂商确认后正式运行新数据库 |
创业 |
测试步骤
|
STEP |
实施内容 |
实施人员 |
实施时间 |
是否停业务 |
|
1. |
新服务器上面安装操作系统和数据库 |
施嘉伟 |
1 天 |
否 |
|
2. |
新服务器初始化空库 |
施嘉伟 |
3 小时 |
否 |
|
3. |
开始导出数据( expdp ) |
施嘉伟 |
2 小时 |
否 |
|
4. |
LINUX 端导入数据 |
施嘉伟 |
4 小时 |
否 |
|
5. |
校验无效对象,检查数据库状态 |
施嘉伟 |
1 小时 |
否 |
|
6. |
开启监听 |
施嘉伟 |
1 小时 |
否 |
|
7. |
应用测试 |
创业 |
2 天 |
否 |
|
8. |
测试迁移结束 |
---------------------------------------------- |
正式迁移步骤
|
STEP |
实施内容 |
实施人员 |
实施时间 |
是否停业务 |
|
1. |
新服务器初始化空库 |
徐乔伟 |
3 小时 |
否 |
|
2. |
停止业务( 确认都停掉包括中间件) |
创业 |
20 分钟 |
是 |
|
3. |
开始导出数据( expdp ) |
徐乔伟 |
2 小时 |
是 |
|
4. |
LINUX 端导入数据 |
徐乔伟 |
4 小时 |
是 |
|
5. |
校验无效对象,检查数据库状态 |
徐乔伟 |
1 小时 |
是 |
|
6. |
更改 ip ,将原先生产端 hp 的 ip 用作新服务器的 ip |
徐乔伟 庄晓东 |
20 分钟 |
是 |
|
7. |
开启监听 |
徐乔伟 |
1 小时 |
是 |
|
8. |
应用测试 |
徐乔伟 |
20 分钟 |
是 |
|
9. |
迁移结束 |
---------------------------------------------- |
二 前期环境确认
前期调研及项目需求需要客户配合,完成前期的环境确认
2.1 数据库环境确认
数据库信息
|
数据库版本 |
9.2.0.1 - 32bit |
|
数据库名称 |
orcl |
|
数据量 |
20G |
|
归档路径 |
/u02/archive |
|
数据库字符集 |
初始化表空间创建语句:
|
set heading off feedback off trimspool on linesize 500 spool tts_create_ts.sql prompt /* ===================== */ prompt /* Create user tablespaces */ prompt /* ===================== */ select 'create TABLESPACE ' || tablespace_name || ' DATAFILE ' ||''' +DATA/nbhz/'||tablespace_name||'.dbf'''||' size 10M autoextend on;' from dba_tablespaces where tablespace_name not in ('SYSTEM','SYSAUX') and contents = 'PERMANENT'; spool off |
绝对路径及大小根据具体环境确认
2.3 LINUX 目标端数据库参数确认
|
操作系统版本 |
Red Hat Enterprise Linux Server release 6.4 64bit |
|
数据库版本 |
11.2.0.4.0-64bit |
|
数据库名称 |
orcl |
|
语言 |
SIMPLIFIED CHINESE_CHINA.ZHS16GBK |
2.4 LINUX 端配置
安装最新的11.2.0.4+最新的PSU并依据2.3部分内容创建监听、实例
具体过程略
2.5 优化参数配置
为了保证数据库运行在最优模式下,需要优化一下参数
2.5.1 密码策略
密码过期时间,从11g开始,oracle对数据库所有密码默认过期时间180天:
SQL> alter profile default limit PASSWORD_LIFE_TIME unlimited;
密码登陆错误次数,对于输入错误密码导致数据库账号被锁定:
SQL> alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;
密码大小写敏感,该参数默认值是TRUE,因此,默认情况下密码大小写是敏感的
SQL> alter system set SEC_CASE_SENSITIVE_LOGON=false sid='*';
密码错误延迟登录 , 11G 引入了延迟密码验证,在输入错误的密码后,后续如果还是采用错误的密码登陆,将会导致密码延迟验证,从第三次开始,后续的每次登陆导致密码延迟 1 秒左右
而且会导致失败登陆延长,可以通过如下事件来屏蔽密码的延迟验证
SQL> ALTER SYSTEM SET event='28401 TRACE NAME CONTEXT FOREVER, LEVEL 1' SCOPE=SPFILE SID='*';
2.5.2 审计策略
Oracle 的审计从11g开始,默认为开启,建议关闭:
SQL> alter system set audit_trail=none scope=spfile sid='*';
2.5.3 CPU 资源管理
关闭 Resource Manager 该特性为 11g 新特性,用来给特定的资源组分配指定的 CPU 配额,容易引起等待事件: RESMGR:cpu quantum ,导致数据库响应慢。 CPU 耗尽
ALTER SYSTEM SET "_resource_manager_always_on"=FALSE SCOPE=SPFILE SID='*';
alter system set "_resource_manager_always_off"=true scope=spfile;
execute dbms_scheduler.set_attribute('SATURDAY_WINDOW','RESOURCE_PLAN','');
execute dbms_scheduler.set_attribute('SUNDAY_WINDOW','RESOURCE_PLAN','');
execute dbms_scheduler.set_attribute('MONDAY_WINDOW','RESOURCE_PLAN','');
execute dbms_scheduler.set_attribute('TUESDAY_WINDOW','RESOURCE_PLAN','');
execute dbms_scheduler.set_attribute('WEDNESDAY_WINDOW','RESOURCE_PLAN','');
execute dbms_scheduler.set_attribute('THURSDAY_WINDOW','RESOURCE_PLAN','');
execute dbms_scheduler.set_attribute('FRIDAY_WINDOW','RESOURCE_PLAN','');
2.5.4 关闭延迟段创建
ALTER SYSTEM SET deferred_segment_creation=FALSE SCOPE=SPFILE SID='*';
2.5.5 直接路径读
对于大表, Oracle 11g 倾向于直接路径读。如果 AWR 中,关于直接路径读的等待事件较高,可以考虑关闭该等待事件。
alter system set "_serial_direct_read"=never scope=spfile sid='*';
2.5.6 优化参数 SCN 部分
alter system set "_external_scn_rejection_threshold_hours"=1 scope=spfile sid='*';
alter system set "_external_scn_logging_threshold_seconds"=600 scope=spfile sid='*';
2.5.7 内存参数优化
根据具体的内存进行优化,保证以下原则: SGA+PGA 内存 >60%OS_Mem 并且确保主机交换空间充足
2.5.8 在线日志调整
在线redo日志组建议,每个节点5组,每组一个日志文件,每个日志文件大小不小于500M,由于涉及到导入操作,为了在一定程度加快导入,可以临时将redo设置到1G
2.6 对比生产端参数文件
由于升级涉及到跨版本,将 WINDOWS 端的参数文件 create 出来,并检查是否存在特殊的隐含参数或者 event ,并确认参数用途,如果在 11g 新环境中参数依旧生效,将参数设置到 11g 环境中:
WINDOWS 端执行:
su - oracle
sqlplus "/ as sysdba"
SQL>create pfile='/tmp/initorcl.ora' from spfile;
根据 create 出来的参数文件是否存在特殊参数,如果存在特殊参数,在新 LINUX 端修改。
三 生产端导出操作
3.1 生产端重启数据库操作
为保证数据严格一致性,关闭监听,重启数据库
su - oracle
lsnrctl stop
SQL>shutdown immediate
SQL>startup
确认没有活动客户端连接,确认监听已经停止:
ps -ef | grep tns
ps -ef | grep LOCAL=NO
oracle_trace_facility_name string oracled
3.3 创建比对比表格
|
SELECT D.OWNER, COUNT ( 1 ) FROM dba_objects d WHERE d.OWNER in ( 'SJZLCK', 'YDJW_ZP', 'HZ2004','TEST','DRB','RMAN','MOCHA','CZRKRZSJ','ZJCONN','CZRKTJXX','OGGADMIN','ZJGAZHCX' ) and d.OWNER not in ( 'PUBLIC' ) AND NOT EXISTS ( SELECT 1 FROM DBA_RECYCLEBIN B WHERE B.object_name=D.OBJECT_NAME AND D.OWNER=B.owner) GROUP BY D.OWNER ORDER BY D.OWNER ;
|
标红部分按照具体用户填写
比对表格的创建,方便后期的数据比对:
create table object_201702 as select * from dba_objects
3.4 逻辑导出生产端数据
导出之前先查询字符集
set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
导出:
exp "'"/ as sysdba"'"file=f:\fullorcl.dmp log=f:\orclfull.log full=y
四 生产端导入数据
4.1 创建对应的表空间
根据前期 2.1 及 2.2 部分抽取的语句,创建对应的表空间。
|
查询原库表空间大小 select file_name,tablespace_name,bytes,autoextensible from dba_data_files; 查询新库数据文件存放路径: select name from v$datafile; 根据原库创建表空间,存放数据文件: create tablespace XXX datafile ‘XXX’ size 10G autoextend on; |
4.2
查询原库用户:select * from all_users;
获取原库创建用户的DDL语句:
select dbms_metadata.get_ddl('USER','TEST01')from dual;
4.2 数据导入
imp \'/ as sysdba\' file=fullorcl_%U.dmp log=fullorcl.log full=y parallel=4
是否开启归档
4.3 启动监听
拷贝 WINDOWS 端的 tnsnames.ora 文件到新环境端,并且开启数据库监听文件,确保数据库已经注册到监听中
强制注册
alter system register;
4.4 编译无效对象并确认
@?/rdbms/admin/utlrp.sql
确认不存在无效对象:
|
select a.owner,a.object_name,a.OBJECT_TYPE from dba_objects a,object_201702 b where a.OBJECT_NAME=b.OBJECT_NAME and a.STATUS='INVALID' and b.STATUS='VALID' |
五 应用测试部分
首先由应用进行相关的测试,测试没有问题后将生产主机替换成临时 IP 地址,将目标端 ip 改成原先生产端的 ip 接管业务
更改原WINDOS端IP防止冲突
六OGG搭建
七 迁移失败的回退措施
11.1 立即关闭目标端数据库跟主机
SQL>shutdown immediate
# shutdown -h
11.2 开启生产端数据库
$lsnrctl start
$sqlplus / as sysdba
SQL>startup
至此生产数据没有变动,不影响业务。
