oracle文本数据导入导出

 

 
.txt形式的文本数据导入oracle数据库... 1
客户端连接数据库导入数据... 1
表数据导出:... 2
数据迁移... 3
利用expimp做简单的数据迁移... 3
通过传输表空间的形式做数据迁移... 4
 
 
 USERID   必须是命令行中的第一个参数。 
exp help=y
imp help=y
将数据库中system 用户与sys 用户的表导出
exp system/manager@TestDB file=E:\sampleDB.dmp owner=(system,sys)
exp system/manager@TestDB file=E:\sampleDB.dmp tables=(TableA,TableB)
将数据库中表tableA 中的字段filed1 值为 " 王五" 的数据导出
exp system/manager@TestDB file=E:\sampleDB.dmp tables=(tableA) query=' where filed1=' 王五'
将一个用户所属的数据导入另一个用户
imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy
imp system/manager file=tank log=tank fromuser=(seapark,amy)
  导入一个或一组指定用户所属的全部表、索引和其他对象
imp system/manager file=seapark log=seapark fromuser=seapark imp
system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)
从多个文件导入
imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)
log=paycheck, filesize=1G full=y
imp system./manager inctype= RECTORE FULL=Y FILE=A
增量导入
imp system./manager inctype= RECTORE FULL=Y FILE=A
 
.txt形式的文本数据导入oracle数据库
客户端连接数据库导入数据
1.      安装有oracle客户端,配好监听。
2.      以oracle数据库app用户的表user_svc_info为例
CREATE  TABLE USER_SVC_INFO(
         PHONE varchar2(20) NOT NULL,
         SVC_ID varchar2(32) NOT NULL,
         P_USERNAME varchar2(100) NULL,
         USER_STATUS number NOT NULL ,
         P_ALIAS varchar2(50) NULL,
         IMSI varchar2(32) NULL,
         SVC_UPDATETIME timestamp(3) NULL,
         SVC_TYPE number NOT NULL,
         SVC_STATUS number NOT NULL,
         REC_UPDATETIME varchar2(20) NULL,
         SVC_IDK varchar2(32) NULL,
         PROSTART_TIME varchar2(24) NULL,
         PROEND_TIME varchar2(24) NULL,
         DOWN_TYPE number NULL )
在e:\sqlldr下创建一个控制命令的脚本文件,通常以.ctl结尾,如info.ctl
脚本内容如下:
load data
infile 'info.txt'
append into table user_svc_info
fields terminated by ','
TRAILING NULLCOLS
(PHONE,SVC_ID,P_USERNAME,USER_STATUS,P_ALIAS,IMSI,
SVC_UPDATETIME timestamp 'yyyy-mm-dd hh24:mi:ss.ff',
SVC_TYPE,SVC_STATUS,REC_UPDATETIME,SVC_IDK,
PROSTART_TIME,PROEND_TIME,DOWN_TYPE)
 
解释说明:
infile 'info.txt' 表示要导入的文本文件名为info.txt
append into table 后接要导入的表名
此处用append表示追加到表中,若用
Insert 表示导入空表,有数据则停止;
Replace表示原来表中如果有数据,则会被删除(用delete from table语句)
Truncate表示原来表中如果有数据,则会被清除(用truncate table语句)
fields terminated by ',' 数据中每行记录用”,”分隔
TRAILING NULLCOLS     表的字段没有对应的值时允许为空
括号内为表的所有字段,日期格式的字段要进行转换,如上SVC_UPDATETIME若是date类型,则用SVC_UPDATETIME date 'yyyy-mm-dd hh24:mi:ss'
脚本写好后,脚本与info.txt放在同一个文件夹内,在cmd下执行命令:
E:
cd e:\sqlldr
sqlldr userid=app/app@imusic control=info.ctl
 
表数据导出:
在操作系统下创建导出脚本(要赋予此脚本可执行权限):
表数据导出脚本:
以app用户下的user_svc_info为例,若要使如下语句的结果导出成.txt文件,每个字段的值以”,”分隔:
Select phone,svc_type,svc_udatetime from user_svc_ifno where rownum<100;
可以oracle用户登录系统,创建脚本如vim info.sh
#!/bin/bash
sqlplus "app/app"<<EOF
set heading off;
set echo off;
set feedback off;
set verify off;
set wrap off;
set pagesize 0;
set linesize 2500;
set trimout on;
set trimspool on;
spool /usr/local/oracle/user_svc_info_sql.txt;
select phone||','||svc_type||','||svc_updatetime from user_svc_info where rownum<100;
set define on;
set heading on;
set echo on;
set feedback on;
spool off
quit;
EOF
 
 
执行脚本:
./info.sh
生成的user_svc_info_sql.txt文件则是想导出的数据文件。
 
Set heading  on/off;   让结果行的标题显示/不显示
set echo on/off;控制是否在执行命令时打印出所执行的命令,OFF则不打印。
set feedback on/off显示由脚本返回的记录数时,脚本选择至少n个记录。 ON或OFF打开或关闭此显示。
set verify on/off控制是否列出在sql语句或PL/SQL脚本中变量替换的值
set wrap on/off; 控制是否截断选定行显示如果当前行太宽长。OFFz则是关闭选定行截断;既允许选择的行换行到下一行。
set trimout on/off;确定是否允许在每行末尾显示空白,OFF允许在每行末尾显示空白,ON不允许输出空白。
set trimspool on/off;确定是否允许在每行末尾显示空格,OFF允许在每行末尾显示空格,ON不允许输出空格。
 
数据迁移
利用exp和imp做简单的数据迁移
grant dba to scott;
exp scott/tiger buffer=20000000 file=/home/oracle/scott09.dmp direct=y log=/home/oracle/exp.log;
注意:导入时要赋予新数据库用户dba权限
imp scott/tiger buffer=20000000 file=/home/oracle/scott09.dmp full=y commit=y log=/home/oracle/imp.log;
revoke dba from scott;
 
通过传输表空间的形式做数据迁移
1.sys用户下检查表空间自包含
exec sys.dbms_tts.transport_set_check('TBS_NAME',TRUE);
select * from sys.transport_set_violations;
2.尽量缩小表空间对应的数据文件大小并设定表空间为只读,将此数据文件缩减到最小,如果一次性迁移则先删除索引。
alter tablespace TBS_NAME read only;
3.开始exp
exp userid=\'sys/sys as sysdba\' transport_tablespace=y tablespaces=TBS_NAME file=test.dmp
4.将导出的文件以及相关的表空间的数据文件拷贝到目标数据库对应的目录后,导出test.dmp
查看此表空间对应的数据文件
select b.name from v$tablespace a,v$datafile b where a.ts#=b.ts# and a.name='TBS_TEST';
设置表空间read write
5.进入目标机器,创建对应表空间的用户,不必指定缺省表空间
creater user test identified by test;
6.导入
imp userid=\'sys/sys as sysdba\' file=/home/oracle/test.dmp transport_tablespace=y datafiles=/oracle/app/oradata/STAND/test01.dbf
7.新数据库导入完毕后将新传输进来的表空间设置为读写状态。

你可能感兴趣的:(oracle,职场,exp,休闲)