通過shell備份oracle用戶數據,並將巡檢結果發送至windows跳板機
背景:生產環境有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跳板機