oracle项目使用&学习恢复数据

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值