一.數據庫卸數腳本
還是比較明了的,一看就明白。
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;