我有一个oracle表有千万数据,每天备份数据里面的时间为两个月前的数据到历史表,并删除当前表里面两个月前的数据,每次删除只能删除10000条数据,用shell写个脚本调用sqlplus
时间: 2023-04-05 13:03:21 浏览: 108
我可以回答这个问题。您可以使用以下脚本来实现您的需求:
#!/bin/bash
# 设置变量
TABLE_NAME="your_table_name"
BACKUP_TABLE_NAME="your_backup_table_name"
TWO_MONTHS_AGO=$(date -d "2 months ago" +%Y-%m-%d)
# 备份两个月前的数据到历史表
sqlplus -s username/password << EOF
INSERT INTO ${BACKUP_TABLE_NAME} SELECT * FROM ${TABLE_NAME} WHERE time < TO_DATE('${TWO_MONTHS_AGO}', 'YYYY-MM-DD');
COMMIT;
EOF
# 删除当前表里面两个月前的数据
while true; do
ROWS=$(sqlplus -s username/password << EOF
DELETE FROM ${TABLE_NAME} WHERE time < TO_DATE('${TWO_MONTHS_AGO}', 'YYYY-MM-DD') AND ROWNUM <= 10000;
COMMIT;
SELECT SQL%ROWCOUNT FROM DUAL;
EOF
)
if [[ ${ROWS} -eq 0 ]]; then
break
fi
done
这个脚本会备份两个月前的数据到历史表,并删除当前表里面两个月前的数据,每次删除10000条数据,直到没有数据需要删除为止。您可以将脚本保存为一个文件,然后使用crontab定时执行。
阅读全文