您的位置:首页 > 数据库 > Oracle

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

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

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

方法一:用dos命令

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

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

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文件

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



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

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

Oracle Export

Sql Insert

PL/SQL Developer

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



第二种是导出为.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';
然后导出的时候不要选择这些表,最后手动做下。



第三种是导出为.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 登录)

?
--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 登录)

?
--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 登录)

?
--2、通过PL/SQL,cichr_test/cichr_test登录,

Tools-Export Tables,导出D:/data.dmp (oracle Export)-所有表结构及表数据,现在表数据所属表空间应该为CICHR。

--3、将表空间名称修改回去(账号:sys/oracleas SYSDBA 登录)

?
--4、通过PL/SQL, cichr_test/cichr_test登录,

1)、删除Drop 所有tables;

2)、Tools-Import Tables,导入D:/data.dmp(oracle Export)-所有表结构及表数据。

至此所有数据迁移至新的表空间CICHR
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: