您需要立即回复,
我想从架构中转储一些选定的表,任何机构都可以告诉我它是否可能? 任何人都可以通过执行我们可以进行转储来提供程序。
e.g。我有架构,testuser和表(T1,T2,T3,T5,T9),我想要转储T1&仅限T5。
提前致谢
答案 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支持。
答案 2 :(得分:0)
使用此命令,您将获得二进制Oracle转储: exp scott / tiger file = mydump.dmp tables =(T1,T5)
答案 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解决方案。