1. 程式人生 > >通過shell備份oracle用戶數據,並將巡檢結果發送至windows跳板機

通過shell備份oracle用戶數據,並將巡檢結果發送至windows跳板機

sbin ati tail 每次 img bsp product border article

背景:生產環境有oracle服務器,有數據庫用戶若幹,需要通過exp方式備份數據庫用戶數據,需要巡檢數據庫備份的結果。

目標:通過Linux shell+exp+crontab進行周期備份,通過ssh命令跨系統將Linux下備份結果傳輸至windows。

說明:

oracle client 11g oracle server: oracle11g

操作系統:sentos6 or redhat6

端口:1521

Oracle _sid = shwhcq

操作過程:

一、備份

1、創建目錄

  以oracle用戶登錄系統

  mkdir /home/oracle/script ------腳本目錄

  mkdir /ipi_bak/db/gg -------數據文件備份目標目錄(這裏給oracle用戶w權限)

  說明:這裏我是以用戶導出數據的,所以在/ipi_bak/db/gg 下以各用戶的名稱創建子目錄

2、創建腳本

以xssp用戶的導出腳本為例:vi xssp-exp.sh

#!/bin/bash 

export ORACLE_BASE=/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

export ORACLE_SID=shwhcq1

export LANG=C

export NLS_LANG
="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" export ORACLE_TERM=xterm export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib TIME=`date "+%F_%H:%M:%S"` /grid/11.2.0/grid_1/bin/exp xssp/password@ip/shwhcq grants=y file=/ipi_bak/db/gg/xssp/xssp_$TIME.dmp log=/ipi_bak/db/gg/xssp/xssp_$TIME.log owner=xssp &> /dev/null

給執行權限:chmod +x xssp-exp.sh

註:以上代碼為Oracle數據庫運行賬號oracle的系統環境變量設置,必須添加,否則crontab任務計劃不能執行。

3、創建計劃任務

[oracle@ggfwdb1 script]$ crontab -e

5 2 * * *        /bin/sh  /home/oracle/script/xssp-exp.sh #每天02:05分執行

10 2 * * *       /bin/sh  /home/oracle/script/artcms-exp.sh

15 2 * * *       /bin/sh  /home/oracle/script/caee_scan-exp.sh

25 2 * * *       /bin/sh  /home/oracle/script/ipijbpm-exp.sh

35 2 * * *       /bin/sh  /home/oracle/script/ipiqxt-exp.sh

註:crontab 執行記錄在/var/log/cron

二、備份結果輸出到windows跳板機

1、將備份日誌的最後一行執行情況輸出到指定文件,文件以日期命名

cat /home/oracle/script/db_bak.sh

#!/bin/bash

TIME=`date "+%F"`

xssp_log=/ipi_bak/db/gg/xssp/xssp_$TIME.log
artcms_log=/ipi_bak/db/gg/artcms/cms_$TIME.log
caee_log=/ipi_bak/db/gg/caee/caee_$TIME.log
ipiqxt_log=/ipi_bak/db/gg/ipiqxt/ipiqxt_$TIME.log
ipijbpm_log=/ipi_bak/db/gg/ipijbpm/ipijbpm_$TIME.log

dblog=/home/oracle/db_baklog/$TIME.log

echo "xssp_log" >> $dblog
tail -1 $xssp_log >> $dblog

echo "artcms_log" >> $dblog
tail -1 $artcms_log >> $dblog

echo "caee_log" >> $dblog
tail -1 $caee_log >> $dblog

echo "ipiqxt_log" >> $dblog
tail -1 $ipiqxt_log >> $dblog
 
echo "ipijbpm_log" >> $dblog
tail -1 $ipijbpm_log >> $dblog

2、windows上用ssh的scp命令下載備份執行結果日誌,這樣就不用每次登陸去查看

批處理:cat_linux_bak.bat

cd D:\Program Files (x86)\SSH Communications Security\SSH Secure Shellscp2.exe root@數據庫備份服務器ip:/home/oracle/db_baklog/* D:\ipi_bak\script\linux_dbbak_logs\

註:想要Linux和win要通過腳本自動互傳文件不交互。需要進行Linux和win的信任配置:http://blog.csdn.net/jiangshouzhuang/article/details/50683049

簡單敘述:

我們把Windows上面生成的Public Key放到Linux服務器上指定用戶家目錄下面的.ssh目錄中,並添加公鑰內容到.ssh目錄下面的authorized_keys文件。

如果我們開始從Windows(客戶端)上面通過ssh方式遠程Linux(服務器)時,此時客戶端軟件就會向服務器發出請求,請求用密匙進行安全驗證。服務器收到請求之後,先在該服務器上的主目錄下尋找公匙,然後把它和發送過來的公匙進行比較。如果兩個密匙一致,服務器就用公匙加密“質詢”並把它發送給客戶端軟件。客戶端軟件收到“質詢”之後就可以用私匙解密再把它發送給服務器,此時因為密鑰能匹配上,所以可以直接登錄到Linux服務器。

1、在Windows本機上生成密鑰

D:\SSHCommunications Security\SSH Secure Shell>ssh-keygen2-t rsa

註釋:我們這裏使用rsa的密鑰,默認是2048bit(位),同樣我們也可以使用dsa方式的密鑰。

在執行ssh-keygen2 -t rsa生成密鑰對時,會提示你輸入Passphrase的值,我們要求免密碼登錄服務器,所以直接回車。

有提示:

Private key saved to C:/Users/Administrator/ApplicationData/SSH/UserKeys/id_rsa

_2048_a

Public key saved to C:/Users/Administrator/ApplicationData/SSH/UserKeys/id_rsa_

2048_a.pub

根據提示知道了生成的密鑰對的路徑,但是經過我實際查找,我的windows環境的密鑰對位於:C:\Users\Administrator\AppData\Roaming\SSH\UserKeys下面。

2、然後我們將Windows的C:\Users\Administrator\AppData\Roaming\SSH\UserKeys目錄下的id_rsa_2048_a.pub文件上傳到Linux服務器的home/user/.ssh目錄下面。

因為我們的公鑰是在Windows上面生成的,Linux的Openssh不識別,所以需要進行轉換後再追加到authorized_keys中:

$ ssh-keygen -i -f id_rsa_2048_a.pub >>authorized_keys

退出之前使用密碼登錄的SSH Secure Shell客戶端,然後重新登錄並在登錄認證狀態欄中選擇Public Key方式,這樣就可以免密碼登錄了。

3、測試

使用SSH Secure Shell客戶端自帶的scp2命令下載Linux服務器的文件

D:\SSH Communications Security\SSHSecure Shell>scp2.exe -r -d user@Linuxip:/home/user/testhivedata D:\test\

.000000_0.crc | 12B | 12B/s | TOC: 00:00:01 | 100%

000000_0 | 96B | 96B/s | TOC: 00:00:01 | 100%

datacity.txt | 95kB | 95kB/s | TOC: 00:00:01 | 100%

可以看出遠程拷貝也不需要輸入密碼。

最後查看執行結果:以後可以輕松的查看oracle的備份結果

技術分享圖片

通過shell備份oracle用戶數據,並將巡檢結果發送至windows跳板機