flashback table肯定会造成rowid跟着修改

简介: flashback table肯定会造成rowid跟着修改,为什么要开启行移动?

下面我马上做个实验来验证一下:
SQL> drop tablespace tp2 including contents and datafiles;
Tablespace dropped.
SQL> create tablespace tp2 datafile '/u01/app/oracle/oradata/tp2.dbf' size 512K;
Tablespace created.
SQL> create table t1 (id int,name char(10)) tablespace tp2;
Table created.
SQL> begin
2 for i in 1 .. 1000 loop
3 insert into t1 values(i,'gyj'||i);
4 end loop;
5 commit;
6 end;
7 /
PL/SQL procedure successfully completed.

查rowid
SQL> select rowid,id from t1 where id>=1 and id<=5;
ROWID ID


AAASvnAAIAAAAAOAAA 1
AAASvnAAIAAAAAOAAB 2
AAASvnAAIAAAAAOAAC 3
AAASvnAAIAAAAAOAAD 4
AAASvnAAIAAAAAOAAE 5
SQL> alter table t1 enable row movement;
Table altered.
SQL> select current_scn from v$database;

CURRENT_SCN

6177172

查文件号,块号,行号
SQL> select id,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row# from t1 where id>=1 and id<=5;

    ID      FILE#     BLOCK#       ROW#

     1          8         14          0
     2          8         14          1
     3          8         14          2
     4          8         14          3
     5          8         14          4

SQL> delete from t1;
1000 rows deleted.
SQL> commit;
Commit complete.

插入大量记录,让空间用完为止
SQL> begin
2 for i in 1001 .. 100000 loop
3 insert into t1 values(i,'gyj'||i);
4 commit;
5 end loop;
6 end;
7 /
begin
*
ERROR at line 1:
ORA-01653: unable to extend table GYJ.T1 by 8 in tablespace TP2
ORA-06512: at line 3

SQL> flashback table t1 to scn 6177172;
Flashback complete.

查原来1000行记录的前5行的rowid,与原来的rowid不一样了
SQL> select rowid,id from t1 where id>=1 and id<=5;
ROWID ID


AAASvnAAIAAAAAcAFr 1
AAASvnAAIAAAAAcAFs 2
AAASvnAAIAAAAAcAFt 3
AAASvnAAIAAAAAcAFu 4
AAASvnAAIAAAAAcAFv 5

查原来1000行记录前5行所在的文件号,块号,行号,与原来的块号行号不一样了
SQL> select id,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row# from t1 where id>=1 and id<=5;

    ID      FILE#     BLOCK#       ROW#

     1          8         28        363
     2          8         28        364
     3          8         28        365
     4          8         28        366
     5          8         28        367

我做这个实验是把表空间搞小一点这样更方便观察,在t1表先添加1000条记录,然后delete,最后再向里面插一些记录直到期把空间占完,这样最后新插入的记录会占用原来1000条记录的空间。。。

相关文章
Koa图片上传
koa2一般处理 post 请求使用的是 koa-bodyparser,图片上传使用的是 koa-multer。 这两个在一起没什么问题,但是 koa-multer 和 koa-route(不是 koa-router) 存在不兼容的问题。 故,建议在koa中全局引入
213 0
|
8月前
|
存储 人工智能 运维
破局"私有化部署+项目制"困局:中国SaaS产业迎来云时代的春天
2025年全国两会的政策信号为中国的SaaS产业注入强大动力。政策强调“加快人工智能多场景应用”,警示“防止过度私有化部署+项目制”,推动SaaS模式成为企业数字化转型的核心引擎。SaaS凭借云端化、标准化和高效迭代的优势,破除了定制化困局,降低了边际成本,加速市场渗透。政策鼓励国央企采用SaaS,强化数据安全能力,拓展增量市场。平台型厂商如腾讯、阿里通过开放生态整合垂直领域服务商,形成一站式解决方案,助力行业化适配,推动中国SaaS产业快速发展。
|
9月前
|
数据可视化
YOLO训练/写作脚本目录一览 | 涉及标签格式转换、数据扩充、热力图、感受野、精度曲线、数量统计等近百个脚本文件
YOLO训练/写作脚本目录一览 | 涉及标签格式转换、数据扩充、热力图、感受野、精度曲线、数量统计等近百个脚本文件
287 5
|
12月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
338 8
|
Java Android开发 iOS开发
探索安卓与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的世界中,选择正确的平台是关键。本文通过比较安卓和iOS开发的核心差异,揭示平台选择如何影响应用的性能、用户体验和市场覆盖。我们将深入探讨各自的开发环境、编程语言、用户界面设计原则以及发布流程,以帮助开发者和企业做出明智的决策。
153 22
|
物联网 Unix Linux
操作系统的发展历史
【10月更文挑战第15天】操作系统的发展历史
528 1
|
前端开发 Java 测试技术
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
|
存储 JSON Java
如何对 Apache JMeter 测试脚本进行 Debug?(下)
如何对 Apache JMeter 测试脚本进行 Debug?
如何对 Apache JMeter 测试脚本进行 Debug?(下)
|
算法 决策智能
基于GA-PSO遗传粒子群混合优化算法的CDVRP问题求解matlab仿真
该文介绍了车辆路径问题(Vehicle Routing Problem, VRP)中的组合优化问题CDVRP,旨在找寻满足客户需求的最优车辆路径。在MATLAB2022a中运行测试,结果显示了算法过程。核心程序运用了GA-PSO混合算法,包括粒子更新、交叉、距离计算及变异等步骤。算法原理部分详细阐述了遗传算法(GA)的编码、适应度函数、选择、交叉和变异操作,以及粒子群优化算法(PSO)的粒子表示、速度和位置更新。最后,GA-PSO混合算法结合两者的优点,通过迭代优化求解CDVRP问题。