问题描述
我试图更好地了解 Oracle 数据泵功能,该功能用于从一个数据库导出数据并将其导入不同位置的不同数据库。我的目标是创建一个 sql 脚本,以便我可以自动执行大部分工作,并在需要传输数据并减少对 DBA 的依赖的任何时候执行该脚本。我希望我不需要每次都与 DBA 联系(我对数据库的管理员访问权限有限)。
从我目前的研究来看,我见过一些例子,人们编写一些 PL-sql 脚本并在 sql Plus 中运行它们(我认为)。我读到大多数 PL-sql 脚本都可以在 sql Developer 中运行,但不确定数据泵命令是否可以在其中运行。如果可能的话,我想知道我是否可以简单地使用相同的脚本并在 sql Plus 或 sql Developer 中交替使用它,或者我需要做一些小的修改。我不确定我是否可以访问 sql Plus(仍在学习),所以最好使用 sql 开发人员。
我确实发现 sql 开发人员中有一些数据泵向导,您可以在其中运行它,但您需要从程序中的 DBA 面板执行它,我认为我没有必要的凭据/权限当我尝试在那里添加我有限的管理员帐户连接时。在“工具”文件菜单下还看到了一个数据库复制向导功能,我可以使用它,但希望查看是否有我可以在自己的脚本中调用的命令。
谢谢。
解决方法
要做到这一点,您需要正确的权限,但获得权限后就很简单了
假设您只需要导出 schema ,Oracle 有预定义的包可以做到这一点,您只需要更新和修改您需要的内容。
declare
l_dp_handle number;
begin
-- Open a schema export job.
l_dp_handle := dbms_datapump.open(
operation => 'EXPORT',job_mode => 'SCHEMA',remote_link => NULL,job_name => 'The JOB NAME ( FROM YOUR CHOICE)',version => 'LATEST');
然后需要指定转储文件名和目录对象名。
dbms_datapump.add_file(
handle => l_dp_handle,filename => 'The Dump name (output).dmp',directory => 'The location of the dump ( this should be created before run the job)');
如果您需要创建日志,则可选
dbms_datapump.add_file(
handle => l_dp_handle,filename => 'Name of the logs .log',directory => 'Same directory as above',filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);
指定要导出的架构。
dbms_datapump.metadata_filter(
handle => l_dp_handle,name => 'SCHEMA_EXPR',value => '= ''The user should be exported''');
dbms_datapump.start_job(l_dp_handle);
dbms_datapump.detach(l_dp_handle);
end;
/
我强烈建议您阅读文档以了解有关软件包和参数 HERE
的更多信息