Linux下Oracle数据库自动备份脚本
1.用PL/SQL登录数据库
2.设置空表可导出
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
--然后执行查询出来的语句
3.查看数据库的字符集
查看database中的NLS_CHARACTERSET的值
a、select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET';
b、select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
PARAMETER VALUE
----------------- ----------
NLS_CHARACTERSET ZHS16GBK
4.登录linuxOracle服务器
5.创建investDBbak目录(目录随意创建,在脚本中修改即可)
mkdirinvestDBbak
6.在investDBbak下创建DBBak目录、Shell目录
mkdirDBBak
mkdirshell
7.在shell目录下创建invest_test_dbbak.sh文件
vi invest_test_dbbak.sh
8.复制内容
#!/bin/sh
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export DATA_DIR=/home/oracle/investDatabak/dbbak/data
export LOGS_DIR=/home/oracle/investDatabak/dbbak/log
export DELTIME=`date -d "15 days ago" +%Y%m%d`
export BAKUPTIME=`date +%Y%m%d%H%M%S`
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
mkdir -p $DATA_DIR
mkdir -p $LOGS_DIR
echo "Starting bakup..."
echo "Bakup file path $DATA_DIR/$BAKUPTIME.dmp"
exp invest_test2/gkjr123@investtest file=$DATA_DIR/investtest$BAKUPTIME.dmp log=$LOGS_DIR/investtest$BAKUPTIME.log
echo "Delete the file bakup before 15 days..."
rm -rf $DATA_DIR/investtest$DELTIME*.dmp
rm -rf $LOGS_DIR/investtest$DELTIME*.log
echo "Delete the file bakup successfully. "
echo "Bakup completed."
注:红色文字根据具体情况修改修改
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK设置字符集,ZHS16GBK为刚才select 到的字符集
Esc : wq退出
9.修改sh文件执行权限
chmod 777 invest_test_dbbak.sh
10.测试是否可执行
./invest_test_dbbak.sh
Export terminated successfully without warnings.表示导出没有问题,如果有问题,解决
11.添加定时任务
cronttab–e
插入:5923 * * * /home/oracle/investDatabak/shell/invest_test_dbbak.sh
注:时间自行设置,设置规则网上自行搜索。