视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle闪回表实验
2020-11-09 12:49:41 责编:小采
文档


Oracle作业:闪回表实验 1.构造测试表flb_test,数据不小于10000行; TEST_USER1@PRODgt;create table flb_test(id number,dd d

Oracle作业:闪回表实验

1.构造测试表flb_test,数据不小于10000行;

TEST_USER1@PROD>create table flb_test(id number,dd date);

Table created.

TEST_USER1@PROD>begin
2 for i in 1..10000
3 loop
4 insert into flb_test values (i,sysdate+i);
5 end loop;
6 end;
7 /

PL/SQL procedure successfully completed.

exec dbms_stats.gather_table_stats('TEST_USER1','FLB_TEST');
--收集统计信息


2.查询当前时间与scn号;

TEST_USER1@PROD>select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2014-10-13 19:23:29

TEST_USER1@PROD>select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
1144357

3.查看该测试表block数目及大小M;

TEST_USER1@PROD>select SEGMENT_NAME,BYTES/1024/1024 size_m, BLOCKS from user_segments
2 where SEGMENT_NAME='FLB_TEST';

SEGMENT_NAME SIZE_M BLOCKS
--------------- ---------- ----------
FLB_TEST .25 32


4.在这张表的第一和第二列上,创建一个复合索引ind_flb;

TEST_USER1@PROD>create index ind_flb on flb_test(id,dd);

Index created.

5.查看该索引的叶子块的数目以及层数;

TEST_USER1@PROD>select INDEX_NAME,STATUS ,BLEVEL,LEAF_BLOCKS from dba_indexes
2 where index_name ='IND_FLB';

INDEX_NAME STATUS BLEVEL LEAF_BLOCKS
------------------------------ -------- ---------- -----------
IND_FLB VALID 1 33

--平衡树: 高度=层数+1

TEST_USER1@PROD>select SEGMENT_NAME,BYTES/1024/1024 size_m, BLOCKS from user_segments
2 where SEGMENT_NAME='FLB_TEST';

SEGMENT_NAME SIZE_M BLOCKS
--------------- ---------- ----------
FLB_TEST .25 32


6.删除测试表中一半的记录数并提交;

TEST_USER1@PROD>delete from flb_test where id<=5000;

5000 rows deleted.

TEST_USER1@PROD>commit;

Commit complete.

TEST_USER1@PROD>select count(*) from flb_test;

COUNT(*)
----------
5000

TEST_USER1@PROD>exec dbms_stats.gather_table_stats('TEST_USER1','FLB_TEST');

PL/SQL procedure successfully completed.

TEST_USER1@PROD>exec dbms_stats.gather_index_stats('TEST_USER1','IND_FLB');

PL/SQL procedure successfully completed.
--收集表和索引的统计信息

7.闪回fls_test到第二步查询到的时间点;

TEST_USER1@PROD>select table_name ,row_movement from user_tables;

TABLE_NAME ROW_MOVE
------------------------------ --------
SALARY ENABLED
SYS_TEMP_FBT DISABLED
FLB_TEST DISABLED
EMP DISABLED

TEST_USER1@PROD>alter table flb_test enable row movement;

Table altered.

TEST_USER1@PROD>select table_name ,row_movement from user_tables;

TABLE_NAME ROW_MOVE
------------------------------ --------
EMP DISABLED
FLB_TEST ENABLED
SYS_TEMP_FBT DISABLED
SALARY ENABLED

TEST_USER1@PROD>flashback table flb_test to timestamp to_timestamp('2014-10-13 19:23:29','yyyy-mm-dd hh24:mi:ss');

Flashback complete.


TEST_USER1@PROD>exec dbms_stats.gather_table_stats('TEST_USER1','FLB_TEST');

PL/SQL procedure successfully completed.

TEST_USER1@PROD>exec dbms_stats.gather_index_stats('TEST_USER1','IND_FLB');

PL/SQL procedure successfully completed.
--收集表和索引的统计信息
--Oracle只是闪回表,所有的东西都原样保留,,应重新收集统计信息


8.查看闪回结果,以及索引状态;

TEST_USER1@PROD>select count(*) from flb_test;

COUNT(*)
----------
10000

TEST_USER1@PROD>select INDEX_NAME,STATUS ,BLEVEL,LEAF_BLOCKS from dba_indexes
2 where index_name ='IND_FLB';

下载本文
显示全文
专题