使用ORWID模拟坏块并修复过程

使用rowid模拟数据库坏块修复过程: 一、Rowid定义(官网)A globally unique address for a row in a database.Oracle Database

使用rowid模拟数据库坏块修复过程:

一、Rowid定义(官网)
A globally unique address for a row in a database.
Oracle Database uses a rowid to uniquely identify a row. Internally, the rowid is a structure that holds information that the database needs to access a row. A rowid is not physically stored in the database, but is inferred from the file and block on which the data is stored.
An extended rowid includes a data object number. This rowid type uses a base 64 encoding of the physical address for each row. The encoding characters are A-Z, a-z, 0-9, +, and /.
Example 12-1 queries the ROWID pseudocolumn to show the extended rowid of the row in the employees table for employee 100.
Example 12-1 ROWID Pseudocolumn
SQL> SELECT ROWID FROM employees WHERE employee_id = 100;

ROWID
——————
AAAPecAAFAAAABSAAA
Figure 12-8 illustrates the format of an extended rowid.
Figure 12-8 ROWID Format

Description of “Figure 12-8 ROWID Format”
An extended rowid is displayed in a four-piece format, OOOOOOFFFBBBBBBRRR, with the format divided into the following components:
• OOOOOO
The data object number identifies the segment (data object AAAPec in Example 12-1). A data object number is assigned to every database segment. Schema objects in the same segment, such as a table cluster, have the same data object number.
• FFF
The tablespace-relative data file number identifies the data file that contains the row (file AAF in Example 12-1).
• BBBBBB
The data block number identifies the block that contains the row (block AAAABS in Example 12-1). Block numbers are relative to their data file, not their tablespace. Thus, two rows with identical block numbers could reside in different data files of the same tablespace.
• RRR
The row number identifies the row in the block (row AAA in Example 12-1).
After a rowid is assigned to a row piece, the rowid can change in special circumstances. For example, if row movement is enabled, then the rowid can change because of partition key updates, Flashback Table operations, shrink table operations, and so on. If row movement is disabled, then a rowid can change if the row is exported and imported using Oracle Database utilities.
Note:
Internally, the database performs row movement as if the row were physically deleted and reinserted. However, row movement is considered an update, which has implications for triggers.
二、一些说明
rowid是伪列(pseudocolumn),伪劣的意思是实际上这一列本身在数据字典中并不存在,在查询结果输出时它被构造出来的。
rowid并不会真正存在于表的data block中,但是他会存在于index当中,用来通过rowid来寻找表中的行数据。

ROWID 格式:
扩展的ROWID 在磁盘上需要10 个字节的存储空间,并使用18 个字符来显示。

它包含下列组成元素:
1. 数据对象编号:每个数据对象(如表或索引)在创建时都分配有此编号,并且此编号在数据库中是唯一的
2. 相关文件编号:此编号对于表空间中的每个数据文件是唯一的
3. 块编号:表示包含此行的块在数据文件中的位置
4. 行编号:标识块头中行目录位置的位置

在内部,存储的10个字节(bytes),即80位(bit)又按如下规则进行划分:
(1)数据对象编号需要32 bit
(2)相关文件编号需要10 bit
(3)块编号需要22 bit
(4)行编号需要16 bit
查看制定rowid内容
SQL> select file_id,relative_fno,block_id from dba_extents where owner=’CENTER’ and segment_name=’TEST’;

FILE_ID RELATIVE_FNO BLOCK_ID
———- ———— ———-
6 6 136

SQL> select rowid,file_id,relative_fno,block_id from dba_extents where owner=’CENTER’ and segment_name=’TEST’;

select rowid,file_id,relative_fno,block_id from dba_extents where owner=’CENTER’ and segment_name=’TEST’
—rowed不保存在数据字典中
ORA-01446: 无法使用 DISTINCT, GROUP BY 等子句从视图中选择 ROWID 或采样
SQL> set serveroutput on
SQL>
SQL> DECLARE
2 v_rowid_type NUMBER;
3 v_OBJECT_NUMBER NUMBER;
4 v_RELATIVE_FNO NUMBER;
5 v_BLOCK_NUMBERE_FNO NUMBER;
6 v_ROW_NUMBER NUMBER;
7 BEGIN
8 DBMS_ROWID.rowid_info (
9 rowid_in => ‘AAASUSAAGAAAACNAAA’,
10 rowid_type => v_rowid_type,
11 object_number => v_OBJECT_NUMBER,
12 relative_fno => v_RELATIVE_FNO,
13 block_number => v_BLOCK_NUMBERE_FNO,
14 ROW_NUMBER => v_ROW_NUMBER);
15 DBMS_OUTPUT.put_line (‘ROWID_TYPE: ‘ || TO_CHAR (v_rowid_type));
16 DBMS_OUTPUT.put_line (‘OBJECT_NUMBER: ‘ || TO_CHAR (v_OBJECT_NUMBER));
17 DBMS_OUTPUT.put_line (‘RELATIVE_FNO: ‘ || TO_CHAR (v_RELATIVE_FNO));
18 DBMS_OUTPUT.put_line (‘BLOCK_NUMBER: ‘ || TO_CHAR (v_BLOCK_NUMBERE_FNO));
19 DBMS_OUTPUT.put_line (‘ROW_NUMBER: ‘ || TO_CHAR (v_ROW_NUMBER));
20 END;
21 /

ROWID_TYPE: 1
OBJECT_NUMBER: 75026
RELATIVE_FNO: 6
BLOCK_NUMBER: 141
ROW_NUMBER: 0
1、 创建坏块
1) 创建表空间,用户center,指定表空间tps,创建表test,制定到表空间,插入数据
2) 各种方式修改文件,创建坏块,比如编辑数据文件,删除修改其中一个字符,ultraedit工具可行

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1874109.html

(0)
上一篇 2025年2月22日 09:27:30
下一篇 2025年2月22日 09:27:44

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue.js怎么连接数据库

    vue.js连接数据库的方法:1、建立php站点;2、创建数据库;3、php连接数据库;4、创建vue站点;5、创建组件,连接数据库;6、加载组件;7、在app.vue中引入组件。 本文操作环境:windows10系统、php 7&…

    2025年4月5日 编程技术
    200
  • 如何使用Swoole实现WebSocket服务器与数据库交互

    如何使用Swoole实现WebSocket服务器与数据库交互 简介:WebSocket是一种基于TCP协议的全双工通信协议,可以在客户端与服务器之间建立实时的双向通信。而Swoole是一款PHP扩展,可以方便地实现高性能的异步、并发编程。在…

    2025年4月2日
    100
  • Swoole实战:如何使用协程进行数据库操作

    Swoole 实战:如何使用协程进行数据库操作 引言 随着互联网的发展,大量的数据需要存储和处理。对于开发人员来说,在高并发场景下进行数据库操作是一个常见的需求。传统的数据库操作方式会面临阻塞、性能瓶颈等问题,而协程则成为了解决这些问题的一…

    2025年4月2日
    100
  • phonegap使用方法介绍(八)操作数据库

    下面小编就为大家带来一篇使用phonegap操作数据库的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 实例如下: nbsp;html>                          Dat…

    编程技术 2025年4月1日
    300
  • H5的本地存储和本地数据库详细介绍

    这次给大家带来h5的本地存储和本地数据库详细介绍,使用h5的本地存储和本地数据库的本地数据库有哪些,下面就是实战案例,一起来看一下。 本地存储 1.1 本地存储由来的背景 由于HTML4时代Cookie的大小、格式、存储数据格式等限制,网站…

    编程技术 2025年4月1日
    100
  • 使用Ajax和Jquery实现下拉框的二级联动

    下面我就为大家分享一篇使用ajax和jquery配合数据库实现下拉框的二级联动的示例,具有很好的参考价值,希望对大家有所帮助。 首先我们需要先建立好数据库,将一些数据插入进去 需要两张表: province:省份表 city: 城市表 如图…

    2025年3月31日 编程技术
    100
  • 通过javascript连接任意数据库

    下面我就为大家分享一篇javascript连接mysql与php通过odbc连接任意数据库的实例,具有很好的参考价值,希望对大家有所帮助 脑洞大开用javascript链接mysql,2个小时总算实现了,用到了odbc,后面又想到用php链…

    2025年3月31日
    100
  • 如何在Linux上配置分布式数据库

    如何在linux上配置分布式数据库 随着数据量和数据需求的增加,传统的单节点数据库已经无法满足现代应用的需求。分布式数据库的出现为海量数据的管理和查询提供了一种解决方案。本文将重点介绍如何在linux上配置分布式数据库,并提供一些经典的代码…

    编程技术 2025年3月30日
    100
  • MySQL数据行溢出的深入理解

    本篇文章给大家带来的内容是关于mysql数据行溢出的深入理解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、从常见的报错说起 故事的开头我们先来看一个常见的sql报错信息: 相信对于这类报错大家一定遇到过很多次了,特别…

    2025年3月30日 编程技术
    100
  • java利用json文件来实现数据库数据的导入导出

    背景: 工作中我们可能会遇到需要将某个环境中的某些数据快速的移动到另一个环境的情况,此时我们就可以通过导入导出json文件的方式实现。 (学习视频分享:java课程) 举例: 立即学习“Java免费学习笔记(深入)”; 我们将这个环境的数据…

    2025年3月30日 编程技术
    100

发表回复

登录后才能评论