一种Oracle数据库异常迁移现象的解决方法
2012-08-06刘伟
刘 伟
(武汉铁路局信息技术处,武汉430071)
Oracle数据库应用于很多铁路信息系统中,作为Oracle数据库管理员,经常会使用EXP/IMP工具迁移用户数据,特别是在Oracle 较低的8i和9i版本中。本文针对一种较为异常的数据库迁移现象,利用EXP/IMP、UltraEdit工具给出相应的解决方法。
1 数据库迁移背景
2007年某铁路信息系统迁入到IBM P570小型机,Oracle数据库使用EXP/IMP工具完成了8i到9i的迁移。虽然Oracle数据库目前运行的比较稳定,但仍存在众多的数据库用户使用同一个表空间的问题。随着时间的推移,该表空间的数据文件变得越来越多,表空间变得越来越大,成为了一个必须重视的问题。经过技术人员的讨论,决定先将某个重要的用户数据从该表空间中迁移出来。
这次迁移的工作是:在同一个Oracle数据库中,将A用户从表空间ts1迁移到表空间ts2上,并且表空间ts1是不允许删除的。
这个工作可以利用下面几个步骤来完成:
(1)给A用户使用者发出通知,告之在某个时间段进行数据库维护工作,这个时间段暂停对A用户数据的访问;
(2)在这个时间段,对A用户进行加锁操作;
(3)exp system/system_password file=a.dmp log=a_exp.log owner=a;
(4)记录A用户拥有的权限和角色;
(5)drop user a cascade;
(6)create user a identified by a_password default tablespace ts2 temporary tablespace temp;
(7)grant 记录的权限或角色给用户A;
(8)revoke unlimited tablespace from a;
(9)alter user a quota 0 on ts1;
(10)alter user a quota unlimited on ts2;
(11)alter user a quota unlimited on temp;
(12)imp a/a_password file=a.dmp log=a_imp.log fromuser=a touser=a。
在完成了上述12步操作后,A用户的数据从表空间ts1又迁移回到ts1上了,这次迁移失败。对于这个结果,咨询了相关Oracle专家,分析认为可能是Oracle数据库某方面的一个bug。
接下来,技术人员讨论出了另外一种方法。利用UltraEdit工具编辑a.dmp,将a.dmp中tablespace“TS1”全部替换成tablespace“TS2”,然后再利用更改后的a.dmp完成迁移工作。可是a.dmp的文件大小有20 G,加载到PC机内存编辑过程中频繁死机。……
