Oracle数据库作为目前市场的主流数据库之一许多应用都在其上进行开发由于Oracle数据库更新换代的原因和不同的应用程序提供商可能会造成在一个单位的应用中存在Oracle的几种版本如Oracle Oracle Oracle i甚至Oracle i而考虑到数据库集中维护备份的方便性和避免设备的重复投资在应用能兼容的情况下将几个版本的Oracle数据库移植到一个主流版本上是数据库管理员的一个较优的选择
这就存在从Oracle数据库的低版本移植到高版本和从Oracle数据库的高版本移植到低版本的问题甚至包括系统平台的迁移如从Windows NT系统迁移到Unix系统利用Oracle导入/导出工具(Export/Import)能比较方便实现上述移植操作
Oracle导入/导出工具(Export/Import)主要是用来对数据库进行逻辑备份利用Export导出数据库的转储二进制文件作为数据库Import输入从而达到移植的目的有二个规则可以参考
规则一从Oracle 低版本的Export数据可以Import到Oracle高版本中但限于Oracle的相邻版本如从Oracle 到 Oracle 对于两个不相邻版本间进行转换如从Oracle 到 Oracle 则应先将数据输入到中间版本—Oracle 再从中间数据库转入更高版本
规则二Oracle的Export/Import工具只能连接到拥有更高或者一样的Export/Import版本的数据库如Oracle 的Export/Import(版本)可连接到Oracle 数据库(版本)高版本的Export导出来的转储文件低版本的Import读不了低版本的Export导出来的转储文件高版本的Import可以进行读取
利用上面两个规则下面就本人在为一单位用Oracle的导入/导出工具(Export/Import)进行此种移植碰到的问题提出来与大家分享希望能起到抛砖引玉的作用
此单位拥有Oracle数据库版本有Oracle For NTOracle For NTOracle For Digital UnixOracle For NT
考虑到Oracle For Digital Unix运行在小型机上单位的备份系统也是针对此小型机决定将Oracle For NTOracle For NTOracle For NT的数据库都移植到Oracle For Digital Unix上
Oracle For NT移植
因版本相差甚小开始直接用Oracle的exp导出数据库的转储文件然后用FTP(binary传输模式)直接上传至Oracle 所在的小型机再用Oracle 的imp导入一直有字符集的问题即存有汉字的字段显示的都是?????? 移植失败后发现在Oracle服务器上直接用Oracle的imp对exp导出的转储文件进行远程导入字符集的问题解决移植成功
对于使用Oracle For Digital Unix的用户提醒一句最好不要用Oracle For Digital Unix的expimp工具做备份而应用此版本的Windows客户端程序expimp本人曾做过实验在Oracle for Digital UNIN数据库上新建一用户(user)和一个表格(table)通过sql plus客户端在表格的列中插入一些中文行提交后用exp 数据导出再用imp数据导入用sql plus客户端查看表中的中文值显示为???)
Oracle 移植
直接用Oracle的export导出数据库的转储文件拷至Oracle服务器然后用Oracle服务器的imp直接导入至Oracle 数据库此移植就变成了Oracle For NT移植至Oracle For Digital Unix的移植
Oracle For NT移植
初步设想也通过Oracle 进行过度因其版本比Oracle 高下面对参考的规则进行一些校验
.高版本的Export导出来的转储文件低版本的Import读不了
在Oracle 数据库服务器导出转储二进制文件oradmp
在Oracle 数据库服务器上用Imp进行导入
D:>Imp house/password file=d:\ oradmp log=d:\oralog full=y
/*日志显示*/
已连接到Oracle Release – Production
PL/SQL Release – Production
IMP: 不是有效的导出文件标题检验失败
IMP: 操作系统错误 错误代码(十进制十六进制x)
IMP: 未成功终止导入
. Oracle的Export/Import工具只能连接到拥有更高或者一样的Export/Import版本的数据库
a)Oracle 远程数据导入
在Oracle 数据库服务器导出转储二进制文件oradmp
在Oracle 数据库服务器向Oracle数据库进行数据远程导入
D:>Imp house/password@orclfromto file=d:\ oradmp log=d:\oralog full=y
(orclfromto为数据库连接字符串由Oracle数据库指向 Oracle数据库)
/*日志显示*/
连接到: Oracle Release – Production
PL/SQL Release – Production
……
经由常规路径导出由EXPORT:V创建的文件
已经完成ZHSGBK字符集和ZHSGBK NCHAR 字符集中的导入
IMP: ORACLE 错误出现
ORA: 无效的 ALTER SESSION 选项
IMP: 未成功终止导入
b)在Oracle 数据库服务器上用exp对Oracle 数据库进行远程导出
D:>exp house/password@orclfromto file=d:\oradmp log=d:\oralog
(orclfromfromto为数据库连接字符串由Oracle数据库指向Oracle数据库)
/*日志显示*/
连接到Oraclei Enterprise Edition Release – Production
With the Partitioning option
JServer Release – Production
已导出ZHSGBK字符集和ZHSGBK NCHAR 字符集
即将导出指定的用户
……
在没有警告的情况下成功终止导出
再对远程导出的转储文件在Oracle 数据库服务器上用imp导入
D:>imp house/password file=d:\oradmp full=y log=d:\ora _ilog
显示成功导入
此刻此移植就变成了Oracle For NT移植至Oracle For Digital Unix的移植
利用Oracle的Oracle导入/导出工具(Export/Import)除了可进行数据库逻辑备份数据库移植还可以用来提高数据库的性能对数据库进行一次导入/导出操作能重新组织数据消除数据库的碎片从而使数据库的性能有较大的提高