Oracle学习笔记(闪回)第1篇,还有第2篇,第2篇请点击这里
我就直接po代码了,代码就是笔记,笔记就是代码
/*
Oracle学习笔记(闪回)
*/
--创建一个张测试表
create table testFlashBack(
id number primary key not null,
name VARCHAR2(50) not null,
text VARCHAR2(300)
);
--插入数据
insert into testFlashBack values(1, '测试1', '测试1');
insert into testFlashBack values(2, '测试2', '测试2');
insert into testFlashBack values(3, '测试3', '测试3');
--查询数据
select * from testFlashBack;
/*
删除表
通常在使用drop table 表名;删除表后,并
没有直接被删除,而是放在了回收站中
*/
drop table testFlashBack;
--查询
select * from tab;
--查看回收站数据,回收站中都是以bin开头的表
show recycle;
--也可以通过如下语句查看回收站数据
select * from user_recyclebin;
--
select * from user_recyclebin where original_name = 'TESTFLASHBACK';
/*
这是刚才删除的testFlashBack表
由于表名中有其它特殊符号所以要加双引号进行访问
*/
select * from "BIN$0YRQTnu2Q9OFRyjQlr0MNw==$0";
--从回收站还原删除的表
--恢复删除表
flashback table testFlashBack to before drop;
--表已经恢复,而且表内的数据也都会恢复
SELECT * from testFlashBack;
--创建表
create table hometown2(
id number primary key not null,
name VARCHAR2(200) not null
);
--插入数据
insert into hometown2 values(1, '江西省赣州市于都县');
insert into hometown2 values(2, '江西省赣州市赣县');
insert into hometown2 values(3, '江西省赣州市兴国县');
insert into hometown2 values(4, '江西省赣州市会昌县');
--查询数据
select * from hometown2;
--删除表
drop table hometown2;
--可以通过如下语句查看回收站数据
select * from user_recyclebin;
--注意:oracle中字段值是区分大小写的
select * from user_recyclebin where original_name = 'HOMETOWN2';
--由于表名中有其它特殊符号所以要加双引号进行访问
select * from "BIN$sbxX9zweSmmqdDdGjKKPMA==$0";
select * from "BIN$oVRH8SwLQFSAqgS92VrVkg==$0";
/*
注意:
1.如果回收站中有两个同名的表,那么在恢复的时候优先恢复最后删除的表
2.但如果两张表都需要恢复,那么需要在恢复的时候给表重命名不然会报错误
*/
--从回收站还原删除的表
--恢复删除表
flashback table HOMETOWN2 to before drop;
--从回收站还原删除的表时,给表重命名
flashback table HOMETOWN2 to before drop rename to HOMETOWN_B;
--查询表
SELECT * from HOMETOWN_B;
--删除表
drop table HOMETOWN_B;
--
select * from tab;
--通过如下语句查看回收站数据
select * from user_recyclebin where original_name = 'HOMETOWN_B';
--也可以使用回收站中的名称直接恢复表,如下:
--不给表重命名
flashback table "BIN$zdbHGrhjSWib8AxN6AqHug==$0" to before drop;
--给表重命名
flashback table "BIN$zdbHGrhjSWib8AxN6AqHug==$0" to before drop rename to HOMETOWN_C;
--查询表
SELECT * from HOMETOWN_C;
--删除回收站内容
/*
purge table 表名;
如果有两个相同的表名,在删除的时候可以直接使用回收站中的名字
*/
purge table EMP10;
purge table "BIN$gqaAo9YvRDKJLXBVUVcefQ==$0";
--查看回收站中的数据
select * from user_recyclebin;
/*
如果想直接删除回收站中的全部内容,可
以直接使用purge recyclebin;
*/
--
purge recyclebin;
--查看回收站中的数据
select * from user_recyclebin;
/*
在删除表的时候也可以直接删除表,而不进入回收站
drop table 表名 purge;
*/
--
select * from HOMETOWN_C;
--在删除表的时候直接彻底删除表,而不进入回收站
drop table HOMETOWN_C purge;
--查看回收站中的数据
select * from user_recyclebin;
/*
使用闪回版本查询:它的作用是记录数据内容的更
改记录。它允许查询15分钟内的操作记录
*/
--
select * from emp;
--修改数据
update emp set ename = '杨过' where empno = 7782;
commit;
--修改数据
update emp set ename = '郭靖' where empno = 7782;
commit;
/*
versions_starttime 开始时间
versions_endtime 结束时间,如果有值的话证明这条数据的值就不是现在的值了
versions_xid 这个代表事务编号
versions_operation 这个代表操作类型(增删改等操作)
versions_startscn 开始scn号
versions_endscn 结束scn号,如果有值的话就证明这条数据就不是现在的值了
*/
--查询出更改记录(使用了伪列)
select versions_starttime,versions_endtime,versions_xid,versions_operation,ename,sal
from emp versions between scn minvalue and maxvalue where empno=7782;
--查询更改记录也可以根据事务号来进行查询
select versions_startscn,versions_endscn,versions_xid,versions_operation,ename,sal
from emp versions between scn minvalue and maxvalue where empno=7782;
--执行闪回查询(在执行闪回查询时是根据scn来进行查询的)
select * from emp as of scn 7642131;
/*
使用闪回事务处理查询
闪回事务查询需要使用sys登录,并且打开追加日志模式。
才能够进行操作。默认是没有打开的。通过以下操作进行打开
*/
--
SELECT supplemental_log_data_min FROM v$database;
--
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
--
SELECT supplemental_log_data_min FROM v$database;
--使用闪回事务处理
--把数据修改后,进行恢复
--先查询一下
SELECT * from emp;
--查询更改记录也可以根据事务号来进行查询
select versions_startscn,versions_endscn,versions_xid,
versions_operation,ename,sal from emp versions between scn
minvalue and maxvalue where empno=7782;
--
/*
undo这个单词是撤销;松开,解开; 取消,废除; 毁灭; 扰乱;的意
思,这里可以理解成撤销
*/
SELECT undo_sql FROM flashback_transaction_query WHERE XID = '070004002C130000';
/*
将sql语句拷贝出来,执行该sql语句并COMMIT;提交,这
样就可以还原回老的、原来的数据了
*/
update "SCOTT"."EMP" set "ENAME" = '周伯通' where ROWID = 'AAAR3sAAEAAAACXAAG';
COMMIT;
--再次查询一下
SELECT * FROM scott.emp;
--数据库版本
select * from v$version;
--查看服务器数据库字符集
SELECT * FROM v$nls_parameters;
SELECT * FROM v$nls_parameters where parameter like '%NLS_LANG%';
select * from nls_database_parameters;
select userenv('language') from dual;
SELECT * FROM v$nls_valid_values;
--
--set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
--
--set NLS_LANG=american_america.AL32UTF8