20_11g新特性_自动存储管理

  • 格式:docx
  • 大小:567.96 KB
  • 文档页数:37

Oracle Database 11g:

面向 DBA 和开发人员的重要特性

自动存储管理

用于管理 ASM 实例的新的 SYSASM 角色、用于降低共享池使用的可变的区大小,以及实例能够读取磁盘组的特定磁盘,这些都是 Oracle Database 11g ASM 中引入的一些重要新特性。

SYSASM 角色

自动存储管理 (ASM) 是在 Oracle Database 10g 中引入的,它在某种程度上打破了 DBA 和系统管理员之间在存储分配功能上的界限。ASM 实例由 DBA 管理,正如常规的 DBA 工作需要以 SYSDBA 角色进行连接一样。但是随着时间的推移,角色变得更加清楚,我们看到发生了基本的分工。因此,一些 ASM 操作返还给系统管理员。在某些情况下,会出现单独的一类“ASM 管理员”,他们只进行 ASM

管理,并不涉及数据库管理。

然而,这个新角色的出现引发了一个冲突:需要用 SYSDBA 角色来管理 ASM 实例,但运行在同一台服务器上的生产数据库的许多 DBA 感觉很难共享该角色。

Oracle Database 11g 消除了这个冲突。有一个新角色 SYSASM,只用于管理 ASM

实例。这类似于针对 ASM 实例的 SYSDBA 角色。下面将演示如何连接到 ASM 实例:

$ sqlplus / as sysasm

SQL*Plus: Release 11.1.0.6.0 - Production on Fri Sep 28 20:37:39 2007

Copyright (c) 1982, 2007, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining

and Real Application Testing options

SQL>

注意连接子句“as sysasm”。在 Oracle Database 11g 第 1 版中,该 SYSASM

角色被授予具有 SYSDBA 权限的操作系统组(大多数情况下为“dba”)。换言之,Unix 中属于 dba 组的用户也可以作为 SYSASM 进行连接。(今后的版本会更改这种安排;sysdba 和 sysasm 角色将分成不同的 OS 组。)

以 sys 用户身份连接到 ASM 实例后,您可以更新在口令文件中更新的 SYS 口令:

SQL> alter user sys identified by oracle

2 /

User altered.

尽管这个 ASM 实例不带数据库,您仍然可以创建用户:

SQL> create user asmoper identified by dumboper

2 /

User created.

现在,您可以将 SYSASM 角色授予该用户:

SQL> grant sysasm to asmoper;

Grant succeeded.

进行授权之后,asmoper 用户(而非 SYS 用户)可以执行所有 ASM 管理功能。该用户可以通过子句 as sysasm 进行连接,该子句类似于常规数据库中的“as

sysdba”子句。

$ sqlplus asmoper/dumboper as sysasm

这个特性实现了迫切需要的 ASM 和 DBA 职责分离。

可变的区大小

ASM 存储中结构最小的元素是分配单元 (AU),与 Oracle 数据库块的概念类似。创建表和索引之类的数据库段时,分配的最小单元不是一个块,而是一个包含多个块的区。您可以更改段的区大小。 ASM 中有一个非常类似的概念:在 ASM 磁盘组上创建文件时,最小的可寻址单元是区,而不是 AU。在 Oracle Database 10g 中,AU 和区是可互换的;一个区只包含一个 AU。

10g 兼容的磁盘组需要共享池为每个区提供内存。对于大型数据库,这又需要大量内存。因此,如果 AU 大小为 1MB(默认值),1TB 的数据库需要在共享池中管理超过一百万个区。

在 Oracle Database 11g 中,区大小不再等于 AU 大小。创建文件时,区大小从 1MB 开始。文件达到某个阈值时,区大小增加至 4MB,然后是 16MB,最后当达到某个阈值后,区大小为 64MB。您不必担心大小;ASM 实例会自动分配合适的区大小。由于较少数量的区即可容纳大量数据,因此可以大大减少共享池中的区总数,从而将性能提高数倍。

当文件急剧扩大和缩小时,可变的区大小可能会产生一些碎片。如果需要进行碎片整理,ASM 将自动解决该问题。

可变的 AU 大小

正如我在前面提到的,AU 的默认大小为 1MB。对许多数据库而言,这可能足够大了,但请考虑一个大小超过 10TB 的大型数据库。对象可能超过 1MB,因此您可能希望扩大 AU 大小以减少 AU 数量。在 Oracle Database 10g 中,您可以设置一个底线参数来更改 AU 大小。然而,这会影响之后创建的所有磁盘组,而且还需要一个 ASM 实例回收来设置该参数。

在 Oracle Database 11g 中,只需在创建 DG 期间设置一个磁盘组属性 au_size

即可轻松完成此任务,如下所示:

create diskgroup dg6

external redundancy

disk

'/dev/raw/raw13'

attribute 'au_size' = '2M'

AU_SIZE 应为 1M、2M、4M、8M、16M、32M 或 64M(M 代表 MB)。您还可以将该值设成一个绝对值(单位为字节):

attribute 'au_size' = ' 2097152'

创建磁盘组之后,您可以通过以下查询来查看 AU 大小:

select name, allocation_unit_size

from v$asm_diskgroup

/

NAME ALLOCATION_UNIT_SIZE

------- --------------------

DG1 1048576

DG3 1048576

DG6 2097152

DG5 1048576

DG4 1048576

DG2 1048576

注意各个磁盘组名称的 AU 大小。现在,您可以创建具有合适 AU 大小的磁盘组,以满足每个应用程序的需要。

磁盘组属性

ASM 是一个适用于从 10g 到当前版本的 Oracle 数据库的存储平台。因此,11g

上的 ASM 实例可以保存 10g 第 1 版、10g 第 2 版以及 11g 第 1 版(以及更高版本)的数据库。只要 ASM 版本与 RDBMS 的版本相同或者更高,就可以在该

ASM 实例上创建数据库。如果 ASM 和 RDBMS 实例的版本不同,它们将如何通信呢?很简单:ASM 将消息转换成适合 RDBMS 的版本。

默认情况下,ASM 实例可以支持 10g 数据库。但如果您希望在该 ASM 实例上仅放置 11g RDBMS,该怎么办?无需进行消息转换来支持版本差异。但如果可以告诉 ASM 实例唯一支持的数据库是 11g 第 1 版,该怎么办?这将消除,至少可以减少消息转换。在 Oracle Database 11g 中,可以使用 ASM 兼容性和 RDBMS

兼容性磁盘组属性实现。

首先,我们将检查磁盘组的当前属性:

SQL> select compatibility, database_compatibility

2 from v$asm_diskgroup

3 where name = 'DG1'

4 /

COMPATIBILITY DATABASE_COMPATIBILITY

---------------------- ----------------------

10.1.0.0.0 10.1.0.0.0

如您所见,ASM 兼容性(由 COMPATIBILITY 显示)设置为 10.1.0.0.0,这意味着该磁盘组最高可支持 10.1 ASM 结构。因此,该磁盘组可以具有任意 RDBMS 结构。另一列 DATABASE_COMPATIBILITY 显示 RDBMS 兼容性设置为 10.1。这意味着,ASM 磁盘组 DG1 可用于 10.1 版的任何 RDBMS。

由于您只希望创建 11g ASM 和 RDBMS 结构,因此无需拥有 10g 元素。要将该磁盘组的 ASM 兼容性属性设置为 11.1,您可以执行以下语句(在 ASM 实例中):

SQL> alter diskgroup dg1 set attribute 'compatible.asm'='11.1';

现在,如果您检查磁盘组的属性:

COMPATIBILITY DATABASE_COMPATIBILITY

---------------------- ----------------------

11.1.0.0.0 10.1.0.0.0

ASM 兼容性设置为 11.1;但 RDBMS 兼容性仍然设置为 10.1。要将它也更改为

11.1,请使用:

SQL> alter diskgroup dg1 set attribute 'compatible.rdbms'='11.1';

需要特别注意的是:兼容性是针对磁盘组设置的,而不是针对整个 ASM 实例。使用该特性,您只需使用一个 ASM 实例即可满足所有数据库版本类型的需要。根据所使用的版本,您可以相应地设置属性,从而减少版本间通信。

首选的镜像读取

在 Oracle RAC 数据库中,多个节点可能指向同一个 ASM 实例。如果您在一个

ASM 磁盘组中使用正常镜像,访问磁盘的行为可能并不像您预想的那样。

假设您有一个名为 DG2 的磁盘组,它包含两个 failgroup(DG2_0000 和

DG2_0001),每个具有一个单独的磁盘,如下图所示: