问题描述
因此,我在 Oracle sql Developer 中创建了一个数据库,并使用 Notepad ++ 手动编写了所有表定义,然后只做了一个批量创建表语句。 愚蠢的我忘了保存这个文件,所以现在我拥有 sql 开发人员的所有定义,但本地没有。
我对设计进行了一些重大更改,但仍有一些我仍然可以使用的定义。
有没有办法可以将数据库中的所有表导出到文件中?我知道我可以单独获取定义,但是时间限制会很大。这样我就不必再手动编写所有内容了。我为寻找答案而进行的任何搜索都只是给出了如何选择数据库中所有表的答案,而不是如何导出表定义。
请注意,我查看了 Notepad ++ 的临时数据,但该文件已不存在。
解决方法
工具、数据库导出
取消选中“数据”
选择您的输出选项,您需要一个文件用于所有内容或每个对象一个文件。
然后选择您的架构和对象 - 如果您选择“无”,默认情况下它将转储整个架构。
,当然,您可以 - 使用 DBMS_METADATA
包及其 GET_DDL
函数。
例如 - 我在 SCOTT 的模式中仅针对两个表执行此操作 - 它会是这样的:
SQL> set pagesize 0
SQL> set linesize 200
SQL> set long 20000
SQL> set longchunksize 20000
SQL> set feedback off
SQL> set verify off
SQL> set trimspool on
SQL>
SQL> select dbms_metadata.get_ddl ('TABLE',table_name,'SCOTT')
2 from user_tables
3 where table_name in ('EMP','DEPT');
CREATE TABLE "SCOTT"."DEPT"
( "DEPTNO" NUMBER(2,0),"DNAME" VARCHAR2(14),"LOC" VARCHAR2(13)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"
CREATE TABLE "SCOTT"."EMP"
( "EMPNO" NUMBER(4,0) NOT NULL ENABLE,"ENAME" VARCHAR2(10),"JOB" VARCHAR2(9),"MGR" NUMBER(4,"HIREDATE" DATE,"SAL" NUMBER(7,2),"COMM" NUMBER(7,"DEPTNO" NUMBER(2,0)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"
SQL>
您在开始时已经注意到一些 SET 命令 - 我在 SQL*Plus 中运行它,但它们也可以在 SQL Developer 中运行。