昨天裝好了oracle,今天嘗試一下自動備份,我這兩天裝linux和oracle的目的就是這個。
如果是sql server,定期備份可以利用sql server的management studio來做,比較方便。但要做oracle的定期備份,那就需要我們寫匯出命令,並設定linux的定時任務。
首先建立一個資料庫作為測試。
- --建立資料資料表空間
- create tablespace test_data
- logging
- datafile '/u01/app/oradata/test/TEST.dbf'
- size 32m
- autoextend on
- next 32m maxsize 2048m
- extent management local;
-
- --建立使用者並指定資料表空間
- create
user TEST identified by 123
- default tablespace test_data
- temporary tablespace temp;
-
- --給使用者授予許可權
- grant
connect,resource to TEST;
用Test使用者登入,建立一個表,並插入兩條資料:
- create
table t1(
- Id varchar(50) primary
key,
- title varchar(50)
- );
-
- insert
into t1 values(sys_guid(),'t1');
- insert
into t1 values(sys_guid(),'t2');
- commit;
先寫一個匯出的指令檔:
- export ORACLE_BASE=/u01/app
- export ORACLE_HOME=/u01/app/oracle
- export ORACLE_SID=TEST
- export PATH=$ORACLE_HOME/bin:$PATH
- d=$(date '+%Y%m%d')
- exp TEST/123@TEST file=/home/oracle/backup/$d.dmp log=/home/oracle/backup/$d.log owner=TEST
- zip -m /home/oracle/backup/$d.zip /home/oracle/backup/$d.dmp /home/oracle/backup/$d.log
前4句是設定環境變數,因為crontab定時調用時,不會使用oracle使用者的環境變數,所以要先把它們導進來。第6行以當前日期作為匯出的檔案名稱,例如20120626.dmp和20120626.log。第7行把這兩個檔案打成一個zip包,並刪掉這兩個檔案。
要用chmod命令把這個sh標記為可執行:
- chmod +x backup.sh
用oracle使用者,輸入crontab -e命令,編輯oracle使用者的任務計劃:
- [oracle@localhost backup]$ crontab -e
- 42 13 * * * /home/oracle/backup/backup.sh
這樣就添加了一個計劃,在每天的13點42分運行/home/oracle/backup/backup.sh。
另外,每天運行完之後,會收到mail通知,可以在mail裡看出到底有沒有正確運行。