博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何从逻辑备份的dumpfile文件里获取DDL脚本?
阅读量:5818 次
发布时间:2019-06-18

本文共 7946 字,大约阅读时间需要 26 分钟。

hot3.png

在数据库的管理工作中,难免会遇到使用Export/Import或者是EXPort Data Pump/IMPort Data Pump工具来执行逻辑备份、恢复的场景。在有些时候,我们可能会对产生的dumpfile的内容感兴趣。本文就这两种工具产生的逻辑备份文件分别描述如何获取数据定义语句(Data Definition Language)的脚本?

1 先来看,如何从传统的Export工具产生的dumpfile里获取DDL语句?

首先,导出HR用户的所有对象:

rac1->id uid=1101(oracle) gid=1000(oinstall)groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper) rac1->pwd /home/oracle rac1->ls-l total 24 drwxrwxr-x 17 root   root      4096 May 26 21:20 12419321 -rw-r--r--  1 oracle oinstall 15626 Aug 31 14:28 db.rsp drwxr-x---  3 oracle oinstall  4096 Aug 31 15:03 oradiag_oracle rac1-> exp hr/hrfile=exp_hr.dmp log=exp_hr.log owner=hr Export: Release 11.2.0.1.0 - Production on Mon Nov 21 16:50:22 2011 Copyright (c) 1982, 2009, Oracle and/orits affiliates.  All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Tes ExportdoneinAL32UTF8 charactersetand AL16UTF16 NCHAR characterset . exporting pre-schema procedural objects and actions . exporting foreignfunctionlibrary namesforuser HR . exporting PUBLICtypesynonyms . exporting privatetypesynonyms . exporting objecttypedefinitionsforuser HR About toexportHR's objects ... . exporting database links . exporting sequence numbers ..... ..... . exporting statistics Export terminated successfully without warnings. rac1->ls-l total 23656 drwxrwxr-x 17 root   root         4096 May 26 21:20 12419321 -rw-r--r--  1 oracle oinstall    15626 Aug 31 14:28 db.rsp -rw-r--r--  1 oracle oinstall 24166400 Nov 21 16:51 exp_hr.dmp -rw-r--r--  1 oracle oinstall     2493 Nov 21 16:51 exp_hr.log drwxr-x---  3 oracle oinstall     4096 Aug 31 15:03 oradiag_oracle rac1->

我们已经顺利导出了一份exp_hr.dmp的dumpfile,那么该如何从该文件里获取DDL语句呢?

我们可以利用传统的导入工具Import附带SHOW=y选项来获取:

rac1-> imp hr/hrfile=exp_hr.dmp log=show_ddl.log  show=y Import: Release 11.2.0.1.0 - Production on Mon Nov 21 17:03:26 2011 Copyright (c) 1982, 2009, Oracle and/orits affiliates.  All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Tes Exportfilecreated by EXPORT:V11.02.00 via conventional path importdoneinAL32UTF8 charactersetand AL16UTF16 NCHAR characterset . importing HR's objects into HR "BEGIN  " ... ... Import terminated successfully without warnings. rac1-> rac1->ls-l total 23688 drwxrwxr-x 17 root   root         4096 May 26 21:20 12419321 -rw-r--r--  1 oracle oinstall    15626 Aug 31 14:28 db.rsp -rw-r--r--  1 oracle oinstall 24166400 Nov 21 16:51 exp_hr.dmp -rw-r--r--  1 oracle oinstall     2493 Nov 21 16:51 exp_hr.log drwxr-x---  3 oracle oinstall     4096 Aug 31 15:03 oradiag_oracle -rw-r--r--  1 oracle oinstall    28766 Nov 21 17:03 show_ddl.log rac1->head-30 show_ddl.log Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Tes Exportfilecreated by EXPORT:V11.02.00 via conventional path importdoneinAL32UTF8 charactersetand AL16UTF16 NCHAR characterset . importing HR's objects into HR "BEGIN  " "sys.dbms_logrep_imp.instantiate_schema(schema_name=>SYS_CONTEXT('USERENV','" "CURRENT_SCHEMA'), export_db_name=>'DEVDB', inst_scn=>'41155490');" "COMMIT; END;" "CREATE TYPE "MY_TEST_TYPE" TIMESTAMP '2011-10-12:09:59:12' OID 'AF115DDE620" "59E4AE04010ACBF000672'   as object(id number,name varchar2(10));" "CREATE SEQUENCE "LOCATIONS_SEQ" MINVALUE 1 MAXVALUE 9900 INCREMENT BY 100 S" "TART WITH 3300 NOCACHE NOORDER NOCYCLE" "CREATE SEQUENCE "DEPARTMENTS_SEQ" MINVALUE 1 MAXVALUE 9990 INCREMENT BY 10 " "START WITH 280 NOCACHE NOORDER NOCYCLE" "CREATE SEQUENCE "EMPLOYEES_SEQ" MINVALUE 1 MAXVALUE 99999999999999999999999" "99999 INCREMENT BY 1 START WITH 207 NOCACHE NOORDER NOCYCLE" "CREATE CLUSTER "DEPT_EMP_CLUSTER" ("DEPARTMENT_ID" NUMBER(4, 0))  PCTFREE 1" "0 PCTUSED 40 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 262144 NEXT 1048576 MI" "NEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "U" "SERS"" "CREATE INDEX "IDX_DEPT_EMP_CLUSTER" ON CLUSTER "DEPT_EMP_CLUSTER" PCTFREE 1" "0 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 F" "REELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS"" "CREATE TABLE "BIGFILE_TAB" ("ID" NUMBER, "NAME" VARCHAR2(10))  PCTFREE 10 P" "CTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXT" "ENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "BIG_T" rac1->

从上,我们可以看到,我们在IMPORT命令行上带上SHOW=Y的选项时,IMPORT工具并没有真正的执行数据导入,而是生成了一份含有DDL语句的日志文件,我们可以直接编辑该日志文件,以获取我们所需的脚本。

2 那么,对于EXPDP产生的dumpfile,又该如何获取DDL语句呢?

先以EXPDP导出dumpfile:

rac1->pwd /u01/app/oracle/mig_dir rac1->ls-l total 0 rac1-> expdp hr/hrdirectory=mig_dir dumpfile=expdp_hr.dmp logfile=expdp_hr.log schemas=hr Export: Release 11.2.0.1.0 - Production on Mon Nov 21 17:16:45 2011 Copyright (c) 1982, 2009, Oracle and/orits affiliates.  All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options ... Job"HR"."SYS_EXPORT_SCHEMA_01"successfully completed at 17:19:48 rac1->ls-l total 24248 -rw-r----- 1 oracle asmadmin 24797184 Nov 21 17:19 expdp_hr.dmp -rw-r--r-- 1 oracle asmadmin     3299 Nov 21 17:19 expdp_hr.log rac1->

该如何从expdp_hr.dmp文件里获取DDL语句呢?IMPDP工具给我们提供了SQLFILE的命令行选项,同样是只获取DDL语句,并未真正的执行数据导入。

rac1-> impdp hr/hrdirectory=mig_dir dumpfile=expdp_hr.dmp logfile=impdp_hr.log schemas=hr sqlfile=hr_ddl.sql Import: Release 11.2.0.1.0 - Production on Mon Nov 21 17:23:23 2011 Copyright (c) 1982, 2009, Oracle and/orits affiliates.  All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options Master table"HR"."SYS_SQL_FILE_SCHEMA_01"successfully loaded/unloaded ... ... Job"HR"."SYS_SQL_FILE_SCHEMA_01"successfully completed at 17:23:47 rac1->ls-l total 24360 -rw-r----- 1 oracle asmadmin 24797184 Nov 21 17:19 expdp_hr.dmp -rw-r--r-- 1 oracle asmadmin     3299 Nov 21 17:19 expdp_hr.log -rw-r--r-- 1 oracle asmadmin   103892 Nov 21 17:23 hr_ddl.sql -rw-r--r-- 1 oracle asmadmin     1672 Nov 21 17:23 impdp_hr.log rac1->head-30 hr_ddl.sql -- CONNECT HR ALTER SESSION SET EVENTS'10150 TRACE NAME CONTEXT FOREVER, LEVEL 1'; ALTER SESSION SET EVENTS'10904 TRACE NAME CONTEXT FOREVER, LEVEL 1'; ALTER SESSION SET EVENTS'25475 TRACE NAME CONTEXT FOREVER, LEVEL 1'; ALTER SESSION SET EVENTS'10407 TRACE NAME CONTEXT FOREVER, LEVEL 1'; ALTER SESSION SET EVENTS'10851 TRACE NAME CONTEXT FOREVER, LEVEL 1'; ALTER SESSION SET EVENTS'22830 TRACE NAME CONTEXT FOREVER, LEVEL 192 '; -- new objecttypepath: SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA BEGIN sys.dbms_logrep_imp.instantiate_schema(schema_name=>SYS_CONTEXT('USERENV','CURRENT_SCHEMA'), export_db_name=>'DEVDB', inst_scn=>'41161309'); COMMIT; END; / -- new objecttypepath: SCHEMA_EXPORT/TYPE/TYPE_SPEC CREATE TYPE"HR"."MY_TEST_TYPE" OID'AF115DDE62059E4AE04010ACBF000672'as object(idnumber,name varchar2(10)); / ALTER TYPE"HR"."MY_TEST_TYPE" COMPILE SPECIFICATION PLSQL_OPTIMIZE_LEVEL=  2 PLSQL_CODE_TYPE=  INTERPRETED PLSQL_DEBUG=  FALSE    PLSCOPE_SETTINGS=  'IDENTIFIERS:NONE' / -- new objecttypepath: SCHEMA_EXPORT/SEQUENCE/SEQUENCE CREATE SEQUENCE  "HR"."LOCATIONS_SEQ" MINVALUE 1 MAXVALUE 9900 INCREMENT BY 100 START WITH 3300 NOCACHE  NOORDER  NOCYCLE ; rac1->

最后,简单一句话总结:

对于使用传统工具EXPORT导出的dumpfile,我们可以使用IMPORT加上SHOW=Y的选项获取DDL

对于使用数据泵EXPDP导出的dumpfile,我们可以使用IMPDP加上SQLFILE的选项获取DDL

转载于:https://my.oschina.net/sansom/blog/178993

你可能感兴趣的文章
UIImagePickerController拍照与摄像
查看>>
python调用windows api
查看>>
Linux内核中的printf实现【转】
查看>>
第四章 mybatis批量insert
查看>>
Java并发框架——什么是AQS框架
查看>>
【数据库】
查看>>
Win配置Apache+mod_wsgi+django环境+域名
查看>>
第四届中国汽车产业信息化技术创新峰会将于6月在沪召开
查看>>
linux清除文件内容
查看>>
WindowManager.LayoutParams 详解
查看>>
find的命令的使用和文件名的后缀
查看>>
Android的Aidl安装方法
查看>>
Linux中rc的含义
查看>>
曾鸣:区块链的春天还没有到来| 阿里内部干货
查看>>
如何通过Dataworks禁止MaxCompute 子账号跨Project访问
查看>>
js之无缝滚动
查看>>
Django 多表联合查询
查看>>
logging模块学习:basicConfig配置文件
查看>>
Golang 使用 Beego 与 Mgo 开发的示例程序
查看>>
ntpdate时间同步
查看>>