如何才能最好地重新创建Oracle数据库?

Fra*_* R. 3 sql oracle ddl sqlplus

Oracle 11gR2(x86 Windows):

我有一个包含250个带索引和约束的表的数据库.我需要在新数据库中重新创建这些表,索引和约束并加载数据.我需要知道如何在SQL Plus和/或SQL Developer中执行以下操作,除非有一个神奇的实用程序可以自动执行所有这些操作.提前致谢!

  1. 卸载(导出)250个表中的所有数据.

  2. 创建一个包含CREATE TABLE250个表的语句的sql脚本文件.

  3. 创建一个包含CREATE INDEX250个表的语句的sql脚本文件.

  4. 创建一个包含ALTER TABLE ADD CONSTRAINT250个表的语句的sql脚本文件.

  5. 运行脚本以在新数据库中创建表.

  6. 将导出的数据加载到新数据库的表中.

  7. 运行脚本以创建所有索引.

  8. 运行脚本以添加所有约束.

编辑:我已连接到远程桌面,该桌面链接到Windows Server 2008上的源数据库.远程只安装了Oracle客户端.出于安全原因,我不允许直接从我的本地计算机链接到Win Server,所以我可以将整个源数据库转储到远程数据库然后将其压缩到我的本地目标计算机吗?我正在尝试在我的计算机上复制整个数据库.

Syl*_*oux 6

从Oracle 10g开始,您可以使用Data Pump命令行客户端, expdb 并将impdb 数据和/或模式从一个DB导出/导入到另一个DB.事实上,这两个命令行实用程序只是"使用DBMS_DATAPUMP PL/SQL包中提供的过程执行导出和导入命令,使用在命令行输入的参数"的 包装器.(引自Oracle的文档)

根据您的需求,您必须创建一个目录,然后使用以下命令生成数据库的完整转储expdb:

SQL> CREATE OR REPLACE DIRECTORY dump_dir AS '/path/to/dump/folder/';
Run Code Online (Sandbox Code Playgroud)
sh$ expdp system@db10g full=Y directory=DUMP_DIR dumpfile=db.dmp logfile=db.log
Run Code Online (Sandbox Code Playgroud)

由于转储是使用某种二进制格式编写的,因此您必须使用相应的导入实用程序来(重新)导入数据库.基本上替换expdb通过impdb在上面的命令:

sh$ impdp system@db10g full=Y directory=DUMP_DIR dumpfile=db.dmp logfile=db.log
Run Code Online (Sandbox Code Playgroud)

对于简单的表转储,请使用该版本:

sh$ expdp sylvain@db10g tables=DEPT,EMP directory=DUMP_DIR dumpfile=db.dmp logfile=db.log
Run Code Online (Sandbox Code Playgroud)

如您所知,只要您可以访问给定目录(GRANT READ, WRITE ON DIRECTORY dump_dir TO sylvain;),就可以将其与标准用户帐户一起使用.


有关详细用法说明,请参阅

  • @Frank只需移动`/ oradata`文件夹?我不能说,我从来没有这样做过.但是如果你有权访问该文件夹,你仍然可以使用`expdb`将数据库转储到那里,并只将转储文件复制到你的系统,以便使用`impdb`重新导入._Feel_对我来说更安全. (2认同)