数据库逻辑迁移方案

来源:这里教程网 时间:2026-03-03 16:39:03 作者:

一 整体项目实施流程

目前需要迁移一套数据库,对应的两套生产库都运行在 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

 

至此生产数据没有变动,不影响业务。

 

相关推荐