有沒有遇到過這樣的問題,
系統設計的時候,會把一些內容比較大的文字內容存入到表中(oracle longe型別最大可以存放2g的文字)
剛開始也許不會有什麼問題,但是時間長了,資料量大了,經常頻繁的insert,update之後,效率開始變低了,
而且備份也會有磁碟大小和備份耗時越來越長的問題。
現在要改變原先的設計
把文字內容匯出到乙個目錄中,每條記錄對應乙個檔案,檔名就使用該記錄的主鍵值,
這樣使用exp備份的時候就不要備份這些文字內容了
下面的儲存過程,使用oracle中內建程式包:utl_file
-- 使用管理員帳號 sys/password 以 sysdba身份登入
--建立要匯出檔案存放目錄
create
orreplace
directory etf as'
f:/exporthtml/';
/--注意 『f:/exporthtml/』 是指oracle伺服器上的磁碟目錄,非個人pc客戶端的磁碟目錄(使用pl/sql客戶端執行的使用者別錯了)
-- 授權
grant execute on utl_file to xyl;
grant read on directory etf to xyl;
--使用 xyl/password 登入繼續下面的操作
--建立匯出儲存過程
--使用主鍵值作為檔名稱
--selectsql: select id,html from mytable
create
orreplace
procedure
exporttofile(selectsql
varchar2
) as
v_file utl_file.file_type;
v_html
long
;
--匯出字段
v_id
varchar2(64
);
--主鍵值,檔名稱
type refcur_t
isref
cursor
;refcur refcur_t;
begin
--v_dir :='
etf'
;
--上面定義的目錄名稱
open
refcur
forselectsql;
--開啟游標
--迴圈游標提取資料
loop
fetch
refcur
into
v_id, v_html;
exit
when
refcur
%notfound;
--開啟檔案
v_file :
=utl_file.fopen('etf', v_id||'
.html',
'w');
--寫入
utl_file.put(v_file,v_html);
--關閉
utl_file.fclose(v_file);
/**/
endloop;
close
refcur;
--關閉游標
exception
when
others
then
ifutl_file.is_open(v_file)
then
utl_file.fclose(v_file);
endif
;end;/
redis 中乙個字段 修改map redis原理
redis單點吞吐量 單點tps達到8萬 秒,qps達到10萬 秒。redis的5中儲存型別 string list set map hash stored set redis的string型別 能表達3中型別 字串 整數和浮點數。根據場景相互間自動轉型,並且根據需要選取底層的承載方式 value內...
oracle分組後合併其中乙個字段 (2)
1 select wmsys.wm concat t.org orgs,t.area name from select concat concat b.abbreviation,b.org name org,a.area name area name from t organization b le...
oracle批量更新乙個表中的乙個字段
最近遇到乙個sql問題。老大們讓我把乙個表中的一列資料做更新。更新的內容和對照表有給提供。後來仔細檢視資料 總結出這樣的sql 語句。update 更新表 b set b.需要更新的字段 select a.參考更新字段 from 對照表 a where a.對照表舊欄位 b.更新表需要更新的字段 注...