Oracle exp/imp:三思筆記
Export/import導出導入數據
進行數據遷移,具備跨版本,跨平台,跨字符集的數據遷移,
1 exp
Cmd 》exp,imp,文件保存在執行該命令的機器上。
1.1示例
Exp導出中,可以先獲得客戶端和服務器端的版本信息,還可以獲得要導出的字符集跟schema
Exp導出的是一個dump的二進制文件,
使用dbca創建數據庫時,會自動創建執行exp和imp所需的視圖和角色,
1 如果使用create database手工創建,則需要執行cataxp.sql或catalog.sql
F:\oracle\product\10.2.0\client_2\RDBMS\ADMIN\catalog.sql
F:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\catalog.sql
該腳本創建執行exp和imp所需要的數據字典和相關視圖
創建EXP_FULL_DATABASE角色並授予相應權限,擁有該角色的用戶能導出整個db
創建IMP_FULL_DATABASE角色並授予相應權限,擁有該角色的用戶能導入整個db
1 授予權限
Grant connect to scott
Grant EXP_FULL_DATABASE to scot---一般使用有dba權限的用戶進行exp和imp
盡可能用低版本的exp導出,然后用符合目標db的imp版本導入
1.2 調用方式
Exp help=y
使用參數文件形式導出
例如:創建參數文件parameter.dat
File=f:\mydb\exp\useredp.dmp
Indexes=n
Buffer20480000
然后通過exp username/password@orcl parfile=parameter.dat
1.3 處理模式
1 整庫模式:擁有EXP_FULL_DATABASE,IMP_FULL_DATABASE權限可以進行整庫導出導入,對於exp中的full參數
2表空間模式:對於exp中的tablespace參數
3用戶模式:owner參數,可以同時導出多個用戶
4 表模式:導出或導入指定表或表分區,對應參數tables
1.4 exp 導出
1.4.1 導出表中的某些記錄
Parameter.dat
Tables=(scott.emp,scott.emp1)—多個表時,必須都滿足query條件
Query=’where deptno>10 and id<>”a”‘
File=exptable.dmp
Log=exptable.log

1.4.2 導出某些schema下的某些表
Tables=(scott.emp)
Query='where deptno>10'
File=exptable.dmp
Log=exptable.log
1.4.3導出某幾個schema的對象
Owner=(scott,hr)
File=exptable.dmp
Log=exptable.log
進行導出的時候,不會導出外部表(外部表的數據並不存在oracle中),外部表需要把該數據文件復制到目標路徑
1.4.4全庫導出
Full=y
File=exptable.dmp
Log=exptable.log
1.4.5 導出index,constraint,授權等
Exp中還有參數:grants,indexes,constraints,triggers默認都為y
這幾個參數都是基於整個對象級別,如indexes,要么全要,要么全不要,
Tables=(emp)
Indexes=n
File=exptable.dmp
Log=exptable.log
1.4.6 文件太大,超出os限制
新參數filesize=500m
select sum(bytes)/1024/1024 m from user_segments---- 127.1875
File=exptable.dmp,exptable1.dmp-----多個dmp
Log=exptable.log
查詢多個owner下的大小
select owner,sum(bytes)/1024/1024 m from dba_segments
where owner in('SCOTT','HR','SYS')
group by owner
1.4.7 更快導出
常規導出,直接導出
1 常規:默認方式,exp要處理的數據先經過sql select的方式提取,將數據緩存到緩沖池,經由buffer處理后返回給exp客戶端,最后寫入dump文件
緩存區大小=記錄數組大小*記錄行最大長度
Create table emp(id number,value varchar2(20))
行最大長度=20+2+20+2=46,number類型最大長度20,2為定位符,希望緩沖區存放10000記錄的話,那buffer的值10000*46
Indexes=n
Buffer=5000000—5m
Compress=n
File=exptable.dmp
Log=exptable.log
1 直接路徑導出
Direct=y
Recordlength=65535
直接路徑導出:必須在命令行模式或者參數模式下
導出的表中包含lob列,自動切換為常規導出
表空間模式不支持直接路徑導出
直接路徑導出不再指定query參數
1.5 exp常見問題
1 exp 用compress壓縮空間==默認是y
2 導出提示 exp_00091錯誤:
該錯誤的通常原因是執行命令的客戶端nls_lang參數未設定,或設置有誤, select * from v$nls_parameters where parameter='NLS_CHARACTERSET'
NLS_CHARACTERSET ZHS16GBK
然后在exp的命令的客戶端這是nls_lang變量
Set nls_lang=AMERICAN_AMERICA.ZHS16GBK
重新執行exp即可
select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET'
NLS_CHARACTERSET AL32UTF8
select * from nls_instance_parameters;
WINNT> set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LINUX> export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
select userenv('language') from dual;
AMERICAN_AMERICA.AL32UTF8
$export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
3導出數據時報ora_00904錯誤
大致是,執行導出的exp的客戶端的版本比服務器端的版本要高。不同版本會導致ora-06550,還可鞥含有lob字段
4執行導出時莫名停頓,但dump文件瘋漲
可能有外部表的類型引起,exp導出時,只會導出定義,不會導出數據
5 IMP-00010: not a valid export file, header failed verification
導出exp跟導入imp的版本不一樣,高版本導出,低版本導入,手動編輯版本號
6 ORA-01455: 轉換列溢出整數數據類型
EXP-00008: 遇到 ORACLE 錯誤 1455ORA-01455: 轉換列溢出整數數據類型EXP-00000: 導出終止失敗
---低版本的exp導出高版本的
這里10.2導出12.1---報錯
方法:
執行下面
1 select 'alter table '||table_name||' allocate extent;'
from user_tables WHERE SEGMENT_CREATED='NO'
2 select * from user_indexes WHERE SEGMENT_CREATED='NO';
3 select * from user_lobs where segment_created='NO';
在1得出的結果執行
alter table RANDY1 allocate extent;
alter table T allocate extent;
alter table BONUS allocate extent;
在查詢上面3個語句的,返回值都是0行
然后正常執行導出。
11g后面新加的參數deferred_segment_creation=true
新建的表無記錄時,是滯后分配段的,甚至連ddl定義都無法獲取,所以exp無法導出。
7 EXP-00008 RA-01406
EXP-00008: ORACLE error 1406 encountered
ORA-01406: fetched column value was truncated
EXP-00000: Export terminated unsuccessfully
11g r2---10g r2
2 imp
2.1 幾個問題
1 導出的dump的版本比導入的db版本要高的話,有可能會失敗
編輯dump文件的版本信息
2 生成dump文件的用戶及該用戶擁有的角色,如果導出時是dba用戶或用戶全庫的角色,那么導入的用戶也必須要擁有相應的權限
3導出的數據是否用lob類型,分區表,分區索引等,如果有,在導入前做一些工作。。?
2.2 導入指定表到相同用戶
Imp在導入表與exp的讀取順序相同
Imp scott/987064@orcl full=y file=xxxx.dmp log=xxxx.log
imp hr/9870641@orcl file=exptableemp1.dmp log=imptableemp1.log ignore=y

Scott擁有dba角色,而hr用戶沒有,則報錯
Grant dba to hr
select * from user_role_privs;
imp hr/9870641@orcl full=y file=exptableemp1.dmp log=imptableemp1.log ignore=y
該操作是假設目標數據庫的scott用戶的默認表空間與要導入的表的原存儲表空間名完全相同的情況下
2.3 導入指定表到不同的用戶
Fromuser:源db
Touser:目標db
Imp scott/@ fromuser=hr touser=scott file=xxxx log=xxxx ignore=y
這樣導入的可能會發生錯誤
select username,default_tablespace from user_users
SCOTT YYHHQQ
select table_name,tablespace_name from user_tables
查看被導入的表的表空間對否正確
Imp在導入數據時會先創建表結構,該表結構來於exp目標端的屬性,imp在創建表時,會繼承源段的屬性,於是源端存儲在哪個表空間,目標端默認任然會尋找並存儲到那個表空間,如果能找到就存儲,找不到就報錯,
Conn /as sysdba
Alter user hr quota unlimited on yyhhqq;
Revoke unlimited tablespace from hr;
2.4 導入含lob類型的表,且表空間與當前默認的表空間不同
到目標db下,手動創建含lob類型的表
2.5 導入表結構到指定用戶
Imp xxx rows=n
2.6 imp常見問題
1 對象已經存在
加參數 ignore=y,自動忽略已經存在的對象
2 記錄不規范
來源表和目標表結構不一致,
3 Sequence序列未變
如果存在相同名字,在導入前,刪除相同名字的sequence
4 表中的記錄被重復導入
在imp前進行檢查避免重復
重復后,通過sql手動刪除重復的數據
5記錄未被完全導入
執行imp指定了參數ignor=y,一旦發現導入的數據不符合當前的約束條件,導入就會報錯
Not null,check約束,主鍵,外鍵,唯一約束,在日志有詳細的輸出
imp scott/9870641@orcl full=y file=exptableemp1.dmp log=imptableemp1.log ignore=y

2.7 更快導入
指定buffer參數40960000
參數 commit=y,默認情況下,imp會在每成功導入一張表后,提交,設置commit=y,根據buffer來提交,
Indexes=n,創建index很費時,可以后面自己創建
Indexfile參數,先導入數據,指定一個路徑,后面執行腳本來創建索引
IMP-00013: only a DBA can import a file exported by another DBA
6 Imp-00024

Full=y 不能跟formuser同時使用
imp test_hongquan/test_hongquan@192.168.200.20:1521/hongquantest.oracle.com fromuser=test1 touser=test_hongquan full=y file=E:\exp\test1_schemas.dump log=E:\exp\test1schemass.log ignore=y
----出錯
IMP-00009: abnormal end of export file

comit=yes feedback=1000
Dump文件有損壞?
重新導出一個dump文件
exp SOCIALDIAL/SOCIALDIAL@192.168.2.188/pdborcl.localdomain owner=SOCIALDIAL file=E:\exp\SOCIALDIAL188s.dump log=E:\exp\SOCIALDIAL188.log

imp SOCIALDIAL/globaldial@192.168.200.20:1521/hongquantest.oracle.com fromuser=SOCIALDIAL touser=SOCIALDIAL file=E:\exp\SOCIALDIAL188s.dump log=E:\exp\SOCIALDIAL188s_imp_20.log ignore=y
會導入全部記錄,2份數據(前面導入過一次)

imp SOCIALDIAL/globaldial@192.168.200.20:1521/hongquantest.oracle.com full=y file=E:\exp\SOCIALDIAL188s.dump log=E:\exp\SOCIALDIAL188s_imp_20.log ignore=y
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
FROM USER_TABLES u;
SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name)
FROM USER_INDEXES u;
select dbms_metadata.get_ddl('TABLE','EMP','TEST_HONGQUAN') from dual;
---獲取創建表/index的語句
---刪除oracle用戶的對象
DECLARE
-- Local variables here
i INTEGER;
CURSOR cur_objects(obj_type VARCHAR2) IS
SELECT object_name FROM user_objects WHERE object_type IN (obj_type);
obj_name VARCHAR(200);
sql_str VARCHAR(500);
BEGIN
--drop all tables;
OPEN cur_objects('TABLE');
LOOP
FETCH cur_objects
INTO obj_name;
EXIT WHEN cur_objects%NOTFOUND;
dbms_output.put_line('delete table: ' || obj_name);
sql_str := 'drop table ' || obj_name || ' CASCADE CONSTRAINTS ';
EXECUTE IMMEDIATE sql_str;
END LOOP;
CLOSE cur_objects;
--drop all SEQUENCE;
OPEN cur_objects('SEQUENCE');
LOOP
FETCH cur_objects
INTO obj_name;
EXIT WHEN cur_objects%NOTFOUND;
dbms_output.put_line('delete SEQUENCE: ' || obj_name);
sql_str := 'drop SEQUENCE ' || obj_name;
EXECUTE IMMEDIATE sql_str;
END LOOP;
CLOSE cur_objects;
--drop all VIEW;
OPEN cur_objects('VIEW');
LOOP
FETCH cur_objects
INTO obj_name;
EXIT WHEN cur_objects%NOTFOUND;
dbms_output.put_line('delete VIEW: ' || obj_name);
sql_str := 'drop VIEW ' || obj_name || ' CASCADE CONSTRAINTS ';
EXECUTE IMMEDIATE sql_str;
END LOOP;
CLOSE cur_objects;
--drop all FUNCTION;
OPEN cur_objects('FUNCTION');
LOOP
FETCH cur_objects
INTO obj_name;
EXIT WHEN cur_objects%NOTFOUND;
dbms_output.put_line('delete FUNCTION: ' || obj_name);
sql_str := 'drop FUNCTION ' || obj_name;
EXECUTE IMMEDIATE sql_str;
END LOOP;
CLOSE cur_objects;
--drop all PROCEDURE;
OPEN cur_objects('PROCEDURE');
LOOP
FETCH cur_objects
INTO obj_name;
EXIT WHEN cur_objects%NOTFOUND;
dbms_output.put_line('delete PROCEDURE: ' || obj_name);
sql_str := 'drop PROCEDURE ' || obj_name;
EXECUTE IMMEDIATE sql_str;
END LOOP;
CLOSE cur_objects;
--drop all PACKAGE;
OPEN cur_objects('PACKAGE');
LOOP
FETCH cur_objects
INTO obj_name;
EXIT WHEN cur_objects%NOTFOUND;
dbms_output.put_line('delete PACKAGE: ' || obj_name);
sql_str := 'drop PACKAGE ' || obj_name;
dbms_output.put_line(sql_str);
EXECUTE IMMEDIATE sql_str;
END LOOP;
CLOSE cur_objects;
END;
Imp 00017 ora-1659
“IMP-00017: 由於 ORACLE 錯誤 1659,
導出的dmp文件中初始化分配表空間的值過大造成
1 exp命令加上compress=n
2、使用imp中的indexfile=xxx.sql參數,將導入語句生成sql
INITIAL
$ oerr ora 1658
01658, 00000, "unable to create INITIAL extent for segment in tablespace %s"
// *Cause: Failed to find sufficient contiguous space to allocate INITIAL
// extent for segment being created.
// *Action: Use ALTER TABLESPACE ADD DATAFILE to add additional space to the
// tablespace or retry with a smaller value for INITIAL
Imp參數 12c
[oracle@hongquan ~]$ imp help=y
Import: Release 12.1.0.1.0 - Production on Wed Aug 5 02:23:34 2015
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
You can let Import prompt you for parameters by entering the IMP
command followed by your username/password:
Example: IMP SCOTT/TIGER
Or, you can control how Import runs by entering the IMP command followed
by various arguments. To specify parameters, you use keywords:
Format: IMP KEYWORD=value or KEYWORD=(value1,value2,...,valueN)
Example: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
or TABLES=(T1:P1,T1:P2), if T1 is partitioned table
USERID must be the first parameter on the command line.
Keyword Description (Default) Keyword Description (Default)
--------------------------------------------------------------------------
USERID username/password FULL import entire file (N)
BUFFER size of data buffer FROMUSER list of owner usernames
FILE input files (EXPDAT.DMP) TOUSER list of usernames
SHOW just list file contents (N) TABLES list of table names
IGNORE ignore create errors (N) RECORDLENGTH length of IO record
GRANTS import grants (Y) INCTYPE incremental import type
INDEXES import indexes (Y) COMMIT commit array insert (N)
ROWS import data rows (Y) PARFILE parameter filename
LOG log file of screen output CONSTRAINTS import constraints (Y)
DESTROY overwrite tablespace data file (N)
INDEXFILE write table/index info to specified file
SKIP_UNUSABLE_INDEXES skip maintenance of unusable indexes (N)
FEEDBACK display progress every x rows(0)
TOID_NOVALIDATE skip validation of specified type ids
FILESIZE maximum size of each dump file
STATISTICS import precomputed statistics (always)
RESUMABLE suspend when a space related error is encountered(N)
RESUMABLE_NAME text string used to identify resumable statement
RESUMABLE_TIMEOUT wait time for RESUMABLE
COMPILE compile procedures, packages, and functions (Y)
STREAMS_CONFIGURATION import streams general metadata (Y)
STREAMS_INSTANTIATION import streams instantiation metadata (N)
DATA_ONLY import only data (N)
VOLSIZE number of bytes in file on each volume of a file on tape
The following keywords only apply to transportable tablespaces
TRANSPORT_TABLESPACE import transportable tablespace metadata (N)
TABLESPACES tablespaces to be transported into database
DATAFILES datafiles to be transported into database
TTS_OWNERS users that own data in the transportable tablespace set
[oracle@hongquan ~]$ exp help=y
Export: Release 12.1.0.1.0 - Production on Wed Aug 5 03:10:06 2015
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
You can let Export prompt you for parameters by entering the EXP
command followed by your username/password:
Example: EXP SCOTT/TIGER
Or, you can control how Export runs by entering the EXP command followed
by various arguments. To specify parameters, you use keywords:
Format: EXP KEYWORD=value or KEYWORD=(value1,value2,...,valueN)
Example: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
or TABLES=(T1:P1,T1:P2), if T1 is partitioned table
USERID must be the first parameter on the command line.
Keyword Description (Default) Keyword Description (Default)
--------------------------------------------------------------------------
USERID username/password FULL export entire file (N)
BUFFER size of data buffer OWNER list of owner usernames
FILE output files (EXPDAT.DMP) TABLES list of table names
COMPRESS import into one extent (Y) RECORDLENGTH length of IO record
GRANTS export grants (Y) INCTYPE incremental export type--已廢除
INDEXES export indexes (Y) RECORD track incr. export (Y)
DIRECT direct path (N) TRIGGERS export triggers (Y)
LOG log file of screen output STATISTICS analyze objects (ESTIMATE)
ROWS export data rows (Y) PARFILE parameter filename
CONSISTENT cross-table consistency(N) CONSTRAINTS export constraints (Y)
OBJECT_CONSISTENT transaction set to read only during object export (N)
FEEDBACK display progress every x rows (0)
FILESIZE maximum size of each dump file
FLASHBACK_SCN SCN used to set session snapshot back to
FLASHBACK_TIME time used to get the SCN closest to the specified time
QUERY select clause used to export a subset of a table
RESUMABLE suspend when a space related error is encountered(N)
RESUMABLE_NAME text string used to identify resumable statement
RESUMABLE_TIMEOUT wait time for RESUMABLE
TTS_FULL_CHECK perform full or partial dependency check for TTS
VOLSIZE number of bytes to write to each tape volume
TABLESPACES list of tablespaces to export
TRANSPORT_TABLESPACE export transportable tablespace metadata (N)
TEMPLATE template name which invokes iAS mode export
11.2.0.2.0—cloudapi------- 10.2.0.1.0
Imp到
導入schemas
1 初始准備
select count(*) from user_objects------ 1080
1 查看用戶所擁有的表空間
select distinct tablespace_name from dba_segments where owner='GRSV5';
2 查看表空間的大小
select sum(BYTES) /1024/1024 M FROM DBA_data_files where tablespace_name='GRSV5' or tablespace_name='STARHUB' ;
3 查看表空間的創建語句
4 查看用戶的權限與默認的表空間
select * from user_role_privs
select * from database_properties;
5 查看用戶的創建
CREATE TABLESPACE CLOUDAPI DATAFILE
'/u01/app/oracle/oradata/grs/cloudapi.dbf' SIZE 1024M AUTOEXTEND ON NEXT 100M
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
CREATE USER CLOUDAPI
IDENTIFIED BY cloudapi_2014
DEFAULT TABLESPACE CLOUDAPI
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
-- 2 Roles for GRSV5
GRANT RESOURCE TO CLOUDAPI WITH ADMIN OPTION;
GRANT CONNECT TO CLOUDAPI WITH ADMIN OPTION;
ALTER USER CLOUDAPI DEFAULT ROLE ALL;
-- 1 System Privilege for GRSV5
GRANT CREATE JOB TO CLOUDAPI WITH ADMIN OPTION;
-- 1 Tablespace Quota for GRSV5
ALTER USER CLOUDAPI QUOTA UNLIMITED ON CLOUDAPI;
grant create view to CLOUDAPI WITH ADMIN OPTION;
imp CLOUDAPI/cloudapi_2014@grs full=y file=cloudapi_schemas.dump log=cloudapi_schemas1.log ignore=y
select * from user_role_privs;
select * from database_properties;
select distinct tablespace_name from dba_segments where owner='CLOUDAPI';
[oracle@localhost u01]$ imp rcs/Rcs_2013@10.0.1.103:1521/grs full=y file=rcs_schemas.dump log=rcs_schemas_inp.log ignore=y
Import: Release 10.2.0.1.0 - Production on Tue Jul 28 11:14:51 2015
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
IMP-00010: not a valid export file, header failed verification
IMP-00000: Import terminated unsuccessfully
Gnum prod data
-----把壓縮的文件,解壓
/u01/app/oracle/product/10.2.0/client_1/bin/exp SOCIALDIAL/globaldial@socialsgprod.coha8j0ssdjc.ap-southeast-1.rds.amazonaws.com/socialsg owner=SOCIAL
DIAL file=/home/oracle/gnum_pd_bk/oracledb_`date +%F`.dump log=/home/oracle/gnum_pd_bk/oracledb_`date +%F`.log Buffer=10240000 Direct=y Recordlength
=65535 INDEXES=N CONSTRAINTS=N
[oracle@oracle12c ~]$ tar -xvf 20150415-0000.dump.tgz
tar: Removing leading `/' from member names
/home/oracle/gnum_pd_bk/oracledb_2015-04-15.dump
tar czvfP $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
tar xvfP 20150415-0000.dump.tar
[oracle@oracle12c ~]$ tar -zxvf 20150415-0000.dump.tgz
tar: Removing leading `/' from member names
/home/oracle/gnum_pd_bk/oracledb_2015-04-15.dump
[oracle@oracle12c ~]$ file 20150415-0000.dump.tgz
20150415-0000.dump.tgz: gzip compressed data, from Unix, last modified: Tue Apr 14 17:01:02 2015
[oracle@oracle12c ~]$ gunzip 20150415-0000.dump.tgz
[root@oracle12c oracle]# tar xvf 20150415-0000.dump.tar
tar: Removing leading `/' from member names
/home/oracle/gnum_pd_bk/oracledb_2015-04-15.dump
[root@oracle12c oracle]# tar xvfP 20150415-0000.dump.tar
/home/oracle/gnum_pd_bk/oracledb_2015-04-15.dump
[root@oracle12c oracle]# cd gnum_pd_bk/
[root@oracle12c gnum_pd_bk]# ll
total 96448
-rw-r--r-- 1 oracle oinstall 98761245 Apr 14 17:01 oracledb_2015-04-15.dump
----------------------------------------
imp SOCIALDIAL/SOCIALDIAL@192.168.2.188:1521/pdborcl.localdomain fromuser=SOCIALDIAL touser=SOCIALDIAL file=oracledb_2015-04-15.dump log=oracledb_2015-04-15gimp.log ignore=y
