我給你一些數(shù)據(jù)庫常用的導(dǎo)入導(dǎo)出命令吧:\x0d\x0a該命令在“開始菜單運(yùn)行CMD”中執(zhí)行\(zhòng)x0d\x0a一、數(shù)據(jù)導(dǎo)出(exp.exe)\x0d\x0a1、將數(shù)據(jù)庫orcl完全導(dǎo)出,用戶名system,密碼accp,導(dǎo)出到d:\daochu.dmp文件中\(zhòng)x0d\x0aexp system/accp@orcl file=d:\daochu.dmp full=y\x0d\x0a\x0d\x0a2、將數(shù)據(jù)庫orcl中scott用戶的對象導(dǎo)出\x0d\x0aexp scott/accp@orcl file=d:\daochu.dmp owner=(scott)\x0d\x0a\x0d\x0a3、將數(shù)據(jù)庫orcl中的scott用戶的表emp、dept導(dǎo)出\x0d\x0aexp scott/accp@orcl file= d:\daochu.dmp tables=(emp,dept)\x0d\x0a\x0d\x0a4、將數(shù)據(jù)庫orcl中的表空間testSpace導(dǎo)出\x0d\x0aexp system/accp@orcl file=d:\daochu.dmp tablespaces=(testSpace)\x0d\x0a\x0d\x0a二、數(shù)據(jù)導(dǎo)入(imp.exe)\x0d\x0a1、將d:\daochu.dmp 中的數(shù)據(jù)導(dǎo)入 orcl數(shù)據(jù)庫中。\x0d\x0aimp system/accp@orcl file=d:\daochu.dmp full=y\x0d\x0a\x0d\x0a2、如果導(dǎo)入時,數(shù)據(jù)表已經(jīng)存在,將報錯,對該表不會進(jìn)行導(dǎo)入;加上ignore=y即可,表示忽略現(xiàn)有表,在現(xiàn)有表上追加記錄。\x0d\x0aimp scott/accp@orcl file=d:\daochu.dmp full=y ignore=y\x0d\x0a\x0d\x0a3、將d:\daochu.dmp中的表emp導(dǎo)入\x0d\x0aimp scott/accp@orcl file=d:\daochu.dmp tables=(emp)

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計、網(wǎng)站制作、河津網(wǎng)絡(luò)推廣、微信小程序開發(fā)、河津網(wǎng)絡(luò)營銷、河津企業(yè)策劃、河津品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供河津建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:chinadenli.net
1、使用plsql連接上數(shù)據(jù)庫,展開【Tables】菜單項(xiàng),下面出現(xiàn)的就是數(shù)據(jù)庫表。
2、在數(shù)據(jù)庫表tblTest上面點(diǎn)擊鼠標(biāo)右鍵,選擇【Query data】,此項(xiàng)的目的是查詢這張數(shù)據(jù)庫表的數(shù)據(jù)。
3、點(diǎn)擊完成【Query data】之后,右側(cè)會出現(xiàn)一個SQL語句的窗口,默認(rèn)有一條【select * from 表名】的sql語句,下方還有一個列表,展示這張表中的已有數(shù)據(jù)。
4、然后寫一條insert插入的SQL語句,寫完之后,選中這條SQL,點(diǎn)擊左上角的【次輪狀】圖標(biāo),然后,SQL語句下方會出現(xiàn)【1 row inserted in xx seconds】,表示語句執(zhí)行成功。此時數(shù)據(jù)還沒有真正寫入數(shù)據(jù)庫 insert插入sql格式:insert into 表名(字段1, 字段2, 字段n) values(值1, 值2, 值n)。
5、在Oracle數(shù)據(jù)庫中,對數(shù)據(jù)的變更還需要點(diǎn)擊【Commit】按鈕,也就是左上角向下箭頭的圖標(biāo),如果不點(diǎn)擊這個按鈕,數(shù)據(jù)其實(shí)不會真正存入數(shù)據(jù)庫。點(diǎn)擊【Commit】按鈕后,會彈出一個Confirm窗口,此時點(diǎn)擊【Yes】就將數(shù)據(jù)寫入數(shù)據(jù)庫,點(diǎn)擊【No】則不提交到數(shù)據(jù)庫。
前提:在做insert數(shù)據(jù)之前,如果是非生產(chǎn)環(huán)境,請將表的索引和約束去掉,待insert完成后再建索引和約束。
insert into tab1 select * from tab2; commit;
這是最基礎(chǔ)的insert語句,我們把tab2表中的數(shù)據(jù)insert到tab1表中。根據(jù)經(jīng)驗(yàn),千萬級的數(shù)據(jù)可在1小時內(nèi)完成。但是該方法產(chǎn)生的arch會非常快,需要關(guān)注歸檔的產(chǎn)生量,及時啟動備份軟件,避免arch目錄撐爆。
alter table tab1 nologging;
insert /*+ append */ into tab1 select * from tab2;
commit; alter table tab1 logging;
該方法會使得產(chǎn)生arch大大減少,并且在一定程度上提高時間,根據(jù)經(jīng)驗(yàn),千萬級的數(shù)據(jù)可在45分鐘內(nèi)完成。但是請注意,該方法適合單進(jìn)程的串行方式,如果當(dāng)有多個進(jìn)程同時運(yùn)行時,后發(fā)起的進(jìn)程會有enqueue的等待。注意此方法千萬不能dataguard上用,不過要是在database已經(jīng)force logging那也是沒有問題的。
insert into tab1 select /*+ parallel */ * from tab2; commit;
對于select之后的語句是全表掃描的情況,我們可以加parallel的hint來提高其并發(fā),這里需要注意的是最大并發(fā)度受到初始化參數(shù)parallel_max_servers的限制,并發(fā)的進(jìn)程可以通過v$px_session查看,或者ps -ef |grep ora_p查看。
alter session enable parallel dml;
insert /*+ parallel */ into tab1 select * from tab2; commit;
其他方法:
并發(fā)的insert,尚未比較和方法2哪個效率更高(偶估計是方法2快),有測試過的朋友歡迎補(bǔ)充。
insert into tab1 select * from tab2 partition (p1);
insert into tab1 select * from tab2 partition (p2);
insert into tab1 select * from tab2 partition (p3);
insert into tab1 select * from tab2 partition (p4);
對于分區(qū)表可以利用tab1進(jìn)行多個進(jìn)程的并發(fā)insert,分區(qū)越多,可以啟動的進(jìn)程越多。我曾經(jīng)試過insert 2.6億行記錄的一個表,8個分區(qū),8個進(jìn)程,如果用方法2,單個進(jìn)程完成可能要40分鐘,但是由于是有8個分區(qū)8個進(jìn)程,后發(fā)進(jìn)程有enqueue,所以因此需要的時間為40分鐘×8;但是如果用方法5,雖然單個進(jìn)程需要110分鐘,但是由于能夠并發(fā)進(jìn)程執(zhí)行,所以總共需要的時間就約為110分鐘了。
DECLARE TYPE dtarray IS TABLE OF VARCHAR2(20)
INDEX BY BINARY_INTEGER;
v_col1 dtarray; v_col2 dtarray; v_col3 dtarray;
BEGIN SELECT col1, col2, col3 BULK COLLECT INTO v_col1, v_col2, v_col3
FROM tab2;
FORALL i IN 1 .. v_col1.COUNT insert into tab1
WHERE tab1.col1 = v_col1;
END;
用批量綁定(bulk binding)的方式。當(dāng)循環(huán)執(zhí)行一個綁定變量的sql語句時候,在PL/SQL 和SQL引擎(engines)中,會發(fā)生大量的上下文切換(context switches)。使用bulk binding,能將數(shù)據(jù)批量的從plsql引擎?zhèn)鞯絪ql引擎,從而減少上下文切換過程,提升效率。該方法比較適合于在線處理,不必停機(jī)。
sqlplus -s user/pwd runlog.txt set copycommit 2;
set arraysize 5000;
copy from user/pwd@sid - to user/pwd@sid - insert tab1 using
select * from tab2; exit EOF
用copy的方法進(jìn)行插入,注意此處insert沒有into關(guān)鍵字。該方法的好處是可以設(shè)置copycommit和arrarysize來一起控制commit的頻率,上面的方法是每10000行commit一次。
ORA-00604: 遞歸 SQL 級別 1 出現(xiàn)錯誤,ORA-01000: 超出打開游標(biāo)的最大數(shù)
這兩個錯誤一般出現(xiàn)在利用代碼循環(huán)執(zhí)行數(shù)據(jù)庫命令(例如將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫)時,例如在C#中
1)建立一個OracleConnection
2)循環(huán)創(chuàng)建OracleCommand,并執(zhí)行數(shù)據(jù)導(dǎo)入
3)關(guān)閉OracleConnection
當(dāng)?shù)诙降难h(huán)數(shù)比較小時,代碼運(yùn)行正常。當(dāng)循環(huán)數(shù)超過一定值(例如300),代碼就會出錯。提示:
ORA-01000: 超出打開游標(biāo)的最大數(shù)
這是因?yàn)镺racle數(shù)據(jù)庫中打開的游標(biāo)最大數(shù)為一定值,例如300,當(dāng)代碼中第二步時, 循環(huán)中一個Command占用了一個數(shù)據(jù)庫游標(biāo),執(zhí)行的循環(huán)超過這個數(shù)時就會產(chǎn)生游標(biāo)數(shù)目溢出錯誤。
解決辦法:
第二步循環(huán)中中每次執(zhí)行完OracleCommand,都將command.dispose()下,釋放掉這個資源就好了
此外,也可以修改數(shù)據(jù)庫的最大游標(biāo)數(shù),不過這個方法治標(biāo)不治本。
當(dāng)前文章:oracle數(shù)據(jù)怎么寫入,oracle 文本導(dǎo)入數(shù)據(jù)
URL網(wǎng)址:http://chinadenli.net/article9/dsgiioh.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、自適應(yīng)網(wǎng)站、外貿(mào)建站、營銷型網(wǎng)站建設(shè)、移動網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)