分类: Oracle
2008-04-09 10:09:29
来源:赛迪网技术社区 作者:kingguo |
大多数Oracle效用,比如导出,导入和SQL*装入程序,但是我们通常会直接使用标准的输入和输出。这个是UNIX 的一个问题,因为大多数时候UNIX都默认或者通过特殊选择允许你使用标准的输入或者输出。
为了接受标准的输入输出,允许你使用链式命令,比如:
这些命令不需要中介文件因为管道的读或者写数据都在不同的线程中。一个管道事实上只是一个记忆的缓冲器,它接受两个不同进程的读写,这两个进程允许它们从前到后的传送数据。记忆缓冲器通常会限制大小;当它满的时候它会阻止写进程,当它空的时候,它回限制读进程。
它们的优势就是永远不会把内存使用光也不会需要任何磁盘存储。当你没有空间存储非压缩版本的时候,上面的例子将允许你存储一个文档的压缩版本。
Oracle的导出和导入不能直接引用标准的输出和输入。但是,一个命名的小窍门允许你完成这个命令。一个命名的管道是一个UNIX文件的操作它影射到操作系统的管道中。
为了创造命名管道,你可以使用p选项来执行mknod命令。习惯上我们可以这么写:mknod -p
根据我的测试,压缩导出文件只是普通大小的八分之一:
SQL*的装载程序是另外一个效用,它可以使用这个技巧。SQL*装入程序可以接受输入输出的数据。比如,你可以创建一个表格捕获输出:
为了检测输出,可以使用SQL*装入程序控制文件:
现在,创建一个命名管道,在背景线程中创建SQL*装入程序:
SQL*装入程序可以装入一个文件到CLOB中,因为命名管道就好像是文件一样,你可以定义命名管道的名字来代替一个文件名并装入输出管道到数据库的CLOB中。
下面来看个例子:
现在,你需要创建SQL*装入程序来控制文件:
为了更详细的展示这个技术,这里有一个简单的脚本。这个脚本将把最新的文档进行命名:
一旦XML文档在CLOB中,你可以使用任何新的XML导航函数。你可以利用它来做其他的工作。 |