写出Oracle 11g和SQL Server 2008 ent中备份数据库的ddl语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写出Oracle 11g和SQL Server 2008 ent中备份数据库的ddl语句相关的知识,希望对你有一定的参考价值。

ORACLE获取DDL的几种常用方法
转自CSDN (原作 brucelau)

一、通过toad、plsql develop等第三方工具进行导出DLL操作,用这种办法的好处在于操作简单方便,但需要安装,下面简单介绍一下用这两个工具获得DLL语句的操作。

1、Toad 工具 (可以到www.quest.com网站上下载)
a、启动toad,连接目标数据库
b、点击DBA->Generate Schema Script,通过操作界面,选择相应的Schema,当然可以通过其他的几个tab页面选择相应的条件,点击Execute按钮。

2、plsql develop 工具
a、启动plsql develop,连接目标数据库
b、点击Tools->Export Tables,选择相应的内容,然后点击Export按钮,其实这些工具也是调用Oracle的Exp工具而已,如果你没有指定文件目录,文件会出现在plsql develop软件的安装目录下。

二、通过EXP/IMP工具
Oracle提供的最原始最实用的导入导出工具,我们大体上可以分为三种办法实现导出DDL。

1、通过imp指定indexfile参数,但这种办法不爽在于有每行前会有REM
exp userid=... tables=emp rows=n file=emp.dmp
imp userid=... file=emp.dmp indexfile=emp.sql

2、 通过imp指定show=y,同时指定log参数,格式上也不是很好
exp userid=... tables=emp rows=n file= emp.dmp
imp userid=... file= emp.dmp show=y log=emp.sql

3、利用unix下有strings命令(这种方法比较野蛮):
exp userid=... tables=tab1 rows=n file=tab1.dmp
strings emp.dmp >emp.sql
emp.sql中就有DLL语句了

三、通过9i的DBMS_METADATA包得到DLL语句
基本上用到的语法如下:
set echo off
set feedback off
set heading off
set verify off

set newpage none
set linesize 999
set pagesize 0

set term off
set trims off
set trimspool on
set trimout off
set timing off

set long 90000 REM 必需

1、获取单个的建表和建索引的语法
spool DEPT.sql
select dbms_metadata.get_ddl('TABLE','DEPT','SCOTT') from dual;
select dbms_metadata.get_ddl('INDEX','DEPT_IDX','SCOTT') from dual;
spool off;

2、获取一个SCHEMA下的所有建表和建索引的语法,以scott为例:
spool scott_schema.sql
SELECT DBMS_METADATA.GET_DDL('TABLE',table_name) FROM USER_TABLES;
SELECT DBMS_METADATA.GET_DDL('INDEX',index_name) FROM USER_INDEXES;
spool off;

3、获取某个SCHEMA的建全部存储过程的语法
spool procedures.sql
select DBMS_METADATA.GET_DDL('PROCEDURE',object_name) from user_objects where object_type = 'PROCEDURE' AND status='VALID';
spool off;

4、获取某个SCHEMA的建全部视图/的语法
spool procedures.sql
select DBMS_METADATA.GET_DDL('VIEW',object_name) from user_objects
where object_type = 'VIEW' AND status='VALID';
spool off;

注:PACKAGE 也同样适用,格式不是很好;
参考技术A oracle备份一般用rman工具
确保数据库是在归档状态 一下脚本即可备份

备份脚本:
(
source /home/oracle/.bash_profile
date;
rman target=sys/sys <<EOF
run
allocate channel c1 type disk format '/data/oracle/arch/bak/%T%U';
allocate channel c2 type disk format '/data/oracle/arch/bak/%T%U';
set limit channel c1 kbytes=2097150;
set limit channel c2 kbytes=2097150;
backup full tag 'dbora10gfull' database include current controlfile;
sql 'alter system archive log current';
sql 'alter system switch logfile ';
backup archivelog all;
release channel c1;
release channel c2;

exit
EOF
date;
)>/home/oracle/`date +%Y%m%d`rman.log

以上是关于写出Oracle 11g和SQL Server 2008 ent中备份数据库的ddl语句的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER 2008向ORACLE 11G迁移示例

Oracle forms 11g 可以连接到 DB2 或 SQL Server 吗?

使用 ssis 从 SQL Server 表复制到 Oracle 11g

INSERT INTO table RETURNING 触发器生成的主键从 SQL Server 链接服务器到 Oracle (11g)

sql server 2008 链接 ORACLE 问题

SQL Server 和 Oracle 兼容的多行插入?