专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » unix下数据库编程:利用数据库效用给UNIX命名管道 »正文

unix下数据库编程:利用数据库效用给UNIX命名管道

来源: 发布时间:星期四, 2009年2月12日 浏览:44次 评论:0



  大多数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
  
  根据我测试压缩导出文件只是普通大小 8分的:
  
  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    eger,
    owner    varchar2(8),
    grpname   varchar2(8),
    filesize  eger,
    crdate   date,
    filename  varchar2(256)
  );
  
  为了检测输出可以使用SQL*装入控制文件:
  
  load data
  truncate
  o 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 o 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导航你可以利用它来做其他工作
1

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: