oracle数据库卸数及ddl导出

一.数据库卸数脚本

还是比较明了的,一看就明白。

unloaddevice.sh 

sqlplus atmpbat/atmpbat@inter @"./unloaddevice.sql";

DATE_LOAD_PRE=`date -d "1 day ago" "+%Y%m%d"`;

mv device_all.txt XT0251.device.${DATE_LOAD_PRE}.0000.dat

gzip XT0251.device.${DATE_LOAD_PRE}.0000.dat

unloaddevice.sql

set linesize 200

set pagesize 0

set echo off



set termout off

set heading off



set feedback off

spool device_all.txt

select DEV_CODE||'^A'||DEV_BANKCODE||'^A'||DEV_IPADDRESS||'^A'||DEV_CITYCODE||'^A'||DEV_BRANCHCODE||'^A'||DEV_GYH||'^A'||DEV_YLBH||'^A'||DEV_WXH||'^A'||DEV_ADDRESS||'^A'||DEV_COMMENT||'^A'||DEV_TYPE||'^A'||DEV_ENCRY||'^A'||DEV_VERNUM||'^A'||DEV_PACK||'^A'||DEV_BILLBOXCFG||'^A'||DEV_FTRNFLAG||'^A'||DEV_STATUS||'^A'||DEV_EXPCNT||'^A'||DEV_ANOMCODE||'^A'||DEV_NOWTRANS||'^A'||DEV_FTPPWD||'^A'||DEV_CAPCARD||'^A'||DEV_IDENCODE||'^A'||DEV_BATCH||'^A'||DEV_HSMTYPE||'^A'||DEV_MASTERFLAG||'^A'||DEV_MASTERKEY||'^A'||DEV_PINKEY||'^A'||DEV_MACKEY||'^A'||FOREIGN_FLAG||'^A'||'^A'  from device where DEV_BANKCODE='51082';

spool off

/
exit;

二.ddl导出

坑比较多,首先是sh中sqlplus后面接的用户名和密码,与sql中的schema名要一致,否则无法导出!

如果我们知道表名,怎么知道这张表的schema,即get_ddl第三个参数,

首先要切换到oracle用户,普通用户的话,无法用sysdba登录,显示权限不够!

su - oracle

sqlplus /nolog

conn sys

as sysdba

select username from sys.dba_users;  //查询所有的schema,其实也就是username,二者名字一致!

select table_name from sys.dba_tables where owner=‘schema名’   //查询schema下面表的名字

从而可以找到schema名字下的表名,确立二者的关系!

这里有个坑是,device表是ATMPDBA的,但是你用atmpbat用户登录,也可以查到该表的数据内容,就像上面数据库导数的例子,很奇怪!

gen_flg.sh

sqlplus atmpdba/atmpdba@inter @"./gen_ddl.sql";

DATE_LOAD_PRE=`date -d "1 day ago" "+%Y%m%d"`;

mv device_ddl.txt XT0251.device.${DATE_LOAD_PRE}.0000.flg

gen_ddl.sql

set heading off;

set echo off;

Set pages 999;

set long 90000;


spool device_ddl.txt

select dbms_metadata.get_ddl('TABLE','DEVICE','ATMPDBA') from dual;

spool off

/
exit;
原文地址:https://www.cnblogs.com/fxl-njfu/p/9555834.html