什么是ASM
automaticsotrage management-ASM,是Oracle 10g新推出的一个功能,对文件系统和逻辑卷进行整合统一管理,实现最佳性能和最大化资源利用。用来简化管理、存储数据库的:数据文件、控制文件和日志文件等等。
ASM通过使用磁盘组以替代之前的管理众多单个文件的方式,使得这个过程变得简化了。ASM可以看做是Oracle Managed Files(OMF)的延伸出来的,在此基础上包含了条带化和镜像功能,以实现了平衡和安全的数据存储。ASM可以使用原始的裸设备、文件系统分区、NFS和SAN存储等。
ASM通过ASM Instance来实现相关功能,ASM实例和RDBMS实例类似,不过更为小巧和轻量级,没有包含类似RDBMS物理数据文件,只需要几个参数即可启动一个ASM 实例,启动ASM实例之后会产生几个后台进程。
ASM最总要的组件就是磁盘组(diskgroup)了,磁盘组包含若干物理磁盘组成一个单元,对应的物理磁盘就成为asm disk,具体的数据库文件的存放和命名则是通过ASM OMF自己控制的,这个你无法完全控制文件的所有属性(你可以通过使用aliases别名和目录结构使之变得更加友好)。
ASM带来的好处
减少管理工作的复杂性
Ø 简化和减少日常管理工作
Ø 自动进行I/O负调优
Ø 减少需要管理的对象,取而代之是管理DISKGROUP\DISK等,以及OMF的优势
Ø 简化数据库存储配置,在线存储迁移
Ø 减少人为的在操作系统层面误操作带来的删除文件操作风险,因为只能通过ASM Instance进行管理
减少像管理数据和存储的工作的复杂性,使得数据库安装、增加或减少磁盘的工作大大简化,通过管理磁盘组而不是众多文件来减少工作量,把众多磁盘聚合成DISKGROUP作为一个管理单元。
DBA可以通过SLQ*PLUS、Enterprise Manager、DBCA和ASMCMD等工具来管理ASM,通过几条简单的命令来实现磁盘的增删改,ASM会自动在后台重新分布数据到所有磁盘,但是同时保持数据库不间断地运行。
ASM的条带花是有别于传统的RAID的方式,ASM无需重新条带花所有数据,这将会减少I/O的操作以提高性能。
在RAC环境中,使用ASM可以让DBA不在需要系统管理员或者存储管理员的全程配合就可以完成数据库的文件使用,以往需要针对数据文件预先创建LV,但是现在DBA使用使用一条简单的命令就可以了,此外,ASM还隐藏了系统路径的复杂因素,这在RAC环境中无疑消除了更多的复杂性。
分散I/O压力
ASM在所有磁盘上分布数据以带来性能,通过ASM特有的条带花功能,提供更加灵活的磁盘配置,更重要的是减少了磁盘争用和高I/O吞吐量。ASM提供1MB大小的分配单元(AU Allocation Unit),ASM使用指针链接的方式来表示文件块位置,这使得ASM在移动数据的操作中最小化工作量;对于某些需要快速I/O返回的操作,比如日志文件和控制文件,ASM提供了128k的细粒度的条带化,这将允许并行操作多个磁盘以便减少延迟。
镜像功能
ASM提供了3种级别的镜像冗余:正常、高级别和外部冗余。默认情况下是正常级别的,需要设置至少两组的故障组;高级别需要至少三组故障组;而外部级别则不提供故障组,使用基于存储硬件的冗余功能,这个也是Oracle推荐的方式。
直接I/O,避免OS缓存;
可以使用异步I/O;
自动实现I/O性能最大化;
使用条带化分散热点区域;
提供文件块级别的镜像功能;
在线添加、删除存储磁盘,并在所有磁盘上均匀的重新分布数据;
突破文件系统文件大小限制;
最大化利用资源;
-The End-
在网上看到有人遇到数据库空间不够用,问是否可以创建数据库到网络共享磁盘? 答案是可以的。但是这种做法是不推荐的,性能可能会受到影响。
1. 2005/2008 在网络共享磁盘上创建数据库
在2005和2008上默认是不可以在网络共享磁盘上创建数据库的,因为可能会因为网络原因导致数据库的完整性出现问题,同时伴随着IO性能损失导致数据库出现问题。Microsoft KB #304261.但是我们可以通过开启Trace Flag 1807使SQL Server在网络共享磁盘上创建数据库:
Step 1. 启动Trace Flag 1807
DBCCTRACEON(1807, -1)
Step 2. 确保SQL Server Service账户对网络共享磁盘有Full Control权限。
Step 3. 创建数据库
CREATEDATABASE [networked]ON PRIMARY
( NAME = N'networked', FILENAME =
N'\\varund-win7\ATOMNETWORKDB\networked.mdf' , SIZE =3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'networked_log', FILENAME =
N'\\varund-win7\ATOMNETWORKDB\networked_log.ldf' ,SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
2. 2008 R2及之后版本:
从2008R2以后就没有了之前的限制,可以直接创在网络共享磁盘创建数据库(UNC path).
Step 1. 确保SQL Server Service账户对网络共享磁盘有Full Control权限。
Step 2. 创建数据库
CREATEDATABASE[networked_r2]
ON PRIMARY
( NAME = N'networked_r2', FILENAME =
N'\\varund-win7\ATOMNETWORKDB\networked_r2.mdf' , SIZE= 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'networked_r2_log', FILENAME =
N'\\varund-win7\ATOMNETWORKDB\networked_log_r2.ldf' ,SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
更多信息参考:
http://blogs.msdn.com/b/varund/archive/2010/09/02/create-a-sql-server-database-on-a-network-shared-drive.aspx
背景:在向数据表中插入数据时调用已定义的存储过程,对插入数据进行xml解析,该存储过程含参数,
解决方法:为插入数据表建立触发器,在触发器中调用存储过程
存储过程:请参见上一篇博客文章 oracle中使用存储过程解析xml字符串
插入语句为:insert into t_xml(2, ‘<item><cpu_name>name1</cpu_name><value>80%</value></item>’)
触发器建立:
create or replace trigger TRG_t_PARSE
before insert on t_xml
referencing
for each row
declare
-- local variables here
--pragma autonomous_transaction;--自治事务,子事务可以有commit
begin
p_parse(:new.id); --调用存储过程,传参数:new.id
--commit;
endTRG_t_PARSE;