Oracle数据库作为目前市场的主流数据库之一,许多应用都在其上进行开发,由于Oracle数据库更新换代的原因和不同的应用程序提供商,可能会造成在一个单位的应用中存在Oracle的几种版本,如Oracle 7、Oracle 8、Oracle 8i,甚至Oracle 9i.。而考虑到数据库集中、维护、备份的方便性和避免设备的重复投资,在应用能兼容的情况下,将几个版本的Oracle数据库移植到一个主流版本上是数据库管理员的一个较优的选择。 |
这就存在从Oracle数据库的低版本移植到高版本和从Oracle数据库的高版本移植到低版本的问题,甚至包括系统平台的迁移如从Windows NT系统迁移到Unix系统。利用Oracle导入/导出工具(Export/Import)能比较方便实现上述移植操作。 |
Oracle导入/导出工具(Export/Import)主要是用来对数据库进行逻辑备份,利用Export导出数据库的转储二进制文件作为数据库Import输入从而达到移植的目的。有二个规则可以参考: |
规则一:从Oracle 低版本的Export数据可以Import到Oracle高版本中,但限于Oracle的相邻版本,如从Oracle 7 到 Oracle 8。对于两个不相邻版本间进行转换,如从Oracle 6 到 Oracle 8,则应先将数据输入到中间版本—Oracle 7,再从中间数据库转入更高版本。 |
规则二:Oracle的Export/Import工具只能连接到拥有更高或者一样的Export/Import版本的数据库。如Oracle 8.0.5的Export/Import(版本8.0.5.0.0)可连接到Oracle 8.1.6数据库(版本8.1.6.0.0);高版本的Export导出来的转储文件,低版本的Import读不了;低版本的Export导出来的转储文件,高版本的Import可以进行读取。 |
利用上面两个规则,下面就本人在为一单位用Oracle的导入/导出工具(Export/Import)进行此种移植碰到的问题,提出来与大家分享,希望能起到抛砖引玉的作用。 |
此单位拥有Oracle数据库版本有Oracle 8.1.6 For NT、Oracle 8.0.5 For NT、Oracle 8.0.4 For Digital Unix、Oracle 7.3 For NT。 |
考虑到Oracle 8.0.4 For Digital Unix运行在小型机上、单位的备份系统也是针对此小型机,决定将Oracle 8.1.6 For NT、Oracle 8.0.5 For NT、Oracle 7.3 For NT的数据库都移植到Oracle 8.0.4 For Digital Unix上。 |
因版本相差甚小,开始直接用Oracle8.0.5的exp80导出数据库的转储文件,然后用FTP(binary传输模式)直接上传至Oracle 8.0.4 所在的小型机,再用Oracle 8.0.4的imp导入一直有字符集的问题,即存有汉字的字段显示的都是”??????”, 移植失败。后发现,在Oracle8.0.5服务器上直接用Oracle8.0.5的imp80对exp80导出的转储文件进行远程导入,字符集的问题解决,移植成功。 |
对于使用Oracle 8.0.4 For Digital Unix的用户,提醒一句,最好不要用Oracle 8.0.4 For Digital Unix的exp、imp工具做备份,而应用此版本的Windows客户端程序exp80、imp80。本人曾做过实验:在Oracle 8.0.4 for Digital UNIN数据库上新建一用户(user)和一个表格(table)通过sql plus客户端在表格的列中插入一些中文行,提交后,用exp 数据导出,再用imp数据导入,用sql plus客户端查看,表中的中文值显示为”???”)。 |
直接用Oracle7.3的export导出数据库的转储文件,拷至Oracle8.0.5服务器,然后用Oracle8.0.5服务器的imp80直接导入至Oracle 8.0.5数据库。此移植就变成了Oracle 8.0.5 For NT移植至Oracle 8.0.4 For Digital Unix的移植。 |
初步设想也通过Oracle 8.0.5进行过度。因其版本比Oracle 8.0.5高、下面对参考的规则进行一些校验。 |
3.1高版本的Export导出来的转储文件,低版本的Import读不了 |
在Oracle 8.1.6数据库服务器导出转储二进制文件:ora816.dmp。 |
在Oracle 8.0.5数据库服务器上用Imp80进行导入。 |
D:>Imp80 house/password file=d:/ ora816.dmp log=d:/ora816.log full=y |
已连接到:Oracle8 Release 8.0.5.0.0 – Production |
PL/SQL Release 8.0.5.0.0 – Production |
IMP-00010: 不是有效的导出文件,标题检验失败 |
IMP-00021: 操作系统错误 - 错误代码(十进制2,十六进制0x2) |
3.2 Oracle的Export/Import工具只能连接到拥有更高或者一样的Export/Import版本的数据库 |
在Oracle 8.1.6数据库服务器导出转储二进制文件:ora816.dmp。 |
在Oracle 8.1.6数据库服务器向Oracle8.0.5数据库进行数据远程导入 |
D:>Imp house/password@orclfrom816to805 file=d:/ ora816.dmp log=d:/ora816.log full=y |
(orclfrom816to805为数据库连接字符串由Oracle8.1.6数据库指向 Oracle8.0.5数据库) |
连接到: Oracle8 Release 8.0.5.0.0 – Production |
PL/SQL Release 8.0.5.0.0 – Production |
经由常规路径导出由EXPORT:V08.01.06创建的文件 |
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入 |
IMP-00003: ORACLE 错误2248出现 |
ORA-02248: 无效的 ALTER SESSION 选项 |
b)在Oracle 8.0.5数据库服务器上用exp80对Oracle 8.1.6数据库进行远程导出。 |
D:>exp80 house/password@orclfrom805to816 file=d:/ora816.dmp log=d:/ora816.log |
(orclfromfrom805to816为数据库连接字符串由Oracle8.0.5数据库指向Oracle8.1.6数据库) |
连接到:Oracle8i Enterprise Edition Release 8.1.6.0.0 – Production |
With the Partitioning option |
JServer Release 8.1.6.0.0 – Production |
已导出ZHS16GBK字符集和ZHS16GBK NCHAR 字符集 |
再对远程导出的转储文件在Oracle 8.0.5数据库服务器上用imp80导入。 |
D:>imp80 house/password file=d:/ora816.dmp full=y log=d:/ora816 _i.log |
此刻此移植就变成了Oracle 8.0.5 For NT移植至Oracle 8.0.4 For Digital Unix的移植。 |
利用Oracle的Oracle导入/导出工具(Export/Import)除了可进行数据库逻辑备份、数据库移植还可以用来提高数据库的性能,对数据库进行一次导入/导出操作能重新组织数据,消除数据库的碎片,从而使数据库的性能有较大的提高。 |
|
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理