oracle9i中test下所有数据迁移到oracle11G中

时间:2022-06-22 08:30:53

前两天客户要求换数据库,有原来的oracle9i换成11G,整个过程也比较简单,但是也碰到一些小问题,记录下来便于以后参考:

整个的思路如下,首先在本地服务器的数据库中test用户的数据导出到本地,然后再把导出的bmp文件在导入到新服务器的11G中,因为高版本是可以兼容低版本的,所以9I导出的数据是可以导进11G中的,

方法一:用dos命令

1  首先安装oracle客户端(如果不装客户端,dos中输入exp会提示“exp 不是内部命令这样的错误”),这里要注意的是

  安装的oracle客户端版本必须要于你所要导出的oracle版本一直,不然会报这样的错误

oracle9i中test下所有数据迁移到oracle11G中 EXP-00056: 遇到 ORACLE 错误 6550
ORA-06550: 第 1 行, 第 41 列: 
PLS-00302: 必须说明 'SET_NO_OUTLINES' 组件
ORA-06550: 第 1 行, 第 15 列: 
PL/SQL: Statement ignored
EXP-00000: 导出终止失败

     因为我刚开始装的是10G的客户端,所以报了这个错误,后来嫌重装麻烦,就直接跑到服务器上导出了,

2 配置客户端的tnsnames.ora

如果没有这个文件就新建一个,里面加上如下内容

数据库1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =
ip地址)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME =
数据库名)
    )
  )


3  用exp进行导出

dos中执行命令:  exp 用户名/密码@数据库1  file=e:\文件名.dmp  log=e:\log文件名.log   owner=(用户名)


注意: @后面的数据库1是和第2步中的数据库1是对应的   file  是导出的数据库文件,路径可以自己改,

这样应该就可以导出来了


4  用imp导入

导入的时候就简单了,注意:低版本的客户端是可以导入到高版本的

 DOS命令: imp system/manager@新数据库  file=e:\文件名.dmp


方法二:用pl/sql工具导出

这个比较简单,内容是转载来的:

1.导出步骤:

    1.1. tools ->export user object 选择选项,导出.sql文件

   说明:导出的是建表语句(包括存储结构)。

    oracle9i中test下所有数据迁移到oracle11G中

 

   1.2. tools ->export tables-> Oracle Export 选择选项导出.dmp文件

   说明:包含三种导出方式,三种方式都能导出表结构以及数据,如下:

    Oracle Export

    Sql Insert

    PL/SQL Developer

    第一种是导出为.dmp的文件格式,.dmp文件是二进制的,可以跨平台,还能包含权限,效率也很不错,用得最为广泛 。

   oracle9i中test下所有数据迁移到oracle11G中

 

    第二种是导出为.sql文件的,可用文本编辑器查看,通用性比较好,但效率不如第一种,适合小数据量导入导出。尤其注意的是表中不能有大字段(blob,clob,long),如果有,会提示不能导出(提示如下: table contains one or more LONG columns cannot export in sql format,user Pl/sql developer format instead),如果数据库里面有这些字段的表很少,也是可以的,你可以查出哪些表有这些字段,语句如下

select table_name,column_name,data_type from user_tab_columns where data_type='CLOB';
然后导出的时候不要选择这些表,最后手动做下

   oracle9i中test下所有数据迁移到oracle11G中

 

    第三种是导出为.pde格式的,.pde为Pl/sql developer自有的文件格式,只能用Pl/sql developer自己导入导出,不能用编辑器查看。

 

   这里需要说明的是: 我安装的oracle客户端版本高于服务端的版本,这个时候导出dmp是无法成功的,原因不太清楚,没办法我就选择了第三种方法,导出.pde,因为我的表里有clob字段。


2.导入步骤:

   a.tools->import tables->SQL Inserts 导入.sql文件。

   b. tools->import talbes->Oracle Import然后再导入dmp文件。

这一步操作要和你导出数据的一致,假如export tables 生成的是pde,那么这里导入时也选择第三种Pl/sql developer进行导入,其他同样

   说明:和导出类似,具体参考PL/SQL Developer操作手册,另外,导入之前最好把以前的表删除,当然导入另外数据库除外。


我在实施的过程中,也遇到一些问题,因为新的数据库上用户不一样了,而且表空间也不一样了,所以要做如下的修改,有三种方法。

方法一:   --1、修改表空间名称(账号:sys/oracleas SYSDBA 登录)   ?
123 altertablespace CICHR rename toCICHR_BAK; altertablespace USERS rename toCICHR;

 

  --2、导出用户   expcichr-20110804/cichr-20110804@db_192.168.196.232 file=cichr-232-20110804.dmplog=cichr-232-20110804-exp.log statistics = none   --此dmp文件表空间现在应该为CICHR   --3、将表空间名称修改回去(账号:sys/oracleas SYSDBA 登录)   ?
1234 altertablespace CICHR rename toUSERS;      altertablespace CICHR_BAK rename toCICHR;

 

  --4、导入到新创建用户cichr_test(默认表空间为CICHR,临时表空间为TEMP,connect\dba\resource权限,unlimited tablespace)       impcichr_test/cichr_test@db_192.168.196.232 file=c:\cichr-232-20110804.dmp full=ylog=c:\cichr_test-20110804-imp.log   或者:   impcichr_test/cichr_test@db_192.168.196.232 file=c:\cichr-232-20110804.dmpfromuser=cichr-20110804 touser=cichr_test tablespace=CICHRlog=c:\cichr_test-20110804-imp.log   至此所有数据迁移至新的表空间CICHR。   ------------------------------------------   方法二:   1、通过PL/SQL,cichr-20110804/cichr-20110804登录,导出数据库表结构(Tools-Export User Object),导出所有用户对象到D:\structs.sql;   2、使用EditPlus打开structs.sql对表空间名称进行整体替换(USERS替换为CICHR),对用户名进行整体替换(cichr-20110804替换为cichr_test);   3、Tools-Export Tables,导出D:/data.pde (PL/SQL Developer)-所有表数据;   4、创建用户cichr_test(默认表空间为CICHR,临时表空间为TEMP,connect\dba\resource权限,unlimited tablespace);   5、Command Window,执行命令:SQL>@D:structs.sql 回车,创建数据库表结构(所属表空间为CICHR);   6、导入数据表数据,Tools-Import Tables,选择刚刚导出的数据文件D:/data.pde。   至此所有数据迁移至新的表空间CICHR。   -------------------------------------------   方法三:   --1、修改表空间名称(账号:sys/oracleas SYSDBA 登录)   ?
123 altertablespace CICHR rename toCICHR_BAK; altertablespace USERS rename toCICHR;

 

  --2、通过PL/SQL,cichr_test/cichr_test登录,   Tools-Export Tables,导出D:/data.dmp (oracle Export)-所有表结构及表数据,现在表数据所属表空间应该为CICHR。   --3、将表空间名称修改回去(账号:sys/oracleas SYSDBA 登录)   ?
123 altertablespace CICHR rename toUSERS; altertablespace CICHR_BAK rename toCICHR;

 

  --4、通过PL/SQL, cichr_test/cichr_test登录,   1)、删除Drop 所有tables;   2)、Tools-Import Tables,导入D:/data.dmp(oracle Export)-所有表结构及表数据。   至此所有数据迁移至新的表空间CICHR