这段时间我们单位因为业务需求,要求将历史数据保留使用。我对ORACLE中数据移动方面做了些事情,了解了一些窍门。希望与和我一样刚开始做ORACLE系统管理的鸟们共享。
一般来说,我们喜欢用EXP,IMP来备份,移动数据。但是如果遇到的是每过一段时间就要删除的数据库来说。即使是利用增量备份也可能造成保留数据不全面的情况。
由于,我使用的数据中,表的主要字段不包括二进制的数据。我选择使用SQLPLUS将数据导出,然后利用SQL LOADDER,将数据导入到备份数据库中使用。另外可以结合UNIX SHELL编写自动在删除数据前导出数据,自动利用FTP传送数据文件到目标服务器,然后自动加载数据的脚本。这样数据移行的工作就完成了。大概方式例如:
首先进入SQLPLUS环境SQL> desc usertbl
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 USERNAME                                           VARCHAR2(20)
 USERPASS                                           VARCHAR2(20)
 USERCOMM                                           VARCHAR2(100)
 USERPRIV                                           NUMBER(2)
保存数据字段信息,以供以后编写控制文件使用。
然后编写洋自动生成数据文件的SQL文件
vi out.sql
sqlplus  webhisres/webhisres <<!
set heading off
set feedback off
set trimspool on
set pagesize 0
set linesize 200
set echo off
spool out.temp
select * from  usertbl;
spool off
exit
然后再编写一个SH文件
out.sql
cat out.temp|egrep -v SQL > out.dat
编写成功后,确认以上几个文件具有可以执行的权利
执行out.sh就可以生成数据文件了。
然后根据先前保留的字段信息编写数据文件的CTL文件
vi out.ctlLOAD DATA 
INFILE './out.dat'
INTO TABLE usertbl
APPEND 
(
 USERNAME                        POSITION(1:21)    CHAR,
 USERPASS                        POSITION(22:43)   CHAR,
 USERCOMM                        POSITION(43:153)  CHAR,
 USERPRIV                        POSITION(153:154) INTEGER
 )
控制文件编写完毕后,拷贝数据文件和控制文件到目标电脑上,
然后执行以下语句就可以了。
sqlldr webhisres/webhisres control=out.ctl log=out.log希望有朋友可以提出更好的方法来移行数据。