前两天客户要求换数据库,有原来的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 登录)123 | alter tablespace CICHR rename to CICHR_BAK; alter tablespace USERS rename to CICHR; |
--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 | alter tablespace CICHR rename to USERS; alter tablespace CICHR_BAK rename to CICHR; |
--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 | alter tablespace CICHR rename to CICHR_BAK; alter tablespace USERS rename to CICHR; |
--2、通过PL/SQL,cichr_test/cichr_test登录, Tools-Export Tables,导出D:/data.dmp (oracle Export)-所有表结构及表数据,现在表数据所属表空间应该为CICHR。 --3、将表空间名称修改回去(账号:sys/oracleas SYSDBA 登录)
123 | alter tablespace CICHR rename to USERS; alter tablespace CICHR_BAK rename to CICHR; |
--4、通过PL/SQL, cichr_test/cichr_test登录, 1)、删除Drop 所有tables; 2)、Tools-Import Tables,导入D:/data.dmp(oracle Export)-所有表结构及表数据。 至此所有数据迁移至新的表空间CICHR