oracle 11g shell備份指令碼

2021-08-27 23:55:13 字數 3519 閱讀 5769

#!/bin/sh

#按使用者備份,並打包,本地儲存

#複製oracle使用者的環境變數

export oracle_sid=orcl #定義sid

export oracle_unqname=$oracle_sid

export path=$oracle_home/bin:$path

export nls_lang="simplified chinese_china.al32utf8"

#export nls_lang=simplified chinese_china.zhs16gbk

username=sys #啟動備份的使用者名稱,必須具有備份許可權

password=123456 #密碼

owners=(lhz longhz test) #要備份使用者

curdate=$(date '+%f_h%hm%ms%s') #當前時間

backup_directory=/ora_bak #主備份目錄

backup_directory_time=$/$(hostname)_$_$ #每次備份目錄、打包目錄

data_file_prefix=$(hostname)_$ #定義檔名字首

backup_main_log=$/main_ora_$_$(date '+%y-%m').log #主要日誌

all_para=$* #存放所有引數

[ -d $ ] || mkdir -p $ #檔案不存在則建立備份檔案夾

function echo_color () \033[0m"

elif [[ "$1" =~ "warn" ]];then

echo -e "\033[33m $ \033[0m"

else

echo -e "\033[32m $ \033[0m"

finull_exp()"'" | tr 'a-z' 'a-z'` #使用者轉換為大寫

echo_color "$(date '+%f_%t'), 查詢使用者:$下空表,並生成操作語句, 請稍等..."

if [[ "$" == "sys" ]];then

conn="conn $/$ as sysdba ;"

else

conn="conn $/$ ;"

fialt_aly_sql=`

sqlplus -s /nolog <$

set echo on;

set timing off;

set feedback on;

set trimspool off;

set linesize 120;

set pagesize 2000;

set newpage 1;

set heading on;

set term off;

set termout on;

set timing off;

select 'alter table '||owner||'.'||table_name||' allocate extent;' from dba_tables t where t.initial_extent is null and t.owner=$;

select 'analyze table '||owner||'.'||table_name||' compute statistics;' from dba_tables t where t.initial_extent is null and t.owner=$;

exit;

eof`

alt_aly_sql=$(echo "$" |sed -n '/^a/p')

echo "$" >> $/null_alt_aly_sql.log

echo_color "[alt]$[alt]"

if [[ "$" =~ "table" ]];then

echo_color "$(date '+%f_%t'), 開始操作、分析空表, 請稍等..."

opt_log=`

sqlplus -s /nolog <$

set echo on;

set timing off;

set feedback on;

set trimspool off;

set linesize 120;

set pagesize 2000;

set newpage 1;

set heading on;

set term off;

set termout on;

set timing off;

$exit;

eof`

else

echo_color "$(date '+%f_%t')無操作空表語句!"

fiecho_color "[opt]$[opt]"

echo "$" >> $/null_opt_log.log

main_fun() #進入目錄

echo "----$----" >> $

for thei in $ #遍歷使用者陣列

do[[ "$" =~ "n" ]] || null_exp $ #查詢每個使用者的空表

echo_color "[info:]sid: $, 開始備份的使用者:$"

backup_log=$_$_$.log

backup_file=$_$_$.dmp

if [[ "$" == "sys" ]];then

exp \'$/$@$ as sysdba \' file=$ log=$ owner=$ && let cou_suc+=1 #備份成功加1

else

exp \'$/$@$ \' file=$ log=$ owner=$ && let cou_suc+=1 #備份成功加1

fiawk -v f=$ -v t=$ -v u=$ \

'/^\. \. 正在匯出表/end' $ >> $

biaoshu_hangshu[$]=`awk -v uu=$ '/^. . 正在匯出表/end' $`

done

if [[ $ -eq $ ]];then #備份成功數等於使用者陣列數,則成功

echo_color "[info:]備份完成(使用者:$), 開始壓縮檔案!壓縮列表如下: "

tar czvf $.tar * && cd .. && rm -fr $ #壓縮成功後刪除原始檔

echo_color "[info:]備份並壓縮完成: $.tar ,詳細: $"

echo_color "[info:]詳細日誌: $ "

echo -e "----$ 壓縮完成: $.tar \n" >> $

echo_color "tips:匯入命令示例:imp \'sys/123456@sid as sysdba\' buffer=655360 file=檔案.dmp fromuser=使用者 touser=使用者 log=/tmp/imp.log"

exit 0

else #備份失敗

echo_color "[error:]$, 備份失敗!"

echo -e "$\t$\t備份失敗!" >> $

exit 3

fimain_fun

oracle11g 在備庫建立物件

邏輯備庫搭建完成後,想要在備庫中新增物件,但是提示許可權不夠的錯誤 sql create table t log rid varchar2 32 name varchar2 1000 rq date default sysdate,oldvalue varchar2 255 newvalue var...

oracle 冷備和熱備指令碼

指令碼放在 u01 scripts coldscr mikecold.sql 在資料庫執行時可以執行此指令碼來冷備。set feedback off set heading off set verify off set trimspool off set echo off settime offse...

oracle 11g 手工熱備 資料庫

檢視資料庫是否處於歸檔模式,開啟資料庫熱備模式,拷貝作業系統資料庫資料檔案到備份目錄 sys prod archive log list database log mode archive mode automatic archival enabled oldest online log seque...