#!/bin/bash
# args: <src> <dest> <date>
datechunk=$3
echo "Processing $datechunk"
check=`ls $1 | wc -l`
if [ $check -le 2 ]; then
exit 0
fi
let check2=check-2
echo "Processing $check2 files"
ls -vA $1 | head -n $check2 > $2/dirlist.$datechunk
for line in `cat $2/dirlist.$datechunk`
do
cp $1/$line $2/$datechunk
if [ -s $2/$datechunk/$line ]; then
rm $1/$line
fi
done
这就是我所做的:
我的主数据库启用了事务日志传送。日志被写入 /db/archive。
每小时,一个 cron 作业以 oracle 用户身份运行。此 cronjob 执行以下操作:
将 /db/archive/ 的内容移动到 /db_archive/YYYYMMDD/ (使用以下脚本(我没有写,所以不要让我为丑陋负责))
rsync 将 /db_archive/YYYYMMDD/ 的内容同步到辅助服务器上的 /db_archive/YYYYMMDD。
这负责将文件放在那里。
在辅助服务器上,/db/archive 是指向 /db_archive/YYYYMMDD 的符号链接。“恢复备用数据库”自动从 /db/archive/ 读取,因此无论您用于恢复数据库的任何脚本都应该能够处理一天结束时产生的错误,因此他们可以将符号链接切换到新的一天。
这有帮助吗,还是您需要更多信息?
我不确定 10g 和 10g express 之间有什么区别,但是 10g 提供的复制类似于 LDAP 使用的复制,他们称之为“ Streams Replication ”。
我还看到了将远程数据库链接设置回主服务器的方法,以及将数据复制到每个副本上的本地表的物化视图。(显然,这有安全隐患,并且只能复制副本提前知道的表)。
您可以查看 DBVisit http://www.dbvisit.com/。它是一个自动传送和应用 Oracle 重做日志的系统。它支持 XE 以及更昂贵的标准版和企业版。
我没有使用过该产品,只是发现如果您需要避免企业版的成本并且不愿意滚动自己的脚本,它是一个选项。