使用PL / SQL过程在oracle 10g中转储表

时间:2009-12-11 08:05:08

标签: oracle plsql export

您需要立即回复,

我想从架构中转储一些选定的表,任何机构都可以告诉我它是否可能? 任何人都可以通过执行我们可以进行转储来提供程序。

e.g。我有架构,testuser和表(T1,T2,T3,T5,T9),我想要转储T1&仅限T5。

提前致谢

4 个答案:

答案 0 :(得分:3)

当您使用10g时,可以使用the Data Pump API执行此操作。您需要对映射到目标OS目录的目录对象具有读写访问权限。

在以下示例中,我将两个表EMP和DEPT导出到由DATA_PUMP_DIR标识的目录中名为EMP.DMP的文件。

SQL> declare
  2      dp_handle       number;
  3  begin
  4      dp_handle := dbms_datapump.open(
  5      operation   => 'EXPORT',
  6      job_mode    => 'TABLE');
  7
  8    dbms_datapump.add_file(
  9      handle    =>  dp_handle,
 10      filename  => 'emp.dmp',
 11      directory => 'DATA_PUMP_DIR');
 12
 13    dbms_datapump.add_file(
 14      handle    => dp_handle,
 15      filename  => 'emp.log',
 16      directory => 'DATA_PUMP_DIR',
 17      filetype  => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);
 18
 19    dbms_datapump.metadata_filter(
 20      handle => dp_handle,
 21      name   => 'NAME_LIST',
 22      value  => '''EMP'',''DEPT''');
 23
 24    dbms_datapump.start_job(dp_handle);
 25
 26    dbms_datapump.detach(dp_handle);
 27  end;
 28  /    

PL/SQL procedure successfully completed.

SQL> 

@DerekMahar问道:

  

“是否有类似的数据泵工具或   API可以从中执行   客户方“

DataPump,PL / SQL API和OS实用程序,都写入Oracle目录。 Oracle目录必须表示数据库可见的OS目录。通常这是服务器上的目录,虽然我认为理论上可以将PC驱动器映射到网络。你必须说服你的网络管理员这是一个好主意,这是一个艰难的卖点,因为它不是......

旧的IMP和EXP实用程序从客户端目录读取和写入,因此理论上可以将本地转储文件IMP到远程数据库中。但我不认为这是一种实用的方法。就其本质而言,转储文件往往很大,因此通过网络导入很慢并且容易出现故障。压缩转储文件,将其复制到服务器并从那里导入它是一个更好的解决方案。

答案 1 :(得分:2)

您应该尝试使用DATAPUMP api(EXPDP / IMPDP)。它具有更多功能并具有PLP / SQL API。 DATAPUMP是exp和imp的替代品,10g支持。

http://www.orafaq.com/wiki/Datapump#Invoking_from_PL.2FSQL

答案 2 :(得分:0)

使用此命令,您将获得二进制Oracle转储: exp scott / tiger file = mydump.dmp tables =(T1,T5)

我推荐此链接:http://www.orafaq.com/wiki/Import_Export_FAQ

答案 3 :(得分:0)

如果您必须使用PL / SQL,而您正在尝试创建文件,那么您需要定义一个目录,并为您的用户授予写访问权限。这是你的DBA可以做的事情。请参阅“create directory”命令。

此时,您可以(1)调用UTL_FILE打开文件并向其写入行或(2)创建“EXTERNAL TABLE”并将信息复制到其中或(3)使用DBMS_XMLGEN或(4)使用实际将数据从数据库写入文件的其他几种方法。所有这些都在Oracle文档中。对于这样的事情,PL/SQL Packages and Types手册是你的朋友。

请注意,实际的文件系统目录必须位于数据库所在的服务器上。因此,您可能需要访问该服务器才能复制文件,或者让某人设置了挂载或其他任何东西。

或者,您可以设置一个可以调用以获取数据的plsql Web服务。

但是,就个人而言,我只是使用exp。或者,如果没有,Toad或其他一些前端工具(甚至是SQL * Plus),您只需编写一个简单的SQL脚本并保存结果。

如果你是为家庭作业做这个,我猜他们会想要一个UTL_FILE解决方案。