oracle如何導(dǎo)出存過 oracle 導(dǎo)出存儲過程的命令

oracle數(shù)據(jù)庫怎么導(dǎo)出存儲過程

Oracle怎么導(dǎo)出存儲過程網(wǎng)友分享于:2014-02-26瀏覽:115次Oracle如何導(dǎo)出存儲過程昨天使用exp可以導(dǎo)出oracle數(shù)據(jù)庫表,今天說下怎么導(dǎo)出存儲過程。首先看下使用pl/sql怎么導(dǎo)出存儲過程。導(dǎo)出步驟:tools--ExportUs

在碌曲等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營銷推廣,成都外貿(mào)網(wǎng)站建設(shè),碌曲網(wǎng)站建設(shè)費(fèi)用合理。

怎樣導(dǎo)出oracle整個(gè)數(shù)據(jù)庫?

1 將數(shù)據(jù)庫TEST完全導(dǎo)出,用戶名system 密碼manager 導(dǎo)出到D:\daochu.dmp中\(zhòng)x0d\x0a exp system/manager@TEST file=d:\daochu.dmp full=y\x0d\x0a2 將數(shù)據(jù)庫中system用戶與sys用戶的表導(dǎo)出\x0d\x0a exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)\x0d\x0a3 將數(shù)據(jù)庫中的表table1 、table2導(dǎo)出\x0d\x0a exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2) \x0d\x0a4 將數(shù)據(jù)庫中的表table1中的字段filed1以"00"打頭的數(shù)據(jù)導(dǎo)出\x0d\x0a exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"\x0d\x0a \x0d\x0a 上面是常用的導(dǎo)出,對于壓縮我不太在意,用winzip把dmp文件可以很好的壓縮。\x0d\x0a 不過在上面命令后面 加上 compress=y 就可以了

教你怎樣在Oracle數(shù)據(jù)庫中高速導(dǎo)出/導(dǎo)入

迄今為止 導(dǎo)出/導(dǎo)入工具集仍是跨多個(gè)平臺轉(zhuǎn)移數(shù)據(jù)所需勞動(dòng)強(qiáng)度最小的首選實(shí)用工具 盡管人們常常抱怨它速度太慢 導(dǎo)入只是將每條記錄從導(dǎo)出轉(zhuǎn)儲文件中讀出來 然后使用常見的 INSERT INTO 命令將其插入到目標(biāo)表中 因此導(dǎo)入可能是個(gè)很慢的過程 這一點(diǎn)并不讓人感到吃驚

進(jìn)入 Oracle Data Pump Oracle Database g 中的導(dǎo)出/導(dǎo)入工具包的更新更快的同類工具 它被設(shè)計(jì)來成倍地加速這個(gè)過程

Data Pump 反映了整個(gè)導(dǎo)出/導(dǎo)入過程的徹底革新 它不是使用常見的 SQL 命令 而是應(yīng)用專用 API 來以更快得多的速度加載和卸載數(shù)據(jù) 在我的測試中 我看到導(dǎo)出性能比在直接模式下提高了 倍 導(dǎo)入過程性能提高了 倍 此外 與使用導(dǎo)出實(shí)用工具不同 它還能夠只取出特定類型的對象(如過程)

Data Pump 導(dǎo)出

這個(gè)新的實(shí)用工具稱為 expdp 以和原來的導(dǎo)出 exp 區(qū)分開 在本例中 我們將用 Data Pump 來導(dǎo)出一個(gè)大表 CASES 大小約為 GB Data Pump 在服務(wù)器端使用文件處理來創(chuàng)建和讀取文件 因此 目錄作為位置使用 在這種情況下 我們將使用文件系統(tǒng) /u /dpdata 來保存轉(zhuǎn)儲文件

create directory dpdata as /u /dpdata ; grant read write on directory dpdata to ananda;  

 

接下來 我們將導(dǎo)出數(shù)據(jù)

expdp ananda/abc tables=CASES directory=DPDATA dumpfile=expCASES dmp job_name=CASES_EXPORT  

讓我們來分析該命令的各個(gè)部分 用戶 ID/口令組合 表和轉(zhuǎn)儲文件參數(shù)的意義是顯而易見的 與原來的導(dǎo)出不同 文件是在服務(wù)器(不是客戶端)上創(chuàng)建的 位置由目錄參數(shù)值 DPDATA 指定 它指向之前創(chuàng)建的 /u /dpdata 這個(gè)進(jìn)程還在目錄參數(shù)指定的位置上創(chuàng)建一個(gè)日志文件(同樣在服務(wù)器上) 默認(rèn)地 這個(gè)進(jìn)程使用一個(gè)名稱為 DPUMP_DIR 的目錄 因此可以創(chuàng)建它來代替 DPDATA

注意上面的參數(shù) job_name 這是個(gè)特殊的參數(shù) 在原來的導(dǎo)出中沒有 所有的 Data Pump 工作都通過作業(yè)來完成 Data Pump 作業(yè) — 與 DBMS 作業(yè)不同 — 只是服務(wù)器進(jìn)程 它代表主進(jìn)程處理數(shù)據(jù) 主進(jìn)程(稱為主控制進(jìn)程)通過高級隊(duì)列 (AQ) 來協(xié)調(diào)這項(xiàng)工作 它通過在運(yùn)行期內(nèi)創(chuàng)建的一個(gè)特殊的表(稱為主表)來實(shí)現(xiàn)這個(gè)目的 在我們的例子中 如果您在 expdp 運(yùn)行時(shí)檢查用戶 ANANDA 的模式 您將注意到一個(gè)表 CASES_EXPORT 的存在(對應(yīng)參數(shù) job_name) 當(dāng) expdp 結(jié)束時(shí) 這個(gè)表被丟棄

導(dǎo)出監(jiān)控

當(dāng) Data Pump Export (DPE) 運(yùn)行時(shí) 按 Control C 它將阻止消息在屏幕上顯示 但不停止導(dǎo)出進(jìn)程本身 相反 它將顯示 DPE 提示符(如下所示) 進(jìn)程現(xiàn)在被認(rèn)為處于 交互式 模式

Export

這種方法允許在這個(gè) DPE 作業(yè)上輸入幾條命令 要查看概要 在提示符下使用 STATUS 命令

Export status Job:CASES_EXPORT Operation:EXPORT Mode:TABLE  State:EXECUTING  Degree: Job Error Count: Dump file:/u /dpdata /expCASES dmp bytes written =  Worker Status: State EXECUTING  Object Schema:DWOWNER Object Name:CASES Object Type:TABLE_EXPORT/TBL_TABLE_DATA/TABLE/TABLE_DATA Completed Objects: Total Objects: Completed Rows:  

記住 這只是狀態(tài)顯示 導(dǎo)出在后臺工作 要繼續(xù)在屏幕上查看消息 從 Export 提示符下使用命令 CONTINUE_CLIENT

并行操作

您可以通過 PARALLEL 參數(shù)為導(dǎo)出使用一個(gè)以上的線程來顯著地加速作業(yè) 每個(gè)線程創(chuàng)建一個(gè)單獨(dú)的轉(zhuǎn)儲文件 因此參數(shù) dumpfile 應(yīng)當(dāng)擁有和并行度一樣多的項(xiàng)目 您可以指定通配符作為文件名 而不是顯式地輸入各個(gè)文件名 例如

expdp ananda/abc tables=CASES directory=DPDATA dumpfile=expCASES_%U dmp parallel= job_name=Cases_Export  

注意 dumpfile 參數(shù)擁有一個(gè)通配符 %U 它指示文件將按需要?jiǎng)?chuàng)建 格式將為 expCASES_nn dmp 其中 nn 從 開始 然后按需要向上增加

在并行模式下 狀態(tài)屏幕將顯示四個(gè)工作進(jìn)程 (在默認(rèn)模式下 只有一個(gè)進(jìn)程是可見的 )所有的工作進(jìn)程同步取出數(shù)據(jù) 并在狀態(tài)屏幕上顯示它們的進(jìn)度

分離訪問數(shù)據(jù)文件和轉(zhuǎn)儲目錄文件系統(tǒng)的輸入/輸出通道是很重要的 否則 與維護(hù) Data Pump 作業(yè)相關(guān)的開銷可能超過并行線程的效益 并因此而降低性能 并行方式只有在表的數(shù)量多于并行值并且表很大時(shí)才是有效的

數(shù)據(jù)庫監(jiān)控

您還可以從數(shù)據(jù)庫視圖獲得關(guān)于運(yùn)行的 Data Pump 作業(yè)的更多信息 監(jiān)控作業(yè)的主視圖是 DBA_DATAPUMP_JOBS 它將告訴您在作業(yè)上有多少個(gè)工作進(jìn)程(列 DEGREE)在工作 另一個(gè)重要的視圖是 DBA_DATAPUMP_SESSIONS 當(dāng)它與上述視圖和 V$SESSION 結(jié)合時(shí)將給出主前臺進(jìn)程的會話 SID

select sid serial# from v$session s dba_datapump_sessions d where s saddr = d saddr;  

這條指令顯示前臺進(jìn)程的會話 更多有用的信息可以從警報(bào)日志中獲得 當(dāng)進(jìn)程啟動(dòng)時(shí) MCP 和工作進(jìn)程在警報(bào)日志中顯示如下

kupprdp:master process DM started with pid= OS id= to execute SYS KUPM$MCP MAIN( CASES_EXPORT ANANDA ); kupprdp:worker process DW started with worker id= pid= OS id= to execute SYS KUPW$WORKER MAIN( CASES_EXPORT ANANDA ); kupprdp:worker process DW started with worker id= pid= OS id= to execute SYS KUPW$WORKER MAIN( CASES_EXPORT ANANDA );  

它顯示為數(shù)據(jù)泵操作啟動(dòng)的會話的 PID 您可以用以下查詢找到實(shí)際的 SID

select sid program from v$session where paddr in (select addr from v$process where pid in ( ));  

PROGRAM 列將對應(yīng)警報(bào)日志文件中的名稱顯示進(jìn)程 DM (為主進(jìn)程)或 DW (為工作進(jìn)程) 如果一個(gè)工作進(jìn)程使用了并行查詢 比如說 SID 您可以在視圖 V$PX_SESSION 中看到它 并把它找出來 它將為您顯示從 SID 代表的工作進(jìn)程中運(yùn)行的所有并行查詢會話

select sid from v$px_session where qcsid = ;  

從視圖 V$SESSION_LONGOPS 中可以獲得其它的有用信息來預(yù)測完成作業(yè)將花費(fèi)的時(shí)間

select sid serial# sofar totalwork from v$session_longops where opname = CASES_EXPORT and sofar != totalwork;  

列 totalwork 顯示總工作量 該列的 sofar 數(shù)量被加和到當(dāng)前的時(shí)刻 — 因而您可以用它來估計(jì)還要花多長時(shí)間

Data Pump 導(dǎo)入

不過 數(shù)據(jù)導(dǎo)入性能是 Data Pump 真正出色的地方 要導(dǎo)入先前導(dǎo)出的數(shù)據(jù) 我們將使用

impdp ananda/abc directory=dpdata dumpfile=expCASES dmp job_name=cases_import  

導(dǎo)入進(jìn)程的默認(rèn)行為是創(chuàng)建表和所有相關(guān)的對象 然后在表已存在時(shí)產(chǎn)生一個(gè)錯(cuò)誤 如果您想把數(shù)據(jù)添加到一個(gè)現(xiàn)有的表中 您可以在上述命令行中使用 TABLE_EXISTS_ACTION=APPEND

和使用 Data Pump 導(dǎo)入一樣 在進(jìn)程中按 Control C 將進(jìn)入 Date Pump Import (DPI) 的交互模式 同樣 提示符是 Import

處理特定對象

您是否有過只需要從一個(gè)用戶導(dǎo)出特定的過程 以在一個(gè)不同的數(shù)據(jù)庫或用戶中重新創(chuàng)建這些過程的情況?與傳統(tǒng)的導(dǎo)出實(shí)用工具不同 Data Pump 允許您只導(dǎo)出特定類型的對象 例如 以下命令讓您只導(dǎo)出過程 而不導(dǎo)出其它任何東西 — 不導(dǎo)出表 視圖 甚至函數(shù)

expdp ananda/iclaim directory=DPDATA dumpfile=expprocs dmp include=PROCEDURE  

要只導(dǎo)出一些特定的對象 — 比如說 函數(shù) FUNC 和過程 PROC — 您可以使用

expdp ananda/iclaim directory=DPDATA dumpfile=expprocs dmp include=PROCEDURE:\ =\ PROC \ \ FUNCTION:\ =\ FUNC \ \

這個(gè)轉(zhuǎn)儲文件充當(dāng)了源對象的一個(gè)備份 您甚至可以用它來創(chuàng)建 DDL 腳本 以供之后使用 一個(gè)稱為 SQLFILE 的特殊參數(shù)允許創(chuàng)建 DDL 腳本文件

impdp ananda/iclaim directory=DPDATA dumpfile=expprocs dmp sqlfile=procs sql

該指令在 DPDATA 指定的目錄中創(chuàng)建一個(gè)名稱為 procs sql 的文件 并將對象的腳本包含在導(dǎo)出轉(zhuǎn)儲文件中 這種方法幫助您快速地在另一個(gè)模式中創(chuàng)建源對象

利用參數(shù) INCLUDE 允許您從轉(zhuǎn)儲文件中定義要包含或排除的對象 您可以使用子句 INCLUDE=TABLE: LIKE TAB% 來僅導(dǎo)出那些名稱以 TAB 開頭的表 類似地 您可以使用結(jié)構(gòu) INCLUDE=TABLE: NOT LIKE TAB% 來排除所有名稱以 TAB 開頭的表 作為另一種選擇 您可以使用 EXCLUDE 參數(shù)來排除特定的對象

lishixinzhi/Article/program/Oracle/201311/17547

Oracle批量導(dǎo)出存儲過程(保持每個(gè)存儲過程獨(dú)立)

略微復(fù)雜,需要存儲過程實(shí)現(xiàn)。

1、創(chuàng)建輸出路徑,比如你要在d盤test目錄下輸出,你就先在d盤根目錄下建立一個(gè)test的目錄。

2、sqlplus下以sysdba登錄,執(zhí)行以下語句

create?or?replace?directory?TMP?as?'d:\test';

grant?read,write?on?directory?TMP?to?scott;?--比如我用的scott用戶

alter?system?set?utl_file_dir='d:\test'?scope=spfile;

3、以上步驟執(zhí)行完,需要重啟數(shù)據(jù)庫。

4、創(chuàng)建一個(gè)存儲過程,代碼如下(基本是不用改動(dòng),原封復(fù)制即可):

CREATE?OR?REPLACE?PROCEDURE?SP_OUTPUT_PROCEDURE?is

file_handle?????utl_file.file_type;

Write_content???VARCHAR2(1024);

Write_file_name?VARCHAR2(50);

v_name??????????varchar2(50);

v_text??????????varchar2(2000);

cursor?cur_procedure_name?is

select?distinct?name?from?user_source?where?type?=?'PROCEDURE';

cursor?cur_sp_out?is

select?t.text

from?(select?0?line,?'CREATE?OR?REPLACE?'?text

from?dual

union

select?line,?text

from?user_source

where?type?=?'PROCEDURE'

and?name?=?v_name)?t

order?by?line;

begin

open?cur_procedure_name;

loop

fetch?cur_procedure_name

into?v_name;

exit?when?cur_procedure_name%notfound;

write_file_name?:=?v_name?||?'.txt';

open?cur_sp_out;

loop

fetch?cur_sp_out

into?v_text;

exit?when?cur_sp_out%notfound;

file_handle???:=?utl_file.fopen('TMP',?write_file_name,?'a');

write_content?:=?v_text;

--write?file

IF?utl_file.is_open(file_handle)?THEN

utl_file.put_line(file_handle,?write_content);

END?IF;

--close?file

utl_file.fclose(file_handle);

end?loop;

close?cur_sp_out;

end?loop;

close?cur_procedure_name;

end;

5、創(chuàng)建完畢執(zhí)行存儲過程,這個(gè)就不贅述了,執(zhí)行完畢后,你會發(fā)現(xiàn)d盤test目錄下的文件名就是以存儲過程名命名的txt文件,如圖:

6、里邊內(nèi)容(就是存儲過程創(chuàng)建時(shí)的代碼,可能排版看著難看點(diǎn),但是不影響使用):

Oracle中用哪個(gè)命令可以批量導(dǎo)出存儲過程

這樣試試:

在sqlplus 下:

set echo off;

set heading off;

set feedback off;

spool c:\proc.txt

--1、用sys用戶等陸的話:

select text from dba_source where owner='YOUR_USER' and type ='PROCEDURE';

--2、用一般用戶(要導(dǎo)出其下存儲過程的用戶):

select text from user_source;

spool off;

oracle如何導(dǎo)出存儲過程

可以使用expdp,不過很麻煩

主要是看你的需求,如果只是一兩個(gè)存儲過程,例:

select text from all_source where name = '‘; --引號里面填寫要查看的存儲過程名字。

網(wǎng)頁題目:oracle如何導(dǎo)出存過 oracle 導(dǎo)出存儲過程的命令
網(wǎng)址分享:http://muchs.cn/article22/hgscjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、關(guān)鍵詞優(yōu)化、網(wǎng)站排名、網(wǎng)頁設(shè)計(jì)公司商城網(wǎng)站、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)