Orcal快照恢复数据
1.如果我们一不小心删除或者批量更新了数据库里面的数据(事务已经提交),而且没有进行数据的备份,如果我们想恢复修改之前的数据怎么办,这时候我们就需要用到orcale的快照
2.如何利用orcale快照来恢复数据呢
查看快照数据
SELECT * FROM 表名 AS OF TIMESTAMP TO_TIMESTAMP('2021-01-08 18:45:00','yyyy-MM-dd hh24:mi:ss')
table_name :即我们误操作的表名,2021-01-08 18:45:00:想恢复到哪个时间点的数据
根据快照数据创建备份表
CREATE TABLE 备份表名 AS SELECT * FROM 表名 AS OF TIMESTAMP TO_TIMESTAMP('2021-01-08 18:45:00','yyyy-MM-dd hh24:mi:ss');
也可将现有的表清空,直接insert into table_name SELECT * FROM table_name AS OF TIMESTAMP TO_TIMESTAMP('2021-01-08 18:45:00','yyyy-MM-dd hh24:mi:ss')
快照默认保存8天,采集数据间隔时间是一小时,这个信息可以从DBA_HIST_WR_CONTROL视图中获得。
select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL CON_ID
1571313779 +00000 01:00:00.0 +00008 00:00:00.0 DEFAULT 0
SNAP_INTERVAL=+00000 01:00:00.0 表示采样间隔是1小时
RETENTION=+00008 00:00:00.0 表示采样数据保留期限是8天
————————————————
版权声明:本文为CSDN博主「夜行者~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xhwangSGTL/article/details/112345887
快照时间设置
oracle 快照过旧:回退段号,ORA-01555: 快照过旧: 回退段号 39 (名称为 “_SYSSMU39_3029844184$”) 过小…
判断原因:
SQL语句执行时间太长,或者UNDO表空间过小,或者事务量过大,或者过于频繁的提交,导致执行SQL过程中进行一致性读时,SQL执行后修改的 前镜像(即UNDO数据)在UNDO表空间中已经被覆盖,不能构造一致性读块(CR blocks)。 这种情况最多。
解决办法:
第1种情况解决的办法:
(1)增加UNDO表空间大小
(2)增加undo_retention 时间,默认只有15分钟
alter system set undo_retention=14400 ;
undo_retention这个值可以根据情况调大一些。
(3)优化出错的SQL,减少查询的时间,首选方法
(4)避免频繁的提交
SQL> show parameter undo_retention;
NAME TYPE VALUE
undo_retention integer 900
把undo_retention修改为3600s
SQL> alter system set undo_retention = 3600;
System altered.
SQL> show parameter undo_retention;
NAME TYPE VALUE
undo_retention integer 3600
再执行查询成功。
学习:
Oracle中取今天的数据,之前使用到where to_char(t.t_created_tm,
Oracle中取今天的数据,之前使用到where to_char(t.t_created_tm, ‘YYYY-MM-DD’)= to_char(SYSDATE, ‘YYYY-MM-DD’);
这种方式效率低下,而且对t.t_created_tm即使建了索引,但是因为对他进行了函数封装后比较,查询时索引也用不上。
这里介绍可以使用TRUNC(SYSDATE)=当天来比较过滤数据,,达到取今天数据的效果。
SELECT TRUNC(SYSDATE) FROM DUAL;
--TRUNC(SYSDATE)
2013/1/5
下面的方法比较好。
SELECT * FROM TBL_STEP T WHERE T.T_CREATE_TM >= TRUNC(SYSDATE);
如果取当年的数据
SELECT * FROM TBL_STEP T WHERE T.T_CREATE_TM >= TRUNC(SYSDATE,'YYYY');
当月的数据
SELECT * FROM TBL_STEP T WHERE T.T_CREATE_TM>=TRUNC(SYSDATE, 'MM') AND T.T_CREATE_TM<=LAST_DAY(SYSDATE)
————————————————
版权声明:本文为CSDN博主「我是一只萤火虫呀」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:[https://blog.csdn.net/weixin_34404199/article/details/113958312](https://blog.csdn.net/weixin_34404199/article/details/113958312)
Oracle 查询当月的数据_Oracle取今天今年当月的数据
数据库查询条件模板
mysql对于只需要根据一列进行 ROW_NUMBER,建议用如下方法,效率更高
select * from (
SELECT
@row_number:=CASE
WHEN @customer_no = t.APPROVE_ID THEN @row_number + 1
ELSE 1
END AS num,
@customer_no:=t.APPROVE_ID AS APPROVE_ID,LAST_UPDATETIME
from dn_ta_sp_services_guide t, (SELECT @row_number:=0, @customer_no:=0) AS s
order by APPROVE_ID, t.LAST_UPDATETIME desc
) aa where num = 1