国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

利用數據庫效用給UNIX命名管道

2024-07-21 02:33:28
字體:
來源:轉載
供稿:網友

  大多數Oracle效用,比如導出,導入和SQL*裝入程序,但是我們通常會直接使用標準的輸入和輸出。這個是UNIX 的一個問題,因為大多數時候UNIX都默認或者通過非凡選擇答應你使用標準的輸入或者輸出。
  
  為了接受標準的輸入輸出,答應你使用鏈式命令,比如:
  
  tar cvf - dir gzip > file.tar.gz
  gunzip < file.tar.gz tar -xvf –
  
  這些命令不需要中介文件因為管道的讀或者寫數據都在不同的線程中。
  
  一個管道事實上只是一個記憶的緩沖器,它接受兩個不同進程的讀寫,這兩個進程答應它們從前到后的傳送數據。記憶緩沖器通常會限制大小;當它滿的時候它會阻止寫進程,當它空的時候,它回限制讀進程。
  
  它們的優勢就是永遠不會把內存使用光也不會需要任何磁盤存儲。當你沒有空間存儲非壓縮版本的時候,上面的例子將答應你存儲一個文檔的壓縮版本。
  
  Oracle的導出和導入不能直接引用標準的輸出和輸入。但是,一個命名的小竅門答應你完成這個命令。一個命名的管道是一個UNIX文件的操作它影射到操作系統的管道中。
  
  為了創造命名管道,你可以使用p選項來執行mknod命令。習慣上我們可以這么寫:mknod -p <pipename>;另外,在Linux中,我們這么書寫:mknod <pipename> p.大多數的系統效用中,管道的結果就似乎順序文件,比如,壓縮用戶的導出文件:
  
  mknod /tmp/mypipe p
  eXP userid=scott/tiger file=/tmp/mypipe &
  gzip < /tmp/mypipe > exp.dat.gz
  rm /tmp/mypipe
  
  根據我的測試,壓縮導出文件只是普通大小的八分之一:
  
  mknod /tmp/mypipe p
  imp userid=scott/tiger file=/tmp/mypipe &
  gunzip < exp.dat.gz > /tmp/mypipe
  rm /tmp/mypipe
  
  SQL*的裝載程序是另外一個效用,它可以使用這個技巧。SQL*裝入程序可以接受輸入輸出的數據。比如,你可以創建一個表格捕捉輸出:
  
  drop table lsout;
  create table lsout
  (
    attrs    char(10),
    links    integer,
    owner    varchar2(8),
    grpname   varchar2(8),
    filesize  integer,
    crdate   date,
    filename  varchar2(256)
  );
  
  為了檢測輸出,可以使用SQL*裝入程序控制文件:
  
  load data
  truncate
  into table lsout
  (
    attrs    position(01:10),
    links    position(12:15),
    owner    position(17:24),
    grpname   position(26:34),
    filesize  position(36:42),
    crdate   position(44:55) DATE "Mon DD HH24:MI",
    filename  position(57:300)
  )
  
  現在,創建一個命名管道,在背景線程中創建SQL*裝入程序:
  
  #!/bin/csh
  mknod /tmp/mypipe p
  sqlldr userid=scott/tiger control=lsout.ctl data=/tmp/mypipe skip=1 &
  ls -l > /tmp/mypipe
  wait
  cat lsout.log
  rm /tmp/mypipe
  
  SQL*裝入程序可以裝入一個文件到CLOB中,因為命名管道就似乎是文件一樣,你可以定義命名管道的名字來代替一個文件名并裝入輸出管道到數據庫的CLOB中。
  
  下面來看個例子:
  
  create table xml_repository(doc clob);
  
  現在,你需要創建SQL*裝入程序來控制文件:
  
  load data infile *
  truncate into table xml_repository
  fields terminated by whitespace
  (
    pipe filler,
    doc lobfile(pipe) terminated by eof
  )
  begindata
  /tmp/mypipe
  
  為了更具體的展示這個技術,這里有一個簡單的腳本。
這個腳本將把最新的文檔進行命名:
  
  #!/bin/csh
  mknod /tmp/mypipe p
  wget NOTRACK http://myrss.com/f/c/n/cnnGf9z390.rss -O /tmp/mypipe &
  sqlldr userid=scott/tiger control=xmlload.ctl
  cat xmlload.log
  rm /tmp/mypipe
  
  一旦XML文檔在CLOB中,你可以使用任何新的XML導航函數。你可以利用它來做其他的工作。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临城县| 固安县| 格尔木市| 胶南市| 九龙县| 广汉市| 乡城县| 成安县| 水城县| 当雄县| 巴彦淖尔市| 贞丰县| 陆良县| 本溪| 云和县| 望奎县| 东至县| 长葛市| 洮南市| 平泉县| 开化县| 北川| 湖南省| 诸城市| 佛山市| 鄂托克旗| 陇川县| 于田县| 林口县| 天门市| 峨眉山市| 澎湖县| 板桥市| 行唐县| 临猗县| 榆林市| 溧阳市| 榆中县| 双城市| 崇仁县| 大竹县|