天天看点

Oracle学习笔记(闪回)第1篇

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