该手册主要目的是用于生产环境排查问题及恢复用户误操作删除数据及程序错误导致数据丢失使用。
在命令窗口查询Undo表空间的快照参数
1 show parameter UNDO;
--查看表空间使用情况
1 SELECT a.tablespace_name "表空间名", 2 3 a.bytes / 1024 / 1024 "表空间大小(M)", 4 5 (a.bytes - b.bytes) / 1024 / 1024 "已使用空间(M)", 6 7 b.bytes / 1024 / 1024 "空闲空间(M)", 8 9 round(((a.bytes - b.bytes) / a.bytes) * 100, 2)||'%' "使用比" 10 11 FROM (SELECT tablespace_name, sum(bytes) bytes 12 13 FROM dba_data_files 14 15 GROUP BY tablespace_name) a, 16 17 (SELECT tablespace_name, sum(bytes) bytes, max(bytes) largest 18 19 FROM dba_free_space 20 21 GROUP BY tablespace_name) b 22 23 WHERE a.tablespace_name = b.tablespace_name 24 25 ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC;
--查找表空间存放路径
1 SELECT * FROM dba_data_files t WHERE t.tablespace_name='UNDOTBS1';
--增加一个新的表空间并默认数据文件存放该表空间文件中
1 alter tablespace UNDOTBS1 add DATAFILE 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS02.DBF' size 5G AUTOEXTEND on maxsize 20G;
--修改快照保存时间,单位为秒 86400=24小时 43200=12小时
1 ALTER SYSTEM SET undo_retention=86400 SCOPE=BOTH;
更改完成后再--在命令窗口查询Undo表空间的快照参数,查看Undo数据快照时间是否更改成功
1 show parameter UNDO;
--利用快照查询历史数据
1 SELECT a.* FROM emp AS OF TIMESTAMP TO_TIMESTAMP('2022-08-14 23:05:55' ,'YYYY-MM-DD hh24:mi:ss') a 2 WHERE a.emp_no='626537' ;
AS OF TIMESTAMP TO_TIMESTAMP('2022-08-14 23:05:55' ,'YYYY-MM-DD hh24:mi:ss') 在表名后面添加该语句,时间自由调整,即可查询到历史数据。
做完数据快照后隔几个小时观察一下Undo表空间的一个使用情况,如果数据快照时间过大,表空间的一个占用也会越大,这样就需要添加多个表空间文件,这个根据业务来自由设定。
https://blog.51cto.com/u_15239532/2835327#UNDO_2
http://www.pingtaimeng.com/article/detail/id/2168266