db_recovery_file_dest_size, v$flashback_database_logfile,v$restore_point引发的血案.

本文介绍了解决Oracle数据库闪回日志占用大量磁盘空间的问题。通过调整db_recovery_file_dest_size参数,实现自动清理不必要的闪回日志文件,有效释放磁盘空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


今天上午,公司的一台数据库HDIC的其中一个磁盘空间满了,导致归档失败,外部程序无法连入。

经过详细检查,发现是由于设置了强制的恢复点(v$restore_point)造成的,于是删除掉不用的恢复点。
但是现在还是出现了磁盘空间大量占用的情况,经检查,是DATABASE FLASHBACK LOG占用的,用了1.4TB,挺吓人的。
查询v$flashback_database_logfile确定文件名后,进入ASMCMD手工删了一些。但是v$flashback_database_logfile中还有记录,挺不爽的,做事就要做得干净彻底嘛。
经过思考和实践,发现了删除v$flashback_database_logfile记录的方法,
其实很简单,那就是先将数据库参数db_recovery_file_dest_size改小,改成你希望的目标大小,
然后ORACLE后台程序会默默地删除相应的文件及视图v$flashback_database_logfile相应的记录。
这时你可以在ASMCMD环境中用lsdg 查看磁盘卷组可用空间大小在增长。待完成这一步之后,再将参数db_recovery_file_dest_size改回来即可。
--alter system set db_recovery_file_dest_size=1047883M ;
alter system set db_recovery_file_dest_size=1000M ;

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/350519/viewspace-1057873/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/350519/viewspace-1057873/

### Oracle 数据库中创建闪回点并执行数据库闪回 #### 创建闪回点 在 Oracle 数据库中,可以通过 `CREATE FLASHBACK ARCHIVE` 或者直接通过 `FLASHBACK DATABASE` 的方式来实现时间点恢复。然而,在实际操作中,通常会先启用闪回归档日志模式,并设置保留期以便于后续的闪回操作。 以下是创建闪回点的具体方法: 1. **确认数据库处于归档模式** 需要确保数据库已经启用了归档模式,因为闪回功能依赖于此模式下的重做日志文件。 ```sql SELECT log_mode FROM v$database; ``` 如果返回值为 `ARCHIVELOG` 则表示已开启归档模式[^1]。 2. **启用闪回功能** 启用闪回功能需要修改初始化参数 `db_recovery_file_dest_size` 和 `db_recovery_file_dest` 来指定闪回收储区域的位置和大小。 ```sql ALTER SYSTEM SET db_recovery_file_dest='/u01/app/oracle/fast_recovery_area' SCOPE=BOTH; ALTER SYSTEM SET db_recovery_file_dest_size=4G SCOPE=BOTH; ``` 3. **创建闪回点** 使用以下 SQL 命令可以创建一个名为 `<flashback_point_name>` 的闪回点: ```sql CREATE RESTORE POINT flashback_point_name GUARANTEE FLASHBACK DATABASE; ``` 这里的 `GUARANTEE FLASHBACK DATABASE` 参数确保即使磁盘空间不足也不会删除用于此闪回点的数据[^2]。 #### 执行数据库闪回 当需要将整个数据库恢复到某个特定的时间点或者之前创建的一个闪回点时,可以按照如下步骤操作: 1. **关闭数据库实例** 将当前运行中的数据库正常关闭以防止数据丢失或损坏。 ```bash SHUTDOWN IMMEDIATE; ``` 2. **启动至挂载状态** 把数据库加载起来但是不打开它,这样可以在不影响其他用户的情况下完成闪回过程。 ```bash STARTUP MOUNT; ``` 3. **执行闪回命令** 可以选择按时间闪回或者是回到先前定义好的某一点上。 - 按照具体时刻进行闪回: ```sql FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('YYYY-MM-DD HH24:MI:SS','YYYY-MM-DD HH24:MI:SS'); ``` - 返回到最近建立的那个叫作 “my_restore_point” 的还原位置处: ```sql FLASHBACK DATABASE TO RESTORE POINT my_restore_point; ``` 4. **重新打开数据库** 完成以上所有步骤之后再把数据库完全开放给最终端使用者访问即可。 ```bash ALTER DATABASE OPEN RESETLOGS; ``` 注意:由于涉及到大量历史记录读取以及可能存在的未提交更改清理工作等因素影响效率低下问题,请务必提前做好规划安排以免干扰日常业务运作流程[^3]。 ```python # Python 脚本示例 (仅作为辅助说明用途) import cx_Oracle connection = cx_Oracle.connect("username", "password", "localhost/XE") cursor = connection.cursor() try: cursor.execute(""" CREATE RESTORE POINT before_change GUARANTEE FLASHBACK DATABASE """) except Exception as e: print(e) finally: cursor.close() connection.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值