【匯入匯出】Oracle 常用匯入匯出工具集錦
新年新群招募: 中國Oracle精英聯盟 170513055
SYS@LEO1>select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 – Production
作業系統資訊
[oracle@leonarding1 admin]$ uname -a
Linux leonarding1.oracle.com 2.6.32-200.13.1.el5uek #1 SMP Wed Jul 27 21:02:33 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
二 比較使用sql*loader的直接載入方式和傳統載入方式的效能差異,給出演示過程和結論。
第一 我們先要生成平面資料(文字資料)
LEO1@LEO1>create table leo2 as select * from dba_objects; 建立資料來源,我們的平面資料就是從這個表中取出
Table created.
第二 我們利用spool工具將螢幕中顯示出來的記錄寫入到指定檔案,這樣我們就可以得到一個平面檔案啦
set termout off; 是否在螢幕上顯示輸出內容,off螢幕不顯示查詢語句,主要與spool結合使用
set feedback off; 關閉本次sql命令處理的記錄條數,預設為on即去掉最後的已經選擇的行數
set echo off; 關閉指令碼中正在執行的SQL語句的顯示
set heading off; 關閉標題的輸出,設定為off就去掉了select結果的欄位名只顯示資料
set trimout on; 去除標準輸出每行後面多餘的空格
set trimspool on; 將每行後面多餘的空格去掉【linesize-實際字元數=多餘空格】
spool /home/oracle/sql_loader/leo3.txt 在螢幕上的所有內容都包含在該檔案中
select owner||','||object_name||','||object_id||','||object_type from leo2;
spool off 只有關閉spool輸出,才會在輸出檔案中看到輸出的內容
備註:在實用SPOOL輸出內容到本地檔案時,需注意編碼格式,否則會出現亂碼的問題
[oracle@leonarding1 sql_loader]$ ll
total 28468
-rw-r--r-- 1 oracle oinstall 3246601 Jun 22 14:06 leo3.txt 已經生成平面檔案leo3.txt
[oracle@leonarding1 sql_loader]$ cat leo3.txt | wc -l 檔案中有72678行記錄
72678
第三 建立裝入的表leo3_loader
LEO1@LEO1>create table leo3_loader
(
owner varchar2(30),
object_name varchar2(130),
object_id number,
object_type varchar2(20)
);
2 3 4 5 6 7
第四 建立sql*loader的控制檔案leo3_loader.ctl
[oracle@leonarding1 sql_loader]$ vim leo3_loader.ctl
load data
infile '/home/oracle/sql_loader/leo3.txt' 待載入的資料檔案
badfile '/home/oracle/sql_loader/leo3_bad.txt' 格式不匹配寫入壞檔案
discardfile '/home/oracle/sql_loader/leo3_discard.txt' 條件不匹配寫入丟棄檔案
append into table leo3_loader 追加的方式插入資料
fields terminated by "," 欄位與欄位之間的分隔符
trailing nullcols 這句的意思是將沒有對應值的列都置為null
(owner,object_name,object_id,object_type) 資料插入的對應欄位
第五 執行sqlldr直接載入命令
[oracle@leonarding1 sql_loader]$ sqlldr leo1/leo1 control=leo3_loader.ctl log=leo3_loader.log direct=true
SQL*Loader: Release 11.2.0.1.0 - Production on Sat Jun 22 14:08:31 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Load completed - logical record count 72678.
已經載入了72678行,條件不匹配有72行,實際載入入72606行
LEO1@LEO1>select count(*) from leo3_loader; 表中也是
72606
我們在看一下sql*loader日誌
。。。省略前部份。。。
Total logical records skipped: 0
Total logical records read: 72678
Total logical records rejected: 0
Total logical records discarded: 72 條件不匹配有72行
Total stream buffers loaded by SQL*Loader main thread: 17
Total stream buffers loaded by SQL*Loader load thread: 6
Run began on Sat Jun 22 14:08:31 2013
Run ended on Sat Jun 22 14:08:34 2013
Elapsed time was: 00:00:02.60 所用耗時2.6秒
CPU time was: 00:00:00.13
使用conventional傳統載入方式寫入資料
LEO1@LEO1>truncate table leo3_loader; 清空表在載入一次
[oracle@leonarding1 sql_loader]$ sqlldr leo1/leo1 control=leo3_loader.ctl log=leo3_loader.log
LEO1@LEO1>select count(*) from leo3_loader; 表中也是
72606
我們在看一下sql*loader日誌
。。。省略前部份。。。
Total logical records skipped: 0
Total logical records read: 72678
Total logical records rejected: 0
Total logical records discarded: 72 條件不匹配有72行
Run began on Sat Jun 22 15:25:45 2013
Run ended on Sat Jun 22 15:26:05 2013
Elapsed time was: 00:00:20.79 所用耗時2.6秒
CPU time was: 00:00:00.48
小結:經過比對direct比conventional要提高了20倍效率,為什麼direct會這麼高效呢,下面我們來說說這兩種的區別。
Direct 特點
(1)資料繞過SGA直接寫入磁碟的資料檔案
(2)資料直接寫入高水位線HWM之後的新塊,不會掃描HWM之前的空閒塊
(3)commit之後移動HWM他人才能看到
(4)不對已用空間進行掃描
(5)使用direct幾乎不產生redo log,不是完全不產生(安全性差),但會產生undo資料
(6)適用OLAP線上分析場景,增 刪 改不頻繁的場景
Conventional傳統載入特點
(1)資料先載入 -> SGA -> 磁碟的資料檔案
(2)會掃描高水位線HWM之前的資料塊,如果有空閒塊(碎片經常DML導致)就會利用,如果沒有再插入新塊
(3)高水位線HWM之前的資料塊是放在SGA區的
(4)會產生redo log和undo資料
(5)安全性高,可恢復資料
(6)傳統載入與SQL語句insert插入沒區別
三 比較資料泵和exp/imp對相同資料匯出/匯入的效能差異,給出演示過程
EXP/IMP 是資料庫傳統的匯出匯入工具,它有使用方便,在服務端和客戶端都可用的優點,速度沒有expdp快,功能沒有expdp強大
EXP 工具幫助文件,我們可以參考幫助文件進行命令列配置
[oracle@leonarding1 ~]$ exp –help 或者 exp help=y
Export: Release 11.2.0.1.0 - Production on Thu Jun 20 07:28:33 2013
Copyright (c) 1982, 2009, 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
Export terminated successfully without warnings.
建立測試表leo1
LEO1@LEO1>set linesize 400 pagesize 999 格式化
LEO1@LEO1>drop table leo1 purge; 清空環境
Table dropped.
LEO1@LEO1>create table leo1 as select * from dba_objects; 建立測試表leo1
Table created.
LEO1@LEO1>insert into leo1 select * from leo1;
72543 rows created.
LEO1@LEO1>insert into leo1 select * from leo1;
145086 rows created.
LEO1@LEO1>insert into leo1 select * from leo1;
290172 rows created.
LEO1@LEO1>insert into leo1 select * from leo1;
580344 rows created.
LEO1@LEO1>commit;
Commit complete.
LEO1@LEO1>insert into leo1 select * from leo1;
1160688 rows created.
LEO1@LEO1>commit;
Commit complete.
LEO1@LEO1>select count(*) from leo1; 現在是232萬
COUNT(*)
----------
2321376
[oracle@leonarding1 ~]$ mkdir exp_dump 建立一個匯出檔案的資料夾
[oracle@leonarding1 ~]$ exp leo1/leo1 file='/home/oracle/exp_dump/leo1.dmp' tables=leo1 rows=y
Export: Release 11.2.0.1.0 - Production on Fri Jun 21 06:38:28 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses ZHS16GBK character set (possible charset conversion)
About to export specified tables via Conventional Path ...
. . exporting table LEO1 2321376 rows exported
Export terminated successfully without warnings. 成功終止匯出,沒有出現告警
[oracle@leonarding1 ~]$ date
Fri Jun 21 06:39:40 CST 2013
匯出從06:38:28開始到06:39:40結束,一共用時72秒
LEO1@LEO1>truncate table leo1; 清空表,我再匯入一下
Table truncated.
[oracle@leonarding1 ~]$ cd exp_dump/
[oracle@leonarding1 exp_dump]$ ll
total 261356
-rw-r--r-- 1 oracle oinstall 267362304 Jun 21 06:39 leo1.dmp 這個就是我們匯出的檔案
[oracle@leonarding1 exp_dump]$ imp leo1/leo1 file='/home/oracle/exp_dump/leo1.dmp' full=y ignore=y
Import: Release 11.2.0.1.0 - Production on Fri Jun 21 06:45:04 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export file created by EXPORT:V11.02.00 via conventional path
import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses ZHS16GBK character set (possible charset conversion)
. importing LEO1's objects into LEO1
. importing LEO1's objects into LEO1
. . importing table "LEO1" 2321376 rows imported
Import terminated successfully without warnings. 成功終止匯入,沒有出現告警
[oracle@leonarding1 exp_dump]$ date
Fri Jun 21 06:48:26 CST 2013
匯入從06:45:04開始到06:48:26結束,一共用時202秒
EXPDP/IMPDP 是Oracle推崇的資料泵匯入匯出工具,用於代替傳統的EXP/IMP,只能在服務端使用,效率比EXP/IMP快幾十倍,有續傳功能和並行功能。這個工具始於Oracle 10g,從Oracle 11g開始不再提供老的EXP/IMP的諮詢但工具還可以使用。
EXPDP工具的效率差不多比EXP快幾倍
IMPDP工具的效率差不多比IMP快幾十倍
所以說這兩個工具適用於大資料匯入匯出的場景
匯出檔案的格式更接近於資料庫本身的檔案格式,避免了資料寫入檔案時的轉換
直接路徑載入,跳過SGA記憶體區,直接載入到高水位線之後
後設資料metadata和資料data在匯出的過程中可以重疊進行,提高匯出的效率。
我們再來看看EXPDP/IMPDP的匯出匯入效果
在使用EXPDP/IMPDP之前我們需要定義一個目錄物件,告知EXPDP/IMPDP工具匯出的檔案和匯入的檔案的存放目錄
LEO1@LEO1>create directory exp_dump as '/home/oracle/exp_dump';
Directory created.
[oracle@leonarding1 exp_dump]$ expdp leo1/leo1 directory=exp_dump dumpfile=expdp_leo1.dmp tables=leo1;
Export: Release 11.2.0.1.0 - Production on Fri Jun 21 07:07:09 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "LEO1"."SYS_EXPORT_TABLE_01": leo1/******** directory=exp_dump dumpfile=expdp_leo1.dmp tables=leo1
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 264 MB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "LEO1"."LEO1" 223.9 MB 2321376 rows
Master table "LEO1"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for LEO1.SYS_EXPORT_TABLE_01 is:
/home/oracle/exp_dump/expdp_leo1.dmp
Job "LEO1"."SYS_EXPORT_TABLE_01" successfully completed at 07:08:22
匯出從07:07:09開始到07:08:22結束,一共用時73秒,匯出檔案大小223.9MB 行數2321376 rows,與exp時間相差1秒,expdp在資料量比較大的時候會體現出高效率。
現在我們impdp匯入
LEO1@LEO1>drop table leo1; 先把表刪除,因為如果表結構存在的話,impdp會認為後設資料已存在報錯,不可匯入
Table dropped.
[oracle@leonarding1 exp_dump]$ impdp leo1/leo1 directory=exp_dump dumpfile=expdp_leo1.dmp
Import: Release 11.2.0.1.0 - Production on Fri Jun 21 07:24:07 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "LEO1"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "LEO1"."SYS_IMPORT_FULL_01": leo1/******** directory=exp_dump dumpfile=expdp_leo1.dmp
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "LEO1"."LEO1" 223.9 MB 2321376 rows
Job "LEO1"."SYS_IMPORT_FULL_01" successfully completed at 07:27:27
匯入從07:24:07開始到07:27:27結束,一共用時200秒,匯入檔案大小223.9MB 行數2321376 rows,比imp時間節約了2秒,impdp也是在資料量比較大的時候會體現出高效率。
四 用外部表的方式查詢當天資料庫alert日誌檔案中當天所有的ora-錯誤資訊,給出演示過程。
外部表:表中的資料以作業系統檔案的方式來存放,現在表中的資料不是放在資料庫中了而是放在作業系統上面,Oracle提供了一種直接讀取外部資料的機制。
外部表好處:1.資料二次開發
2.大資料量遷移
3.充分利用作業系統空間
4.不佔用資料庫空間
5.支援標準SQL條件檢索
外部表也需要目錄物件的支援,透過目錄物件可以知道從哪個目錄讀取文字資料
LEO1@LEO1>create directory alert as '/u02/app/oracle/diag/rdbms/leo1/LEO1/trace';
Directory created.
這是Oracle 11g 告警日誌目錄
grant read,write on directory alert to public; 對這個目錄物件授予讀/寫許可權,並授予所有使用者
LEO1@LEO1>select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ --------------------------------------------------
SYS EXP_DUMP /home/oracle/exp_dump
SYS XMLDIR /u02/app/oracle/product/11.2.0/db_1/rdbms/xml
SYS ALERT /u02/app/oracle/diag/rdbms/leo1/LEO1/trace
SYS DATA_PUMP_DIR /u02/app/oracle/admin/LEO1/dpdump/
SYS ORACLE_OCM_CONFIG_DIR /u02/app/oracle/product/11.2.0/db_1/ccr/state
我們下面就是Oracle告警日誌檔案當作資料庫的一個外部資料來源來訪問,我們使用外部表的方式抽取alert日誌資料,然後使用標準SQL語句來檢索“ora-錯誤資訊”。
下面我們就來建立一個外部表
LEO1@LEO1>create table leo_alert (content varchar2(4000)) alert日誌資料量多因此字串設定的大一點
organization external
(
type oracle_loader 如果你設定的是oracle_datapump請修改為loader
default directory alert
access parameters (
records delimited by newline 每條記錄用換行區分
nobadfile 沒有壞檔案,丟棄檔案,日誌檔案
nodiscardfile
nologfile
)
location ('alert_LEO1.log') 載入告警日誌檔案內容
); 2 3 4 5 6 7 8 9 10 11 12 13
LEO1@LEO1>select count(*) from leo_alert; 一共7198條
COUNT(*)
----------------
7198
我們抽取其中10條ORA-開頭的錯誤記錄顯示出來
LEO1@LEO1>select * from leo_alert where content like '%ORA-%' and rownum<=10;
CONTENT
------------------------------------------------------------------------------------------------------------------------------------------------------------------
ORA-210 signalled during: create tablespace test datafile '/u02/app/oracle/oradata/LEO1/test01.dbf' size 10m autoextend off...
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u02/app/oracle/oradata/LEO1/control01.ctl'
ORA-27041: unable to open file
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u02/app/oracle/oradata/LEO1/control01.ctl'
ORA-27041: unable to open file
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u02/app/oracle/oradata/LEO1/control01.ctl'
ORA-27037: unable to obtain file status
10 rows selected.
小結:這裡需要注意幾個問題,我們在建立外部表的時候需要設定沒有壞檔案,丟棄檔案,日誌檔案引數否則會報錯ORA-29913: error in executing ODCIEXTTABLEOPEN callout。
sql*loader exp/imp expdp/impdp organization_external direct
劉盛
2013.6.22
北京&summer
分享技術~成就夢想
Blog:
##########################################################################################
如果喜歡我的文章就請掃下面二維碼吧!關注微訊號:leonarding_public
在這裡你能得到技術、實事、熱點訊息等新興事物的思考和觀點,別的地方可能沒有的東西。我將為大家提供最新技術與資訊動態,傳遞正能量。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26686207/viewspace-1475557/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料匯入匯出Oracle
- Oracle 資料匯入匯出Oracle
- Oracle資料庫匯入匯出。imp匯入命令和exp匯出命令Oracle資料庫
- Activity 流程模型匯入匯出-activity流程模型匯入匯出模型
- esayExcel匯入匯出Excel
- doris匯入匯出
- Mysql匯入&匯出MySql
- oracle資料匯出匯入(exp/imp)Oracle
- navlicat 匯入匯出SQLSQL
- vue excel匯入匯出VueExcel
- Oracle資料泵的匯入和匯出Oracle
- Oracle資料泵匯出匯入(expdp/impdp)Oracle
- phpMyAdmin匯入/匯出資料PHP
- .net6 匯入匯出
- 【docker】docker映象匯出匯入Docker
- Angular Excel 匯入與匯出AngularExcel
- 資料泵匯出匯入
- sqoop資料匯入匯出OOP
- ASP.NET 開源匯入匯出庫Magicodes.IE 完成Csv匯入匯出ASP.NET
- Vue框架下實現匯入匯出Excel、匯出PDFVue框架Excel
- 38、字符集_2(匯出匯入指定字符集)
- SQLServer匯出匯入資料到MySQLServerMySql
- docker匯入&匯出離線映象Docker
- kxcel, 方便匯入和匯出 ExcelExcel
- AWR跨庫匯出與匯入
- datapump 匯出匯入ORA-07445
- vue + element + 匯入、匯出excel表格VueExcel
- sqoop部署及匯入與匯出OOP
- (十一)Electron 匯入匯出檔案
- Colab pydrive 匯入匯出csv(pandas)
- Oracle 12c expdp和impdp匯出匯入表Oracle
- 【SQL】Oracle BLOB 批量匯入匯出圖片語句SQLOracle
- MySQL入門--匯出和匯入資料MySql
- [Docker核心之容器、資料庫檔案的匯入匯出、容器映象的匯入匯出]Docker資料庫
- mongodb使用自帶命令工具匯出匯入資料MongoDB
- 【oracle 多種形式的外部表匯入、匯出】實驗Oracle
- 【STATS】Oracle匯入匯出優化器統計資訊Oracle優化
- esxi 虛擬機器 匯出 & 匯入虛擬機
- Mysql 資料庫匯入與匯出MySql資料庫