Oracle flashback闪回技术讲解

Oracle flashback闪回技术讲解

\

在oracle进行闪回的时候分为了很多级别。有数据库级别的,表级别的,和事务处理级别的。

对于数据库级别来说,当truncate一个表的时候,误操作删除了一个表。由于是truncate操作,属于DDL操作,是没有任何办法进行回退的。这个时候就需要使用闪回技术了。就要靠闪回日志来闪回了。

如果误删除了一个表,只要用户开启了回收站功能,每当用户不小心删除一个表以后,这个表不会直接被删除掉,表会进入到对应的回收站里面。这个时候就要靠回收站来闪回了。

使用where错误的更新数据,就要使用还原数据来进行还原了。还原数据就是原来的数据,即修改之前的数据。它以逻辑结构被存放在还原表空间的还原段里面。还原段的使用是超时覆盖,意味着还原段在保留时间之内,是不会覆盖的。一旦超过时间就会被覆盖。这就意味着使用语句进行修改误操作了,第二天才发现误操作了,如果数据库比较繁忙,还原段超过保留时间的话,那么误操作的数据就未必可以找回来了。只要原来的数据在还原段当中就可以使用闪回查询来进行恢复。

闪回里面常用的,闪回表,闪回查询,闪回库。

SQL> create user hr identified by oracle;

User created.

SQL> grant dba to hr;

Grant succeeded.

SQL> conn hr/oracle;

Connected.

查看用户的回收站是不是开启的

SQL> show parameter recycle;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

buffer_pool_recycle string

db_recycle_cache_size big integer 0

recyclebin string on

可以看到hr用户的回收站是开启的。

创建一张测试表

SQL> create table emp (id number,name varchar(10));

Table created.

之后在表里面插入一些数据。

创建完表之后查看一下

SQL> select * from tab;

TNAME TABTYPE CLUSTERID

------------------------------ ------- ----------

EMP TABLE

可以看到用户有emp这张表。

之后将t1表删除。

SQL> drop table emp;

Table dropped.

再去查看一下数据字典

SQL> select * from tab;

TNAME TABTYPE CLUSTERID

------------------------------ ------- ----------

BIN$YXinqqnEC6bgVQAAAAAAAQ==$0 TABLE

可以看到和之前数据字典里面内容不一样了。BIN$YXinqqnEC6bgVQAAAAAAAQ==$0这个其实就是emp表,将emp表删除之后就放在回收站里面去了,这个就是回收站里面的emp表。

再去查看回收站里面的内容,显示的是当前用户回收站里面的内容,里面还有原始表的名称。

SQL> show recyclebin;

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME

---------------- ------------------------------ ------------ -------------------

EMP BIN$YXinqqnEC6bgVQAAAAAAAQ==$0 TABLE 2017-12-29:01:57:05

现在闪回表到删除之前

SQL> flashback table emp to before drop;

Flashback complete.

SQL> select * from emp;

ID NAME

---------- ----------

1 aaaa

2 b

3 cc

现在再去看看回收站里面的内容

SQL> show recyclebin;

里面的内容都没有了。

只要保证当前用户回收站的功能是开启的,那么删除的数据会自动的找回。

并不是任何删除表都会放在回收站里面,如果drop后面加上purge删除一张表drop table table_name purge,那么对于表的删除就不会放入回收站里面了。drop table table_name purge其实就是先将表放在回收站里面,热后再用清空回收站的命令(purge recyclebin)可以将回收站清空,其实drop table table_name purge是删除表之后将其放入回收站。在删除表的时候只要不加purge,在保证回收站开启的情况下,是可以从回收站找回的。

SQL> select * from emp;

ID NAME

---------- ----------

1 aaaa

2 b

3 cc

SQL> show user;

USER is "HR"

SQL> delete from emp where id=1;

1 row deleted.

SQL> commit;

Commit complete.

[root@localhost ~]# date 查看一下系统的删除之后的时间

Fri Dec 29 03:37:27 PST 2017

SQL> Select * from emp AS OF timestamp to_date('2017-12-29 03:20:27','yyyy-mm-dd hh24:mi:ss');

ID NAME

---------- ----------

1 aaaa

2 b

3 cc

可以看到将之前删除的数据也查询出来了,因为删除的数据以逻辑形式暂时存放在undo表空间里面。上面的查询就是在undo里面将相应的数据找回来了。要恢复数据可以通过。

(1)要恢复数据可以将查询出来的误删除的数据重新插入到表里面。

(2)SQL> alter table emp enable row movement;开启这个表的行迁移功能,就可以直接闪回表,闪回到需要的时间。

Flashback table emp to timestamp to_date('2017-12-29 03:20:27','yyyy-mm-dd hh24:mi:ss');

SQL> Flashback table emp to timestamp to_date('2017-12-29 03:20:27','yyyy-mm-dd hh24:mi:ss');

Flashback complete.

SQL> select * from emp;

ID NAME

---------- ----------

1 aaaa

2 b

3 cc

可以看到闪回查询将表恢复了。就是利用undo表空间里面旧的数据找回来。

如果要闪回一个数据库是要有前提的,要求当前数据库归档是开启的。

SQL> archive log list;

Database log mode Archive Mode

Automatic archival Enabled

Archive destination USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence 10

Next log sequence to archive 12

Current log sequence 12

同时还得设置数据库的闪回空间大小。因为闪回库的时候需要依赖闪回日志。而闪回日志是需要存放在某个闪回空间里面的,所以需要开启这个功能。

在mount状态下面

SQL> alter system set db_recovery_file_dest_size=10G;

SQL> alter system set db_recovery_file_dest='/u01/oracle/flash';

SQL> alter system set db_flashback_retention_target=2880 scope=both; 默认1440,一天

SQL> alter database flashback on; 闪回功能开启

SQL> alter database open;

使用truncated表是不会放进回收站的,是无法找回的。

SQL> select current_scn from v$database;

CURRENT_SCN

-----------

1318941

SQL> truncate table emp;

Table truncated.

SQL> create table test (id number); 创建一张新的表做测试 看看闪回之后是否还在

Table created.

SQL> insert into test values(1);

1 row created.

SQL> conn / as sysdba

Connected.

SQL> startup force mount;

ORACLE instance started.

SQL> flashback database to scn 1318941 ;将整个数据库运行状态都进行回退

Flashback complete.

SQL> flashback database to scn 1318941 ;

Flashback complete.

SQL> alter database open resetlogs;

Database altered.

SQL> conn hr/oracle

Connected.

SQL> select * from emp;

ID NAME

---------- ----------

1 aaaa

2 b

3 cc

SQL> select * from test;

select * from test

*

ERROR at line 1:

ORA-00942: table or view does not exist

可以看到数据库回退了。即SCN 1318941之前的都有,之后的都没有了。

1、打开flashback:

关闭数据库

SQL>shutdown immediate;

启动到mount方式

SQL>startup mount;

如果归档没有打开,打开归档[因为flashback依赖Media recovery,所以在打开flashback之前必须先启用归档

SQL>alter database archivelog;

打开闪回

SQL> alter database flashback on;

2、关闭flashback:

关闭数据库:

SQL>shutdown immediate

启动到mount方式

SQL>startup mount;

关闭闪回

SQL> alter database flashback off;

关于Oracle闪回的打开和关闭,主要就是需要注意以下几点:

1、闪开打开的前提是数据库归档必须打开

2、闪回打开/关闭和归档打开/关闭一样,都是在mount模式下

3、如果要在打开闪回的数据库上关闭归档则必须先关闭依赖于归档的闪回功能

查看flashback是否开启:select name,flashback_on from v$database; 查看闪回恢复区及大小是否设置:show parameter db_recovery; 先设置闪回恢复区的大小:alter system set db_recovery_file_dest_size='2G'; 再设置闪回恢复区路径:alter system set db_recovery_file_dest='E:\oracle\product\10.2.0\db_recovery_file_dest'; 设置数据库回退的时间,默认1440分钟为一天时间:alter system set db_flashback_retention_target = 1440;

03-28
### MCP API 的文档与使用教程 MCP 是一种用于增强大型语言模型 (LLM) 功能的技术框架,它通过提示(Prompts)、资源(Resources)以及工具(Tools)这三种核心原语来扩展 LLM 能力[^2]。Apifox 平台也认识到 MCP 技术在 API 开发领域的重要作用,并将其应用于实际场景中[^1]。 为了实现将 `/Users/syw/project/wechatAr` 文件夹下的所有文件上传至远程服务器 `47.93.xx.xx` 用户名 `root` 下的 `/opt/ll` 目录的操作,可以基于 MCP 工具功能构建一个自定义的服务逻辑。以下是具体实现方法: #### 实现方案 利用 SCP 命令完成文件传输任务,并结合 MCP 的 Tool 功能封装此操作以便于后续调用。当关键词为“上传微信目录”时,触发该工具执行相应动作。 ```python import subprocess def upload_wechat_directory(): source_dir = "/Users/syw/project/wechatAr/*" target_server = "root@47.93.xx.xx:/opt/ll/" try: result = subprocess.run(["scp", "-r", source_dir, target_server], check=True) return {"status": "success", "message": f"All files from {source_dir} have been uploaded to {target_server}"} except Exception as e: return {"status": "error", "message": str(e)} # 将上述函数注册为 MCP 中的一个 tool tools = { "upload_wechat_directory_tool": upload_wechat_directory, } # 定义 prompt 和 resource 配置部分省略... ``` 以上代码片段展示了如何创建一个名为 `upload_wechat_directory_tool` 的工具并将其集成到 MCP 系统里去[^3]。每当接收到匹配条件的消息比如含有特定关键字的时候就会激活对应的行为即启动SCP进程从而达成目标需求。 #### 进一步学习资料推荐 对于希望深入研究或者实践更多关于 MCP 应用案例的人士来说,《MCP 教程进阶篇》提供了丰富的实例分析和技术细节值得参考阅读;另外《MCP 极简入门:超快速上手运行简单的 MCP 服务和 MCP 客户端》同样是非常好的起点材料之一可以帮助初学者迅速掌握基础概念及其运作机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值