手机软件卸载了数据还在吗 Oracle10g新特性:利用外部表卸载数据
Oracle10g新特性:利用外部表卸载数据
今天在看Oracle的CONCEPT文档时发现 Oracle的外部表也可以用来卸载数据了
从 中开始 Oracle增加了外部表的一个新的访问驱动 ORACLE_DATAPUMP 而再次之前 只有一个默认的驱动ORACLE_LOADER
使用ORACLE_DATAPUMP驱动 带来的一个优点是 可以利用外部表将数据库中的数据卸载到磁盘文件中 而这是 及以前版本所无法做到的
下面看一个最简单的例子
SQL> CREATE TABLE T_EXTERNAL ( ID NAME ) ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY D_OUTPUT LOCATION( TEST DMP ) ) AS SELECT ROWNUM RN TNAME FROM TAB;
表已创建 在这张外部表创建的同时 在D_OUTPUT所指向的操作系统目录下 生成了一个TEST DMP二进制文件 显示这个二进制文件中的可显示字符
$ strings TEST DMP IBMPC/WIN_NT ZHS GBK LBB EMB GHC JWD SD EBE WMF DDG JG SJH SRH JGK CL EGM BJM RAP RLP RP KR PAR MS MRS JLS CET HLT T ZHS GBK AL UTF + : YANGTK T_EXTERNAL ID NAME T_LOG< TEST_LOB< T_PRESS< T_TEMP < T_RECORD< T_SESSION_STAT< T_TEMP< T_NO_EXISTS_BEFORE< T_CHAR< SYS_EXPORT_SCHEMA_ < T_EXTERNAL< T_LOAD_SPACE< T_LEVEL< T_LEVEL < CHAINED_ROWS< T_TREE

这个二进制文件可以用于在其他数据库中创建外部表
SQL> CREATE TABLE T_EXTERNAL ( ID NUMBER NAME VARCHAR ( ) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY D_OUTPUT LOCATION( TEST DMP ) );
表已创建
SQL> SELECT * FROM T_EXTERNAL; ID NAME T_LOG TEST_LOB T_PRESS T_TEMP T_RECORD T_SESSION_STAT T_TEMP T T_NO_EXISTS_BEFORE T_CHAR SYS_EXPORT_SCHEMA_ T_EXTERNAL T_LOAD_SPACE T_LEVEL T_LEVEL CHAINED_ROWS T_TREE
已选择 行
唯一可惜的是Oracle只能将数据写为二进制格式 因此可以考虑使用这种方法进行数据迁移或发布 不过想利用这种方法来生成文本报表也是行不通的
最后提一下 外部表是只读表 可以利用外部表卸载数据 不过必须在建表时完成 一旦表建立成功 外部表就变成不可修改了
SQL> INSERT INTO T_EXTERNAL VALUES ( A ); INSERT INTO T_EXTERNAL VALUES ( A )
*第 行出现错误:
ORA : 操作在外部组织表上不受支持
SQL> DROP TABLE T_EXTERNAL;
表已删除
SQL> CREATE TABLE T_EXTERNAL ( ID NUMBER NAME VARCHAR ( ) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY D_OUTPUT LOCATION( TEST DMP ) );
表已创建
SQL> INSERT INTO T_EXTERNAL VALUES ( A ); INSERT INTO T_EXTERNAL VALUES ( A )
*第 行出现错误:
lishixinzhi/Article/program/Oracle/201311/18827