不同表空间导入数据

来源:互联网 发布:图片 js 点击放大 wap 编辑:程序博客网 时间:2024/05/13 16:00
随着业务的不断拓展,我们经常需要对系统进行调整,比如:存储系统升级、服务器升级、平台的迁移、数据库版本升级等等,这些情况我们都需要借助数据迁移工作来完成。

  在迁移过程中,我们经常会遇到一些很难解决的问题。因为,如果是在相同的操作系统平台、或相同的数据库平台之间做数据库的迁移,会有较多解决方案能够实现;但是,如果在异构环境下,做操作系统的升级或变更、数据库的升级、存储设备的升级等等,都大幅度地提高了迁移的复杂程度。
数据库迁移要求:
1、要求业务系统可用时间最大化,最好支持在线迁移
2、数据零丢失
3、快速导出、导入
4、完整的备份方案
5、严格的控制

环境概况:
源库:
IP:
系统:windows xp
数据库版本:oracle 10g 32bit
用户:ecims_aio/ecims_aio
表空间:user
目标库:
IP:
系统:linux centos6.6
数据库版本:oracle 11g 64bit
用户:ecims_aio/ecims_aio

表空间:ecimsaio_data(数据表空间)、ecimsaio_index_data(索引表空间)
数据库迁移工具选择:
源数据库跟目标数据库表空间不一致所以选用expdp/inpdp导出/导入工具,通过数据磅的 remap_tablespace=source_tbs:target_tbs

需求:
异构平台,不同版本数据库数据文件迁移。要求windows 2003 oracle 10.2.0 数据文件迁移到 centos 6.6 oracle 11.2.0。
需求分析:
不同版本,不同平台,可选择的方案很多,考虑到数据量不是很大(大约1G),建议使用exp/imp或者expdp/impdp工具。因为两个数据库之间的用户所属表空间不同,所以建议使用expdp/impdp工具,可以使用remap_tablespace参数转换表空间。
迁移步骤:
源库数据导出、备份
1、以sysdba登录到源服务器创建directory对象

create directory mydir as 'D:/mydir';

2、赋予用户ECIMS_AIO读写权限

grant writeread on directory mydir to ECIMS_AIO;

3、使用数据泵导出数据

    expdp ECIMS_AIO/ECIMS_AIO directory=mydir dumpfile=ecims_20160226_expdp.dump logfile=ecims_20160226_expdp.log ;

目标数据库数据导入
1、在目标数据端创建directory对象:

        create directory mydir as '/home/oracle/mydir';

2、赋予用户ECIMS_AIO读写权限 :

grant writeread on directory mydir to ECIMS_AIO;

3、在目标数据库创建用户及表空间:
删除用户ECIMS_AIO下所有对象

drop user ECIMS_AIO cascade;    

删除表空间

drop tablespace ECIMSAIO_DATA including contents and datafiles;  

删除表空间

drop tablespace ECIMSAIO_INDEX_DATA including contents and datafiles;  

创建用户

CREATE USER ECIMS_AIO IDENTIFIED BY ECIMS_AIO ACCOUNT UNLOCK;   

授予权限,因为要创建表空间所以授予dba权限

GRANT create SESSION,RESOURCE,DBA TO ECIMS_AIO;             --

默认ECIMS_AIO用户默认表空间

CONN  ECIMS_AIO/ECIMS_AIOCREATE TABLESPACE ECIMSAIO_DATA DATAFILE  '+DATA/jhdb/datafile/ECIMSAIO_DATA.DBF'  SIZE 500M AUTOEXTEND ON NEXT 50M;    

存放索引

alter user ECIMS_AIO default tablespace ECIMSAIO_DATA;CREATE TABLESPACE ECIMSAIO_INDEX_DATA DATAFILE  '+DATA/jhdb/datafile/ECIMSAIO_INDEX_DATA.DBF'  SIZE 500M AUTOEXTEND ON NEXT 50M;        
  1. 把目标数据库导出的数据文件上传到mydir下面
    使用ftp工具把导出的数据上传到制定的地方
  2. 使用数据泵导入数据并转化表空间,将user表空间的数据转换到ecimsaio_data
impdp ECIMS_AIO/ECIMS_AIO directory=aiodir dumpfile=ECIMS_20160226_EXP.DUMP logfile=    ECIMS_20160226_impdp.log  parallel=4  cluster=n  remap_tablespace=users: ECIMSAIO_DATA;
  1. 重建索引文件:
    重建索引
select index_name,table_owner,table_name from dba_ind_columns   where index_owner='ECIMS_AIO';select ' alter index '||index_name||' rebuild tablespace    ECIMSAIO_INDEX_DATA;' From dba_ind_columns where    index_owner='ECIMS_AIO'
  alter index STEEL_RES_PRIMARY_KEY rebuild tablespace ECIMSAIO_INDEX_DATA;

错误案例:

EXP-00091: Exporting questionable statistics.导出错误的统计信息,查询官方文档可知是 exp工具和db数据库字符信息不一致导致。我们可以在使用exp工具导出的时候修改下nls_lang信息 set NLS_LANG=AMERICA_AMERICA.AL32UTF8 (win)设置跟db数据库字符集一致。

EXP-00106: Invalid Database Link Passwords.无效的数据库链接密码,查询官方文档可知是 exp工具跟db数据库版本不一致导致,严格上讲客户端的版本要比db数据库版本要高,解决方案是升级exp工具版本。

原创粉丝点击