#ASM 翻译系列第二十六弹:ASM 高级知识 Where is my data
来源:互联网 发布:广州造价数据 编辑:程序博客网 时间:2024/05/18 02:24
原文: Where is my data
作者: Bane Radulovic
译者:邱大龙,沃趣科技数据库技术专家,主要参与公司产品实施、测试、维护以及优化。对SQL优化、数据迁移、备份容灾等有深入的研究,对大数据量数据迁移、故障恢复、高并发下数据库性能调优有丰富的经验。
审校:魏兴华
责编:仲培艺
有时候我们想要知道一个特定的database block位于ASM的哪个磁盘,磁盘的哪个AU以及AU的哪一个块。本篇文章将向大家展示如何解决这个问题。
Database Instance
首先在数据库里创建测试表空间:
SQL> create tablespace T1 datafile '+DATA';Tablespace created.SQL> select f.FILE#, f.NAME "File", t.NAME "Tablespace"from V$DATAFILE f, V$TABLESPACE twhere t.NAME='T1' and f.TS# = t.TS#;FILE# File Tablespace----- ---------------------------------- ---------- 6 +DATA/br/datafile/t1.272.797809075 T1SQL>
注意到ASM file number是272。
现在创建一张测试表并插入数据:
SQL> create table TAB1 (n number, name varchar2(16))tablespace T1;Table created.SQL> insert into TAB1 values (1, 'CAT');1 row created.SQL> commit;Commit complete.
查询块号:
SQL> select ROWID, NAME from TAB1;ROWID NAME------------------ ----AAASxxAAGAAAACHAAA CATSQL> selectDBMS_ROWID.ROWID_BLOCK_NUMBER('AAASxxAAGAAAACHAAA')"Block number" from DUAL;Block number------------135
查询数据文件的块大小:
SQL> select BLOCK_SIZE from V$DATAFILE where FILE#=6;BLOCK_SIZE----------8192
可以看到插入的数据位于135号块,数据文件块大小为8K。
ASM Instance
连接ASM实例,查询272号文件的区分布:
SQL> select GROUP_NUMBER from V$ASM_DISKGROUP where NAME='DATA';GROUP_NUMBER------------ 1SQL> select PXN_KFFXP, -- physical extent numberXNUM_KFFXP, -- virtual extent numberDISK_KFFXP, -- disk numberAU_KFFXP -- allocation unit numberfrom X$KFFXPwhere NUMBER_KFFXP=272 -- ASM file 272AND GROUP_KFFXP=1 -- group number 1order by 1;PXN_KFFXP XNUM_KFFXP DISK_KFFXP AU_KFFXP---------- ---------- ---------- ---------- 0 0 0 1175 1 0 3 1170 2 1 3 1175 3 1 2 1179 4 2 1 1175...SQL>
可以看到文件的区分布在所有磁盘,由于数据文件为Normal冗余,每个区都是两副本。注意我说的是数据文件为Normal冗余。默认情况下,文件会继承磁盘组的冗余策略。控制文件是个例外:即使在Normal冗余的磁盘组,如果磁盘组包含至少3个failgroup,控制文件也会被创建为high冗余。
查询磁盘组的AU大小:
SQL> select VALUE from V$ASM_ATTRIBUTE whereNAME='au_size' and GROUP_NUMBER=1;VALUE-------1048576
AU大小为1MB。注意每个磁盘组可以有不同的AU大小。
Where is my block
现在已知测试数据在272号ASM file的135号块。数据块为8K的情况下,每个AU可以包含128个块。这就意味着135号块位于第二个virtual extent的第7个块。第二个virtual extent包含3号磁盘的1175号AU和2号磁盘的1179号AU。
查询磁盘2和3的名字:
SQL> select DISK_NUMBER, NAMEfrom V$ASM_DISKwhere DISK_NUMBER in (2,3);DISK_NUMBER NAME----------- ------------------------------ 2 ASMDISK3 3 ASMDISK4SQL>
我使用了ASMLIB,所以在OS层面,对应的磁盘名为:
/dev/oracleasm/disks/ASMDISK3和/dev/oracleasm/disks/ASMDISK4
Show me the money
测试数据位于1175号AU的第7个块。我们首先将这个AU的数据dd出来:
$ dd if=/dev/oracleasm/disks/ASMDISK4 bs=1024k count=1 skip=1175 of=AU1175.dd1+0 records in1+0 records out1048576 bytes (1.0 MB) copied, 0.057577 seconds, 18.2 MB/s$ ls -l AU1175.dd-rw-r--r-- 1 grid oinstall 1048576 Oct 27 22:45 AU1175.dd$
注意几个参数的含义:
- bs=1024k – AU的大小
- skip=1175 – 我们需要导出的AU
- count=1 – 只需要导出一个AU
然后将7号块的数据从AU中导出:
$ dd if=AU1175.dd bs=8k count=1 skip=7 of=block135.dd
注意bs指定为8k(数据块大小),skip指定为7(要导出的块号)。
查看数据块内容:
$ od -c block135.dd...0017760 \0 \0 , 001 002 002 301 002 003 C A T 001 006 332 2170020000$
在内容的最后可以看到插入的数据 – CAT。注意Oracle数据块从下向上填充。如果去查看磁盘/dev/oracleasm/disks/ASMDISK3
的1179号AU,结果是一样的。
Conclusion
要定位ASM中数据块的位置,需要知道数据块位于哪个数据文件。然后通过X$KFFXP
视图查看数据文件的区分布。还需要数据块大小和ASM AU大小去定位数据块位于哪个AU。以上操作和ASM或者RDBMS的版本无关。(V$ASM_ATTRIBUTE
视图除外,因为在10g中没有该视图)在Normal和high冗余模式下,将会有多副本数据。但是定位数据块的方法是相同的。
- #ASM 翻译系列第二十六弹:ASM 高级知识 Where is my data
- #ASM 翻译系列第二十五弹:ASM 高级知识 When will my rebalance complete
- #ASM 翻译系列第三十三弹:ASM 高级知识 REQUIRED_MIRROR_FREE_MB
- ASM 翻译系列第十一弹:高级知识 Offline or drop?
- ASM 翻译系列第七弹:高级知识 How many partners?
- ASM 翻译系列第十一弹:高级知识 Offline or drop?
- #ASM 翻译系列第三十弹:高级知识 Physical metadata replication
- ASM 翻译系列第五弹:高级知识 ASM 元数据概述
- #ASM 翻译系列第二十四弹:ASM Internal ASM files number 10 and 11
- #ASM 翻译系列第二十七弹:ASM INTERNAL ASM METADATA BLOCK
- ASM 翻译系列第四弹:高级知识kfed元数据编辑器
- ASM 翻译系列第九弹:ASM工具箱
- ASM 翻译系列第十七弹:ASM Internal ASM Disk Directory
- ASM 翻译系列第十弹:ASM Internal ASM DISK header
- #ASM 翻译系列第十七弹:ASM Internal ASM Disk Directory
- ASM 翻译系列第二弹:ASM 12C 版本新特性
- ASM 翻译系列第二弹:ASM 12C 版本新特性
- ###ASM 翻译系列第二十八弹:ASM INTERNAL Partnership and Status Table
- Java基础加强之集合篇(模块记忆、精要分析)
- pip install mysql-connector-python安装时报错
- 关于图片验证码返回二进制流,进行转换为Web的相对路径
- MySQL索引
- 粘连 Footer 的 5 种方法 | CSS-Tricks
- #ASM 翻译系列第二十六弹:ASM 高级知识 Where is my data
- vue中如何定义全局函数
- MPU6050
- leetcode 143. Reorder List
- 一篇文章学会springMVC
- oj1975: C语言实验——求两个整数之和
- 高频dom操作和页面性能优化探索(转)
- JSON详解
- Mac安装破解Unity3D(5.5版本)