Oracle文件系统的历史
Oracle文件系统发展历程:
操作系统—数据文件
裸设备(不通过操作系统,直接通过磁盘设备的驱动访问磁盘)很少使用
例如:create tablespace lkhr
datafile '/dev/rac_hr' size 60G; -- 直接访问/dev中的设备,文件路径变成了设备名,而不是dbf文件路径
优点:读取速度比数据文件要快
缺点:一个表空间就需要一个设备,造成资源浪费,且没有数据文件方便管理。
ASM:Oracle自己的文件系统,既不用操作系统的文件系统,也不用直接的裸设备
OCFS(Oracle Cluster File System):oracle的集群文件系统,是集群共享的
OCFS、ASM都是可以共享访问的,但是OCFS更像操作系统的文件系统,但是ASM只能通过ASM的工具进行访问。
实际中,ASM的稳定性、性能等要比OCFS更好,所以即使是Rac,也一般会使用ASM。
ASM概述
ASM的优点:
- 提供高效率的存储管理(比基于操作系统的数据文件的效率要高)
- 提供完整的集群文件系统和卷管理能力
一个ASM可以为多个实例(单服务器上安装多实例、RAC多实例等都可以)提供服务。
CRS也有这个功能,一个Rac架构中,多个实例之间可以通过CRS实现共享。
listenter监听器也可以为多个实例提供服务。
ASM实例
ASM也是实例,包括内存架构和后台进程。
内存分为:
- Fixed Area
- Variable Area
- ASM Cache
单服务器架构下的后台进程分为:
- DBW0
- LGWR
- CKPT
- SMON
- PMON
- VKTM
- PSP0
- MMAN
- RBAL
- GMON
- X000
- DIAG
- DIA0
RAC架构下,ASM会多出几个后台进程:LMON、LMS0、LMD0、LCK0、DIAG、MARK、KATE等
ASM实例由自己的初始化参数,位于:$ORACLE_HOME/dbs/spfile+ASM.ora
。
ASM不需要控制文件。
ASM实例的正常状态为started
,没有mount
、open
状态。
ASM的部分初始化参数:
*.asm_diskgroups='DG_LOG','DG_DATA'
*.asm_diskstring='/dev/rdsk/c*'
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='SHARED'
*.user_dump_dest='/oracle/product/admin/+ASM/udump'
*.background_dump_dest='/oracle/product/admin/+ASM/bdump'
*.core_dump_dest='/oracle/product/admin/+ASM/cdump'
ASM磁盘组
有些大型企业会将Oracle实例和磁盘存储分开,例如某公司购买了7块磁盘存储,使用ASM进行管理,则ASM可以先对磁盘进行分组:
第1组:用来存放索引等数据量少一些的数据,分配2块磁盘
第2组:用来存放业务数据,数据量较大,分配4块磁盘
第3组:用来存放redo日志、归档日志、控制文件等小文件,分配1块磁盘。
磁盘组中创建的文件,可以跨越磁盘组内部的磁盘,但是不能跨越磁盘组。
例如在第1组中创建的表空间数据文件,可以同时使用磁盘2和磁盘2,但是不能跨越到第2个磁盘组中。
添加和删除设备
磁盘组操作:
-- 创建一个磁盘组
-- 服务器上新插入了多块硬盘,先将这些硬盘做成1个逻辑卷,然后将这个逻辑卷创建一个磁盘组
create DiskGroup diskGroup1
external redundancy
disk '/dev/oracleasm/disks/VOL1'; -- 逻辑卷
-- 删除一个磁盘组
drop DiskGroup diskGroup1
including contents;
ASM数据的再分布Rebalancing:ASM中添加或删除设备时,是不需要关闭数据库的,而且设备数量变更后,ASM可以自动对数据做一个平衡,将数据均匀分布在这些磁盘上。
存储的增加和删除时进行rebalance:
-- 添加一个磁盘存储
alter DiskGroup diskGroup1
add disk '/dev/oracleasm/disks/VOL2'
rebalance power 0;
-- 移除一个磁盘存储
alter DiskGroup diskGroup1
drop disk 'DISKGROUP1_0002'
rebalance power 0;
-- 对磁盘组进行rebalance
alter DiskGroup diskGroup1
rebalance power 1;
Rebalance特点:
- rebalance操作不会影响数据库的正常使用(但是会影响I/O效率)
- 能通过数据的重新分布,使系统的I/O得到最大的提升
- 从Oracle10R2之后,如果关闭数据库实例,Rebalance操作会更快
ASM数据冗余 Redundancy
ASM支持三种冗余方式:
- 外部冗余:(大多数企业使用的方式)表示Oracle不会帮你管理镜像,功能由外部存储系统实现,比如通过RAID技术;有效磁盘空间是所有磁盘设备空间的大小之和
- 常规冗余:(默认方式)表示Oracle提供2路镜像来保护数据,会损失一部分磁盘空间用于数据冗余
- 高冗余:表示Oracle提供3路镜像来保护数据,会损失更多磁盘空间用于数据冗余
常规冗余的两路镜像互为冗余。并不是将一块磁盘完整备份到另一个磁盘上,而是向其中一个磁盘写入数据时,将这个数据也在另一个磁盘上写入,是数据层面的冗余,不是整个磁盘的冗余。
ASM日常管理操作
使用sqlplus连接上ASM:
# 将实例切换成ASM实例
export ORACLE_SID=+ASM
# 使用sqlplus进行链接
sqlplus /nolog
sqlplus中启动ASM:
-- 启动asm
-- asm只是一个实例,状态不需要mount、open,只需要started
startup nomount;
-- 使用不加参数的startup命令也可以启动,oracle会在ASM启动到started状态后就自动停止,不再继续mount、open
-- 查看实例名称
select instance_name,status from v$instance;
查看相关进程:
# 查看oracle后台进程
ps -ef | grep ora_
# 查看ASM后台进程
ps -ef | grep asm
常用视图:
-- 查看asm的磁盘组的大小、可用大小等信息
select * from v$asm_diskgroup;
-- 查看asm每一个disk的大小、剩余空间等信息
select * from v$asm_disk;
-- 查看有哪些视图的名称(该sql查的是system表空间,所以需要在oracle实例查,在asm实例上查不了)
select table_name from dict where table_name like '%ASM%';
asm管理的磁盘内容在操作系统下是不可见的(特别是裸设备),使用oracle自带的asm命令行管理工具可以查看:
# 进入asm命令行管理界面(需要先设置ORACLE_SID实例)
asmcmd
# 退出asmcmd
exit
asmcmd提供了一些和操作系统很像的命令:cd(进入路径)、du(查看文件夹大小)、find( 查找)、help(查看帮助)、ls(显示文件)、lsct(显示连接到asm的实例)、lsdg(查看diskgroup相关信息)、mkalias(建别名)、mkdir(建路径)、pwd(查看路径)、rm(删除路径)、rmalias(删除别名)
查看给ASM的磁盘:
# 查看分配给ASM的磁盘
fdisk -l
# 操作系统命令查看不到这些磁盘
df -h
ASM的启停:
启动时,应该先启动ASM实例,再启动数据库实例;
停止时,应该先停止数据库实例,再停止ASM实例。
ASM的关闭:
使用sqlplus连接到ASM的实例后,进行关闭
-- asm不存在数据一致性。检查点等问题,可以直接使用abort参数关闭
shutdown abort;
数据字典视图
ASM视图 | ASM实例 | DB实例 |
---|---|---|
v$asm_client |
用磁盘组管理asm实例的db实例的数据行 | DB实例中每个磁盘组的数据行 |
v$asm_diskgroup v$asm_diskgroup_stat |
asm实例所有磁盘的数据行 | 安装或非安装的磁盘组的数据行 |
v$asm_disk v$asm_disk_stat |
磁盘运行的统计数据 | 磁盘组中磁盘数据行 |
v$asm_file |
磁盘组中数据文件等活动的记录 | 无数据 |
v$asm_operation |
运行中活动的记录 | 无数据 |
v$_asm_alias |
所有安装的磁盘组的别名 | 无数据 |