序号 | 分类 | 问题 | 答案 |
1 | 基础概念 | ASM主要功能 | 管理磁盘组 在磁盘组内部管理冗余磁盘组。 最佳的磁盘IO管理和手动的调整。 支持大表空间。 管理数据库对象,在新建数据库对象例如:表空间、日志文件和控制文件等的时候只需要指定文件名即可。 |
2 | 基础概念 | AU是什么 | ASM自动分配的块空间就是Aus,Aus 全称Allocation units。 AU 是组成ASM disk的基本单元。 ASM AU 在10G R2 中系统自动默认为1M(条带大小对应为128K),通过系统隐含参数可以静态调整。11G可以在创建磁盘组的时候动态调整。将Aus尺寸调大的时候,请同时调整_asm_stripesize的大小,例如: _asm_ausize=10485760 _asm_stripesize=1048576 |
3 | 基础概念 | ASM Extents 是什么 | 一个或多个AU组成ASM的Extens(在10G里面AU的大小等于Extens的大小)。一个或多个Extens组成ASM file。可以使用下面的语句查询Extents的分布。 SELECT COUNT(PXN_KFFXP), DISK_KFFXP, GROUP_KFFXP FROM X$KFFXP WHERE GROUP_KFFXP=2 GROUP BY DISK_KFFXP, GROUP_KFFXP ORDER BY GROUP_KFFXP, DISK_KFFXP; |
4 | 基础概念 | ASM Rebalance触发的条件 | 磁盘的添加、删除、改变尺寸会触发Rebalance,但是Rebalance不会自动工作,用来消除hot areas和hot extents. |
5 | 基础概念 | 不同大小的磁盘组成磁盘组会带来什么问题 | 将25GB的磁盘加入50GB的磁盘组,在重新配平的过程中50GB的磁盘分配的extents将会是25GB磁盘分配的extents的两倍。由此看来不同大小的磁盘组成磁盘组会带来IO分布不均匀的问题。 |
6 | 基础概念 | 重新配平的时的IO操作大小 | 10G在重新配平的时候ASM是同步的读1MB写1MB。 |
7 | ASM初始化参数 | INSTANCE_TYPE | 可以设置为ASM与RDBMS,ASM就是设置实例为ASM类型,RDBMS就是数据库类型。 |
8 | ASM初始化参数 | DB_UNIQUE_NAME | 数据库的唯名称,默认值是+ASM,在RAC环境下是+ASM节点编号。 |
9 | ASM初始化参数 | ASM_POWER_LIMIT | 数据自动配平的值,值得范围是1-11,默认只是1,数值越大配平速度越快。生产系统慎用,因为配平的时候AU单元是锁定的,影响数据的访问。你也可以在配平的时候指定改值。 |
10 | ASM初始化参数 | ASM_DISKGROUPS | 设定ASM实例启动的时候挂载的磁盘组。 |
11 | ASM初始化参数 | ASM_DISKSTRING | 设定ASM管理磁盘搜索的路径 |
12 | ASM 后台进程 | PMON | PMON:用于监控ASM实例中进程,主要用于处理失效的进程。 |
13 | ASM 后台进程 | RBAL | 负责创建重新配平的计划和管理磁盘组的Rebalance操作,RBAL调用ARBn(ARB0-ARBA)进程实际执行操作。ASM的RBAL和数据库实例的RBAM的功能是不一样的。 |
14 | ASM 后台进程 | SMON | 系统监控进程和监控CSS服务在节点上的监控。 |
15 | ASM 后台进程 | CKPT | 在RAC中管理跨越实例的调用。 |
16 | ASM 后台进程 | LGWR | 负责管理ASM Active Change Directory (ACD),将缓存中的数据更新到磁盘。 |
17 | ASM 后台进程 | DBWn | DBWn:管理ASM实例的SGA buffer cache,DBWR负责将脏数据(changed metadata buffers)从ASM buffer cache写回磁盘。 |
18 | ASM 后台进程 | MMAN | MMAN:与自动SGA管理有关,负责自动管理SGA。 |
19 | ASM 后台进程 | PSPn | PSPn:用于产生Oracle进程 |
20 | ASM 后台进程 | ARBx | ASM实例的数据配平的操作进程,我们可以在alert_+asm.log中看到在执行ALTER DISKGROUP asm_data2 REBALANCE POWER 5;后看到它们的运行情况。 如下: Starting background process ARB0 Starting background process ARB1 ARB0 started with pid=17, OS id=3972…… |
21 | ASM 后台进程 | GMON | 负责管理磁盘的活动删除和离线,以及负责磁盘组的向前兼容。 |
22 | ASM 后台进程 | ASMB | 该进程使用磁盘组名联系CSS,并且获取关联的ASM连接字符串,然后使用该连接字符串连接ASM实例。通过使用这种持久的连接,交换定期的消息以更新统计,并且提供一种推动机制。在需要ASM干涉的操作期间,例如通过数据库前台创建文件时,数据库前台会直接连接ASM实例以执行该操作。成功完成文件创建之后,ASM将ASM文件的Extent的位图发送给数据库实例。此外,ASMB也将数据库I/O统计信息发送给数据库实例。ASM instace启动以后,通过ASMB进程和osccd通信,将ASM的一些信息告诉给ocssd,而数据库则从ocssd获得这些信息,也就是说,ocssd是ASM Instance和Database之间的纽带。 |
23 | ASM视图 | V$ASM_ALIAS | 显示系统和用户定义的别名(主要是ASM文件的别名),该视图只显示挂载的磁盘组的包括别名。数据库实例该视图没有信息。 |
24 | ASM视图 | V$ASM_CLIENT | 显示每个实例打开的ASM磁盘组 |
25 | ASM视图 | V$ASM_DISK | 显示ASM磁盘的详细信息,主要包括mount status, disk state, size。 |
26 | ASM视图 | V$ASM_DISK_IOSTAT | 显示每一个使用ASM磁盘的数据库实例的IO使用情况。 |
27 | ASM视图 | V$ASM_DISK_STAT | 显示的信息与V$ASM_DISK的一样,但V$ASM_DISK_STAT直接读取内存磁盘信息。避免查询磁盘降低性能。 |
28 | ASM视图 | V$ASM_DISKGROUP | 显示磁盘组的信息。 |
29 | ASM视图 | V$ASM_DISKGROUP_STAT | 显示的信息与V$ASM_DISKGROUP,但V$ASM_DISK_STAT直接读取内存磁盘组信息。避免查询磁盘降低性能。 |
30 | ASM视图 | V$ASM_FILE | 显示ASM文件的信息,只有MOUNT上的磁盘才能显示。 |
31 | ASM视图 | V$ASM_OPERATION | 显示磁盘组配平(rebalance)运行的信息。 OPERATION的状态说明: REBAL 磁盘组正在配平 COD 磁盘组正在恢复 DSCV 磁盘组正在被发现,在RBAL之前。 ACD 新的ASM实例加入cluster和新的ASM实例为了准备提供服务的状态。 RFRSH 磁盘被刷新和删除时候的状态 EXPEL 磁盘被除名时候的状态 |
32 | ASM视图 | V$ASM_TEMPLATE | 显示ASM用户与系统创建模板的信息。 |
33 | ASM 元数据 | COD | Continuing Operations Directory 是ASM负责跟踪长时间操作元数据,例如文件创建和重新配型操作。如果上述操作失败COD记录的数据用于恢复。例如重新配平操作失败,在RAC中它将重新应用于其它可用的节点如果是单实例磁盘组再次挂载的时候重新配平将会重新启动。若果文件创建失败它将负责恢复。在log日志中我们可以看到COD的操作 NOTE: cache mounting group 2/0xB68207F1 (ASM_DATA2) succeeded SUCCESS: diskgroup ASM_DATA2 was mounted Sat Jul 25 16:14:02 2009 NOTE: recovering COD for group 1/0xae7207f0 (ASM_DATA1) SUCCESS: completed COD recovery for group 1/0xae7207f0 (ASM_DATA1) NOTE: recovering COD for group 2/0xb68207f1 (ASM_DATA2) SUCCESS: completed COD recovery for group 2/0xb68207f1 (ASM_DATA2) |
34 | ASM 元数据 | ASM元数据分类包括什么? | ASM元数据分类:物理元数据和虚元数据。物理元数据存储在硬盘固定的位置,虚元数据存储在每一个ASM Flie文件上。所有的元数据存储在一个4K的块在文件头里。 |
35 | ASM 元数据 | 物理元数据分类包括什么? | Disk Header Allocation Table (AT) Free Space Table (FST) Partnership Status Table (PST) |
36 | ASM 元数据 | 磁盘头文件的大小是什么? | 磁盘头文件的大小为一个AU,在每个磁盘的第一个块上。 |
37 | ASM 元数据 | 磁盘头文件包括的内容是什么? | disk name disk number diskgroup name failure group name disk size allocation unit (AU) size creation time mount time ASM compatibility RDBMS compatibility file directory pointer 启动的时候指向了虚拟元数据的位置的指针 ASMLIB reserved block |
38 | ASM 元数据 | 虚元数据包括的内容是什么? | File Directory Disk Directory Active Change Directory (ACD) Continuing Operations Directory (COD) Template Directory Alias Directory Attribute Directory Staleness Directory Staleness Registry |
39 | ASM 元数据 | kfed read 简单说明 | kfbh.endian: /* endianness of writer */ Little endian = 1 Big endian = 0 kfbh.hard: /* H.A.R.D. magic # and block size */ kfbh.type /* metadata block type */ kfbh.datfmt /* metadata block data format */ kfbh.block /* block location of this block*/ blk -- Disk header should have T=0 and NUMB=0x0 obj -- Disk header should have TYPE=0x8 NUMB= kfbh.check /* check value to verify consistency */ kfbh.fcn /* change number of last change*/? kfdhdb.driver /* ASMLIB driver reserved block */ If no driver is defined "ORCLDISK" is used. kfdhdb.compat /* Comaptible software version*/兼容版本 example: 0x 0a 100000 You get: a=10 1=1 so 10.1.0 .0.0 kfdhdb.dsknum /* ASM disk number*/ 每个磁盘组中磁盘的编号从0开始,最大值65335.和kfbh.block.obj相等。 kfdhdb.capname /* Capacity grp, unused*/ kfdhdb.crestmp /* Creation timestamp*/ kfdhdb.mntstmp /* Mount timestamp */ 磁盘扇区的容量 kfdhdb.secsize /* Disk sector size (bytes) * This is the physical sector size of the disk in bytes. All I/O's to the disk are described in physical sectors. This must be a power of 2. An ideal value would be 4096, but most disks are formatted with 512 byte sectors. (from asmlib.h) kfdhdb.blksize /* Metadata block (bytes) */ kfdhdb.ausize /* Allocation Unit (bytes) */ kfdhdb.mfact /* Stride between phys addr AUs */ kfdhdb.dsksize /* Disk size in Aus */ Mulitply by AUs to get actual size of disk when added. kfdhdb.pmcnt /* Permanent phys addressed Aus */ Number of physically addressed allocation units. kfdhdb.fstlocn /* First FreeSpace table blk num */ Used to find freespace. kfdhdb.altlocn /* First Alocation table blk num */ Used to find alocated space. kfdhdb.f1b1locn/* File Directory blk 1 AU num */ Beginging for file directory kfdhdb.grptyp: KFDGTP_EXTERNAL ->指出磁盘类型,外部冗余。 kfdhdb.hdrsts: 3 ; 0×027: KFDHDR_MEMBER - > 磁盘头状态,表明它是磁盘组成员。 kfdhdb.dskname: DATA_0000 ; 0×028: length=9 ->磁盘名称。 kfdhdb.grpname: DATA ; 0×048: length=4 ->磁盘组名称。 kfdhdb.fgname: DATA_0000 ; 0×068: length=9 ->Failure Group组名称,如果该磁盘组没有Failure Group组那么它的fgname名称和dskname相同。 kfdhdb.hdrsts: 磁盘在磁盘组中的状态,这个信息与v$asm_disk的HEADER_STATUS一致。 |
40 | ASM管理 | 如何查询磁盘组状态 | select * from v$asm_diskgroup; select group_number, name, total_mb, free_mb, state, type from v$asm_diskgroup; |
41 | ASM管理 | 如何查询磁盘状态 | SELECT * FROM v$asm_disk; SELECT group_number, disk_number, mount_status, header_status, state, path FROM v$asm_disk |
42 | ASM管理 | 如何挂载磁盘组 | alter diskgroup asm_data1 mount; |
43 | ASM管理 | ASM是什么 | ASM 就是简化的Oracle DB的实例,是Oracle用来管理数据文件的实例,是Oracle自己的卷管理器。一个ASM实例可以同时为多个oracle DB和RAC实例提供服务。 |
44 | ASM管理 | 如何挂载全部磁盘组 | ALTER DISKGROUP ALL MOUNT |
45 | ASM管理 | ASM控制文件存放路径 | show parameter CONTROL_FILES; 这个参数显示的值是有问题的,实际上控制文件存放在ASM的实例中。 |
46 | ASM管理 | 如何启动ASM | 使用Startup启动ASM实例,选项如下 FORCE 用于about 之后的启动 MOUNT 启动实例加载磁盘组 NOMOUNT 启动实例不加载磁盘组 没有OPEN选项 |
47 | ASM管理 | 如何关闭 | 使用SHUTDOWN 关闭ASM实例,选项和DB实例的相同。 |
48 | ASM管理 | ASM 磁盘组冗余级别 | 在 CREATE DISKGROUP 中可以为磁盘组指定如下冗余级别 NORMAL REDUNDANCY 两路镜像,需要两个failure groups。 HIGH REDUNDANCY 三路镜像,需要三个failure groups EXTERNAL REDUNDANCY 使用外部冗余。 |
49 | ASM管理 | 如何创建磁盘组 | create diskgroup asm_data2 normal redundancy failgroup controller1 disk 'F:\asmdisks\_FILE_DISK8', 'F:\asmdisks\_FILE_DISK9' failgroup controller2 disk 'F:\asmdisks\_FILE_DISK10', 'F:\asmdisks\_FILE_DISK11'; CREATE DISKGROUP asm_data1 EXTERNAL REDUNDANCY DISK '/dev/raw/raw1', '/dev/raw/raw2', '/dev/raw/raw3' |
50 | ASM管理 | 如何删除磁盘组 | DROP DISKGROUP asm_data2 INCLUDING CONTENTS; |
51 | ASM管理 | 如何设定AU为128KB | ALTER system SET "_asm_ausize" = 131072 SCOPE=SPFILE; |
52 | ASM管理 | 如何查询ASM的隐含参数 | select a.ksppinm "Name", b.ksppstvl "Value" from x$ksppi a, x$ksppcv b where a.indx = b.indx and ksppinm like '\_%asm%' escape '\' order by a.ksppinm; |
53 | ASM管理 | 如何设置数据文件的别名 | ALTER DISKGROUP asm_data2 ADD ALIAS '+ASM_DATA2/asmrems/datafile/test.dbf' FOR '+ASM_DATA2/asmrems/datafile/test.256.692967941'; |
54 | ASM管理 | 如何删除数据文件的别名 | ALTER DISKGROUP asm_data2 drop ALIAS '+ASM_DATA2/asmrems/datafile/test.dbf'; |
55 | ASM管理 | 如何手动平衡数据在磁盘组上 | ALTER DISKGROUP asm_data2 REBALANCE POWER 5; 例子: 1查询磁盘状态 select group_number, name, total_mb, free_mb, state from v$asm_disk; 2手动配平,同时查询V$ASM_OPERATION,wait选项是为了确保空间的增加和可用,因为重新配平是异步操作。 ALTER DISKGROUP asm_data2 REBALANCE POWER 5 wait; 3再次查询磁盘状态 select group_number, name, total_mb, free_mb, state from v$asm_disk; |
56 | ASM管理 | 如何添加磁盘 | EXTERNAL REDUNDANCY情况下: ALTER DISKGROUP asm_data2 ADD DISK 'F:\asmdisks\_FILE_DISK12', NORMAL REDUNDANCY情况下: ALTER DISKGROUP asm_data2 ADD FAILGROUP controller1 DISK 'F:\asmdisks\_FILE_DISK12' FAILGROUP controller2 DISK 'F:\asmdisks\_FILE_DISK13' |
57 | ASM管理 | 如何删除磁盘 | ALTER DISKGROUP asm_data2 DROP DISK ASM_DATA2_0004; ALTER DISKGROUP asm_data2 DROP DISK ASM_DATA2_0004,ASM_DATA2_0005 REBALANCE POWER 8; |
58 | ASM管理 | ASM文件格式说明 | +group/dbname/file type/tag.file.incarnation 其中,group是磁盘组名,dbname是文件所属的数据库,file type是Oracle文件类型,tag是文件类型特有的信息,file.incarnation对确保唯一性。 |
59 | ASM管理 | ab_ |
在$ORACLE_HOME/dbs下 ab_ |
60 | ASM管理 | hc_ |
在$ORACLE_HOME/dbs下 hc_ |
61 | ASM管理 | 如何RAC环境下不同节点设置的首选读取组 (11G下有效) | Enter the following for Node1 (site1): +ASM1.asm_preferred_read_failure_groups=MYDATA.FG1 Enter this code for Node2 (site2): +ASM2.asm_preferred_read_failure_groups='MYDATA.FG2' |
62 | ASM管理 | 如何在存储间部署移动 | ALTER DISKGROUP ADD DISK '/dev/rdsk/c7t19*' DROP DISK DATA_0001, DATA_0002, DATA_0003, DATA_0004 REBALANCE POWER 8; 这样可以比先删除磁盘再添加磁盘减少两次重新配平。 |
63 | ASM管理 | RDBMS如何在ASM上建立表空间 | CREATE TABLESPACE ISHAN DATAFILE '+DATA' SIZE 10GB;+DATA为磁盘组的名称 |
64 | ASM管理 | 如何查看全部的ASM File 文件? | SELECT CONNECT ('+'||GNAME,SYS_CONNECT_BY_PATH(ANAME, '/')) FULL_ALIAS_PATH FROM (SELECT G.NAME GNAME, A.PARENT_INDEX PINDEX, A.NAME ANAME, A.REFERENCE_INDEX RINDEX FROM V$ASM_ALIAS A, V$ASM_DISKGROUP G WHERE A.GROUP_NUMBER=G.GROUP_NUMBER) START WITH (MOD(PINDEX, POWER(2,24))) = 0 CONNECT BY PRIOR RINDEX = PINDEX; |
65 | ASM管理 | 一个ASM实例Oracle推荐管理几个磁盘组? | 为了降低管理ASM和其磁盘组的复杂程度,Oracle推荐的方法是,一般情况下每个RAC集群或单个ASM实例维护和管理不超过两个磁盘组。一个磁盘组贮存数据,一个磁盘组放闪回区。 |
66 | ASM管理 | 远端数据库可以连接本地ASM实例吗? | 数据库实例是标准Oracle实例,并且是ASM实例的客户端。数据库和ASM之间的通信总是在节点内进行;也就是说,数据库不会联系远程(在RAC中)ASM实例以服务数据库请求。 |
67 | ASM管理 | 如何备份文件头信息 | 可以在ASM实例联机状态下进行dd if=/dev/raw/raw4 bs=4096 count=1 of=/tmp/dd_raw4header或 kfed read /dev/raw/raw4>/tmp/raw4.txt |
68 | ASM管理 | 如何恢复文件头信息 | 必须关闭ASM实例dd if=/tmp/dd_raw4header bs=4096 count=1 of=/dev/raw/raw4 或 kfed merge /dev/raw/raw4 /tmp/raw4.txt |
69 | ASM 故障处理 | ORA-15063 错误 | 处理步骤: 1 检查磁盘组当前状态: SELECT GROUP_NUMBER,DISK_NUMBER,MOUNT_STATUS,HEADER_STATUS,STATE,NAME,PATH FROM V$ASM_DISK; 注意 DISK_NUMBER 等于0 的磁盘,也就是没有加入任何磁盘组的磁盘。 2 根据上述语句返回结果逐一检查磁盘owner和权限是否正确。。 3 检查初始化参数ASM_DISKSTRING是否正确。 4 使用kfed 读取磁盘头信息。 |
70 | 数据库实例 | 在应用ASM的实例中需要调整的初始化参数 | PROCESSES 增加 16. LARGE_POOL 增加 600K. SHARED_POOL 增加内存,用来存储 extent maps. |
71 | 数据库实例 | 增加SHARED_POOL指导方针 | 1 计算文件大小 SELECT SUM (BYTES)/(1024*1024*1024) FROM V$DATAFILE; SELECT SUM (BYTES)/(1024*1024*1024) FROM V$LOGFILE A, V$LOG B WHERE A.GROUP#=B.GROUP#; SELECT SUM (BYTES)/(1024*1024*1024) FROM V$TEMPFILE WHERE STATUS='ONLINE'; 2 添加原则 1.外部冗余磁盘 = (every 100GB of file space needs 1MB of extra shared pool) + 2MB 2.正常冗余: (every 50GB of file space needs 1MB of extra shared pool) + 4MB 3. 高冗余: (every 33GB of file space needs 1MB of extra shared pool) + 6MB |
72 | 数据库新增实例进程 | RBAL进程说明 | 打开所有的磁盘组,列出每一个磁盘组和磁盘组可以提供服务的客户端。 |
73 | 数据库新增实例进程 | ASMB进程说明 | 作用和ASM实例的ASMB相同,信息传递方向相反。 |