<!--DWLayoutEmptyCell--> |
很多时候我们在进行进一步研究时需要转储(dump)Oracle的数据块,以研究其内容,Oracle提供了很好的方式,我们通过以下例子简单说明一下:
[oracle@jumper udump]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.3.0 - Production on Tue Aug 31 17:01:27 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production
SQL> select rowid,deptno,dname,loc from scott.dept;
ROWID DEPTNO DNAME LOC
------------------ ---------- -------------- -------------
AAADZ7AABAAAGK6AAA 10 ACCOUNTING NEW YORK
AAADZ7AABAAAGK6AAB 20 RESEARCH DALLAS
AAADZ7AABAAAGK6AAC 30 SALES CHICAGO
AAADZ7AABAAAGK6AAD 40 OPERATIONS BOSTON
SQL> select file_id,block_id,blocks from dba_extents where segment_name='DEPT';
FILE_ID BLOCK_ID BLOCKS
---------- ---------- ----------
1 25273 8
SQL> alter system dump datafile 1 block min 25273 block max 25274;
System altered.
SQL> !
[oracle@jumper udump]$ ls -l
total 4
-rw-r----- 1 oracle dba 3142 Aug 31 17:04 hsjf_ora_13674.trc
[oracle@jumper udump]$ more hsjf_ora_13674.trc
/opt/oracle/admin/hsjf/udump/hsjf_ora_13674.trc
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production
ORACLE_HOME = /opt/oracle/product/9.2.0
System name: Linux
Node name: jumper.hurray.com.cn
Release: 2.4.18-14
Version: #1 Wed Sep 4 13:35:50 EDT 2002
Machine: i686
Instance name: hsjf
Redo thread mounted by this instance: 1
Oracle process number: 9
Unix process pid: 13674, image: oracle@jumper.hurray.com.cn (TNS V1-V3)
*** 2004-08-31 17:04:27.820
*** SESSION ID:(8.3523) 2004-08-31 17:04:27.819
Start dump data blocks tsn: 0 file#: 1 minblk 25273 maxblk 25274
buffer tsn: 0 rdba: 0x004062b9 (1/25273)
scn: 0x0000.0057c70d seq: 0x01 flg: 0x04 tail: 0xc70d1001
frmt: 0x02 chkval: 0x12e3 type: 0x10=DATA SEGMENT HEADER - UNLIMITED
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 1 #blocks: 7
last map 0x00000000 #maps: 0 offset: 4128
Highwater:: 0x004062bb ext#: 0 blk#: 1 ext size: 7
#blocks in seg. hdr's freelists: 1
#blocks below: 1
mapblk 0x00000000 offset: 0
Unlocked
Map Header:: next 0x00000000 #extents: 1 obj#: 13947 flag: 0x40000000
Extent Map
-----------------------------------------------------------------
0x004062ba length: 7
nfl = 1, nfb = 1 typ = 1 nxf = 0 ccnt = 1
SEG LST:: flg: USED lhd: 0x004062ba ltl: 0x004062ba
buffer tsn: 0 rdba: 0x004062ba (1/25274)
scn: 0x0000.0131909b seq: 0x07 flg: 0x04 tail: 0x909b0607
frmt: 0x02 chkval: 0xa8e7 type: 0x06=trans data
Block header dump: 0x004062ba
Object id on Block? Y
seg/obj: 0x367b csc: 0x00.131909a itc: 2 flg: O typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0001.02a.000003f3 0x0080000b.0188.08 C--- 0 scn 0x0000.0057c70e
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
data_block_dump,data header at 0xadb505c
===============
tsiz: 0x1fa0
hsiz: 0x1a
pbl: 0x0adb505c
bdba: 0x004062ba
76543210
flag=--------
ntab=1
nrow=4
frre=-1
fsbo=0x1a
fseo=0x1f44
avsp=0x1f2a
tosp=0x1f2a
0xe:pti[0] nrow=4 offs=0
0x12:pri[0] offs=0x1f86
0x14:pri[1] offs=0x1f70
0x16:pri[2] offs=0x1f5c
0x18:pri[3] offs=0x1f44
block_row_dump:
tab 0, row 0, @0x1f86
tl: 26 fb: --H-FL-- lb: 0x0 cc: 3
col 0: [ 2] c1 0b
col 1: [10] 41 43 43 4f 55 4e 54 49 4e 47
col 2: [ 8] 4e 45 57 20 59 4f 52 4b
tab 0, row 1, @0x1f70
tl: 22 fb: --H-FL-- lb: 0x0 cc: 3
col 0: [ 2] c1 15
col 1: [ 8] 52 45 53 45 41 52 43 48
col 2: [ 6] 44 41 4c 4c 41 53
tab 0, row 2, @0x1f5c
tl: 20 fb: --H-FL-- lb: 0x0 cc: 3
col 0: [ 2] c1 1f
col 1: [ 5] 53 41 4c 45 53
col 2: [ 7] 43 48 49 43 41 47 4f
tab 0, row 3, @0x1f44
tl: 24 fb: --H-FL-- lb: 0x0 cc: 3
col 0: [ 2] c1 29
col 1: [10] 4f 50 45 52 41 54 49 4f 4e 53
col 2: [ 6] 42 4f 53 54 4f 4e
end_of_block_dump
End dump data blocks tsn: 0 file#: 1 minblk 25273 maxblk 25274
|
很多人经常提出的一个问题是,rdba是如何转换的?
rdba: 0x004062ba (1/25274)
我们通过这个例子介绍一下.
rdba从Oracle6->Oracle7->Oracle8发生了三次改变:
在Oracle6中,rdba由6位2进制数表示,也就是说数据块最多只能有2^6=64个数据文件(去掉全0和全1, 实际上最多只能代表62个文件)
在Oracle7中,rdba中的文件号增加为10位,为了向后兼容,从Block号的高位拿出4位作为文件号的高位.这样从6->7的Rowid无需发生变化. 而数据文件的个数理论上则扩展到了1022个(去掉全0和全1),在Oracle7中,rowid格式为:BBBBBBBB.RRRR.FFFF
在Oracle8中,文件号仍然用10位表示,只是不再需要置换,为了向后兼容,同时引入了相对文件号(rfile#),所以从Oracle7到Oracle8,Rowid仍然无需发生变化. 在Oracle8i中,Oracle引入了dataobj#,rowid的格式变为:OOOOOOFFFBBBBBBSSS,Oracle通过dataobj#进一步向上定为表空间等,从而使每个表空间的数据文件数量理论上可以达到1022个
举例说明如下:
在Oracle6中:
比如: file 8, block 56892
26位block号==56892
vv vvvvvvvv vvvvvvvv vvvvvvvv
00100000 00000000 11011110 00111100
^^^^^^
6位文件号==8
在Oracle7中:
比如:File 255, block 56892
11111100 11000000 11011110 00111100
F C C 0 D E 3 C
\_____/\___/\_______________________/
| | |
| | Block = 0xDE3C = 56892
\_____________
| \
V V
0011 111111 = 0xFF = 255 --注意这里高位和低位要置换才能得出正确的file#
在Oracle8中:
比如:File 255, block 56892
11111100 11000000 11011110 00111100
F C C 0 D E 3 C
\_____/\___/\_______________________/
| | |
| | Block = 0xDE3C = 56892
\_____________
| \
V V
0011 1111 0011 = 03F3 = 1011 --这就是相对文件号
对于我们测试中的例子:
rdba: 0x004062ba (1/25274)
也就是:0000 0000 0100 0000 0110 0010 1011 1010
前10位为rfile#: 0000 0000 01 = 1
后22位为Block#:00 0000 0110 0010 1011 1010 = 25274
|
相关推荐
数据库与Excel之间的数据转换是日常数据管理中常见的需求,尤其在数据分析、报表制作以及数据迁移等场景下。本文将详细讲解如何实现这个过程,并提供一个包含jar包和源码的解决方案,以及数据库创建的SQL文件。 ...
Oracle 数据转储涉及字符集转换的关键点在于保持一致性,以防止数据丢失或错误。当进行Export操作时,如果源数据库的字符集与Export用户会话的字符集不同,Oracle会自动进行字符集转换,并在Dmp文件头部记录Export...
接下来,使用 `ALTER SYSTEM DUMP DATAFILE` 语句转储特定文件号和块号的数据块。转储的文件通常会保存在 `BACKGROUND_DUMP_DEST` 参数指定的目录下,这里为 `/u01/app/oracle/diag/rdbms/bxocp/bxocp/trace`。在该...
Oracle 11g数据库转储文件(dump files)是数据库管理员和开发人员在进行故障排查、数据恢复或学习数据库结构时的重要工具。这些文件包含了数据库的原始数据和元数据,通常用于导出和导入数据,或者在不同环境之间...
"参考资料-机车蓄电池智能检测与数据地面转储分析系统"这个标题表明,这是一个关于铁路运输中机车蓄电池监测技术的参考资料,其中涵盖了智能检测技术和地面数据转储与分析的系统。关键词“智能检测”暗示了现代化的...
数据库中的数据转换为XML格式是一项常见的任务,尤其在数据交换、数据存储或数据解析等场景中。XML(可扩展标记语言)是一种结构化数据表示语言,具有自我描述性且易于机器解析,使得它成为跨平台数据传输的理想选择...
数据记录与转储技术在现代智能系统中扮演着至关重要的角色,特别是在安全性要求极高的领域,如航空和铁路运输。这些技术主要用于收集、存储和分析关键数据,以便于事故分析、故障诊断、状态监控和预测统计。以下是...
基于移动端的车载数据无线转储APP软件设计与实现.pdf
转储 redis 数据库,将数据加载到 redis - 使用 Pythonredis-dump-load将 Redis 数据集转储为适合长期存储的格式(当前为 JSON),然后将此类转储文件中的数据加载回 Redis。特征redis-dump-load支持所有Redis数据...
项目中,提取到的数据会被转换为适当的格式,然后写入Excel工作表。Java提供了多种方式与Excel交互,例如Apache POI库,它可以创建、修改和读取Microsoft Office文件,包括Excel。通过POI,开发者可以创建新的工作...
特别是在信息共享和数据交换成为业务需求常态的今天,如何在保证数据安全的前提下,将内部业务数据转储到外部系统中,成为了一个值得深入探讨的问题。本文针对校园内部业务与外部业务的网络互不连接的工作环境,探讨...
Oracle 提供了数据导出实用工具(也称为 EXP 或 EXPDP),使得我们可以将数据库中的数据导出到转储文件中,以便于备份、迁移或恢复。当面对大规模的数据库时,单个转储文件可能无法满足需求,这时就需要利用多个转储...
mysql2sqlite将MySQL转储转换为与SQLite3兼容的转储(包括来自CREATE块MySQL KEY xxxxx语句)。 用法转储MySQL数据库mysqldump --skip-extended-insert --compact [选项] ... DB_name> du mysql2sqlite将MySQL转储...
综上所述,该报告主要介绍了基于STM32单片机和FPGA技术的机车蓄电池智能检测与数据地面转储分析系统的开发。通过对上述关键技术的深入研究和应用,可以有效地提升机车运行的安全性和可靠性,对于推动我国轨道交通...
该存储库包含用于从Wikidata提取,转换和分析书目数据的脚本。 该项目的当前状态是实验性的 概述 可以从每周提供的Wikidata转储中提取书目数据,如。 从2014年10月开始,将旧的JSON转储存储在Internet Archive中。...
Windows 应用程序崩溃时的内存转储及dump文件的分析 在 Windows 系统中,当应用程序崩溃时,系统会自动将内存转储到 dump 文件中,以便开发人员可以通过 dump 文件来定位问题。为了实现这个功能,我们需要在 ...
在IT行业中,数据库是存储和管理数据的核心工具,而数据转换是系统迁移、数据分析或集成不同系统时不可或缺的环节。本篇文章将详细讲解如何在不同类型的数据库之间进行极速数据转换,特别是从SQL到MySQL以及从SQL到...