自动存储管理 (ASM) 是在 Oracle 数据库 10g 中引入的,它在某种程度上打破了 DBA 和系统管理员之间在存储分配功能上的界限。ASM 实例由 DBA 管理,正如常规的 DBA 工作需要以 SYSDBA 角色进行连接一样。但是随着时间的推移,角色变得更加清楚,我们看到发生了基本的分工。因此,一些 ASM 操作返还给系统管理员。在某些情况下,会出现单独的一类“ASM 管理员”,他们只进行ASM 管理,并不涉及数据库管理。 然而,这个新角色的出现引发了一个冲突:需要用 SYSDBA 角色来管理 ASM 实例,但运行在同一台服务器上的生产数据库的许多 DBA 感觉很难共享该角色。
Oracle 数据库 11g 消除了这个冲突。有一个新角色 SYSASM,只用于管理 ASM 实例。这类似于针对 ASM 实例的 SYSDBA 角色。下面将演示如何连接到 ASM 实例:
[root@rac1 ~]# su - grid
grid@rac1:/home/grid>sqlplus / as sysasm
SQL*Plus: Release 11.2.0.1.0 Production on Sun Jul 10 01:04:42 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options
SQL> show user
USER is "SYS"
注意在os层面上,登录用户必须是grid用户,否则使用oracle会出现如下情况:
oracle@rac1:rac1 /home/oracle>sqlplus / as sysasm
SQL*Plus: Release 11.2.0.1.0 Production on Sun Jul 10 00:43:59 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
注意连接子句“as sysasm”。在 Oracle 数据库 11g 第 1 版中,该 SYSASM 角色被授予具有 SYSDBA 权限的操作系统组(大多数情况下为“dba”)。换言之,Unix 中属于 dba 组的用户也可以作为 SYSASM 进行连接。(今后的版本会更改这种安排;sysdba 和 sysasm 角色将分成不同的 OS 组。)
以 sys 用户身份连接到 ASM 实例后,您可以更新在口令文件中更新的 SYS 口令:
SQL> alter user sys identified by YANG;
User altered.
尽管这个 ASM 实例不带数据库,您仍然可以创建用户:
SQL> create user asmyang identified by asmyang;
User created.
现在,您可以将 SYSASM 角色授予该用户:
SQL> grant sysasm to asmyangr;
Grant succeeded.
进行授权之后,asmyang 用户(而非 SYS 用户)可以执行所有 ASM 管理功能。该用户可以通过子句 as sysasm 进行连接,该子句类似于常规数据库中的“as sysdba”子句。
$ sqlplus asmyang/dumbyang as sysasm
这个特性实现了迫切需要的 ASM 和 DBA 职权分离。