Chinaunix首页 | 论坛 | 博客
  • 博客访问: 417564
  • 博文数量: 66
  • 博客积分: 1416
  • 博客等级: 上尉
  • 技术积分: 922
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-16 10:37
个人简介

高級Oracle DBA,善長Linux系統維運以及Oracle數據庫管理,開發,調優. 具有多年PL/SQL開發經驗.

文章分类

全部博文(66)

文章存档

2015年(9)

2014年(4)

2013年(5)

2010年(1)

2009年(3)

2008年(6)

2007年(30)

2006年(8)

我的朋友

分类: Oracle

2015-04-28 14:13:36

  Oracle Blob數據欄位中可以存放二進制數據,

  有一段時間, 備份數據增長異常,備份時間也拖長到幾小時. 經分析發現,開發人員設計了存blob的Table,
  將圖片,pdf,xls,email等存進來.
  系統已經交付,在正常運作,怎麼處理才能影響最小,又能達到同樣效果?

我的解決思路是這樣子的.
1.新增一個bfile欄位bfiledata
 2.用utl_file將超過一段時間的blob轉到bfiledata,用排程自動處理.
3.建立bfile轉blob函數
4.修改客戶端查詢代碼, 用nvl(filebin,pkg_lob_data.get_blob(bfiledata)) 替換直接select filebin
    新增,修改部份不動.

相關代碼實現很簡單
2. blob保存到file

点击(此处)折叠或打开

  1. procedure to_file(src in blob, location varchar2, filename varchar2 )
  2.   is
  3.     t_fh utl_file.file_type;
  4.     t_len pls_integer := 32767;
  5.   begin
  6.     t_fh := utl_file.fopen(location, filename, 'wb' );
  7.     for i in 0 .. trunc( ( dbms_lob.getlength( src ) - 1 ) / t_len )
  8.     loop
  9.       utl_file.put_raw( t_fh
  10.                       , dbms_lob.substr( src , t_len , i * t_len + 1 )
  11.                       );
  12.     end loop;
  13.     utl_file.fclose( t_fh );
  14.   end;

  3.

点击(此处)折叠或打开

  1. function get_blob(src in bfile ) return blob is
  2.   dest blob ;
  3.   bfile_loc bfile :=src;
  4. begin
  5.   if src is null then
  6.     return null;
  7.   end if ;
  8.   dbms_lob.createtemporary(dest, true, dbms_lob.call) ;
  9.   dbms_lob.open(bfile_loc, dbms_lob.lob_readonly);
  10.   dbms_lob.loadfromfile(dest, bfile_loc, dbms_lob.getlength(bfile_loc) ) ;
  11.   dbms_lob.close(bfile_loc) ;
  12.   return dest ;
  13. end ;
抓取測試.

点击(此处)折叠或打开

  1. select nvl(filebin,pkg_lob_data.get_blob(bfiledata)) aa
  2. from y3_outapld_files_chris
  3. where rownum <5
問題1.
   bfile指明文件名時可以用子目錄,但utl_file不支持子目錄.  文件過多時不方便管理
解答:在utl_file寫時臨時create directory目錄,處理後刪除. bfilename使用同一個目錄.

  以上為個人在dba工作中的一點處理經驗.

阿飛
  2015/04/28
阅读(2896) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

vipfacebook2015-05-01 11:20:09

不错