利用数据库效用给UNIX命名管道

文章作者 100test 发表时间 2007:03:14 13:54:08
来源 100Test.Com百考试题网


大多数Oracle效用,比如导出,导入和SQL*装入程序,但是我们通常会直接使用标准的输入和输出。这个是UNIX 的一个问题,因为大多数时候UNIX都默认或者通过特殊选择允许你使用标准的输入或者输出。
  
  为了接受标准的输入输出,允许你使用链式命令,比如:
  
  tar cvf - dir | gzip > file.tar.gz
  gunzip < file.tar.gz | tar -xvf –
  
  这些命令不需要中介文件因为管道的读或者写数据都在不同的线程中。
  
  一个管道事实上只是一个记忆的缓冲器,它接受两个不同进程的读写,这两个进程允许它们从前到后的传送数据。记忆缓冲器通常会限制大小;当它满的时候它会阻止写进程,当它空的时候,它回限制读进程。
  
  它们的优势就是永远不会把内存使用光也不会需要任何磁盘存储。当你没有空间存储非压缩版本的时候,上面的例子将允许你存储一个文档的压缩版本。
  
  Oracle的导出和导入不能直接引用标准的输出和输入。但是,一个命名的小窍门允许你完成这个命令。一个命名的管道是一个UNIX文件的操作它影射到操作系统的管道中。
  
  为了创造命名管道,你可以使用p选项来执行mknod命令。习惯上我们可以这么写:mknod -p ;另外,在Linux中,我们这么书写:mknod 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*装入程序可以接受输入输出的数据。比如,你可以创建一个表格捕获输出:
  
  0drop 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)
  )

相关文章


在9i里对基于函数的索引进行仅索引扫描
Oracle10g中新的SQLoptimizerhints
Oracle回滚段表空间文件丢损的处理
忘却Oracle的5个方面
利用数据库效用给UNIX命名管道
如何定义数据库表之间的关系(下)
如何定义数据库表之间的关系(上)
Oracle10G数据库软硬件环境的要求(2)
小心,Oracle数据库访问限制绕过漏洞
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛