ASM 实例 ORA-15063 ORA-15186 ASMLIB error function = [asm_open], error = [1], mesg = [Operation not p

 

 

       RAC时,用DBCA命令创建了ASM 实例,之后创建diskgroup的时候,有一个节点的diskgroup 挂不上,看了下日志,错误如下:

      

ORA-15186: ASMLIB error function = [asm_open], error = [1], mesg = [Operation not permitted]

 

ORA-15063: ASM discovered an insufficient number of disks for diskgroup "FRA"

ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DATA"

 

 

不过错误是提示是很恶心的,误导了我很长时间:

       Ensure that the listener is runing on this node and the ASM instance is registered to the listener.

 

一度以为是监听的问题。 不过后来发现还是权限问题。

 

总的来说,导致不能mount 的原因,有两方面原因:

1Oracle ASM database instance parameter asm_diskstring is unset

2Oracle ASM database instance parameter asm_diskstring was recently modified to include devices or directories that it has no privilege to access

 

1. 对应Device 的权限问题

       Device 需要oracle 用户的权限。

 

[oracle@rac1 mapper]$ ll

brw-rw---- 1 oracle oinstall 253,  3 Mar 21 15:01 data

brw-rw---- 1 oracle oinstall 253, 12 Mar 24 13:40 datap1

brw-rw---- 1 oracle oinstall 253,  2 Mar 21 15:01 fra

brw-rw---- 1 oracle oinstall 253,  8 Mar 24 13:40 frap1

 

不过一般安装的时候,默认是root:disk. 使用命令修改一下:

$chown oracle:oinstall device_name

 

2. asm_diskstring 参数的问题

       这个参数也会导致权限的问题。这个参数是支持通配符的。我开始一直设置成 ORCL:*, 如:

 

SQL> show parameter asm_diskstring

NAME                                 TYPE        VALUE

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

asm_diskstring                       string      ORCL:*

 

       这些设置之后,在创建磁盘组的时候是能够识别的,但是在第二个节点挂载的时候,就报开始提到的错误了。  把整个ASM 删除了2次,重建了2次,问题依旧。 无耐,没有设置通配符了。

 

1)先讲所有已经挂载的磁盘dismout

SQL>alter diskgroup all dismount

 

2)重新指定asm_diskstring:

SQL> alter system set asm_diskstring='/dev/mapper/datap1','/dev/mapper/frap1';

 

3dbca 继续挂载,当然也可以手工的创建磁盘组。

参考:

       Oracle ASM 详解

http://www.cndba.cn/Dave/article/1024

     

       这次一次通过了。

 

4 shutdown ASM实例,重启启动。

       我们之前的的修改是只对内存生效,所以如果ASM重启,就没有了。所以需要修改pfile,在重启。

 

[oracle@rac1 dbs]$ pwd

/u01/app/oracle/product/10.2.0/db_1/dbs

[oracle@rac1 dbs]$ vi init+ASM2.ora

asm_diskstring='/dev/mapper/datap1','/dev/mapper/frap1'

 

注意:

       $ORACLE_HOME下的init+ASM2.ora 只是一个link

[oracle@rac1 dbs]$ ls -lrt init+ASM2.ora

lrwxrwxrwx 1 oracle oinstall 41 Mar 24 12:49 init+ASM2.ora -> /u01/app/oracle/admin/+ASM/pfile/init.ora

 

 

SQL> startup

ASM instance started

 

Total System Global Area   92274688 bytes

Fixed Size                  1217884 bytes

Variable Size              65890980 bytes

ASM Cache                  25165824 bytes

ASM diskgroups mounted

 

SQL> col name format a10

SQL> select  GROUP_NUMBER,NAME,STATE,TYPE,TOTAL_MB,FREE_MB,

  2  UNBALANCED  from v$asm_diskgroup;

 

GROUP_NUMBER NAME       STATE       TYPE     TOTAL_MB    FREE_MB U

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

           1 DATA       MOUNTED     EXTERN      11993      11900 N

           2 FRA        MOUNTED     EXTERN       7993       7900 N

 

 

3.  ASM_DISKSTRING 参数说明

 

       The ASM_DISKSTRING initialization parameter specifies a comma-delimited list of strings that limits the set of disks that an Oracle ASM instance discovers. The discovery strings can include wildcard characters. Only disks that match one of the strings are discovered. The same disk cannot be discovered twice.

       The discovery string format depends on the Oracle ASM library and the operating system that are in use. Pattern matching is supported. Refer to your operating system-specific installation guide for information about the default pattern matching.

 

       For example, on a Linux server that does not use ASMLIB, to limit the discovery process to only include disks that are in the /dev/rdsk/mydisks directory, set theASM_DISKSTRING initialization parameter to:

              /dev/rdsk/mydisks/*

       The asterisk is required. To limit the discovery process to only include disks that have a name that ends in disk3 or disk4, set ASM_DISKSTRING to:

              /dev/rdsk/*disk3, /dev/rdsk/*disk4

       The ? character, when used as the first character of a path, expands to the Oracle home directory. Depending on the operating system, when you use the ? character elsewhere in the path, it is a wildcard for one character.

       The default value of the ASM_DISKSTRING parameter is a NULL string. A NULL value causes Oracle ASM to search a default path for all disks in the system to which the Oracle ASM instance has read and write access. The default search path is platform-specific. Refer to your operating system specific installation guide for more information about the default search path.

       Oracle ASM cannot use a disk unless all of the Oracle ASM instances in the cluster can discover the disk through one of their own discovery strings. The names do not have to be the same on every node, but all disks must be discoverable by all of the nodes in the cluster. This may require dynamically changing the initialization parameter to enable adding new storage.

 

 

 

 

 

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

QQ: 492913789

Email:ahdba@qq.com

Blog: http://www.cndba.cn/dave


DBA1 群:62697716(); DBA2 群:62697977() DBA3 群:62697850()  

DBA 超级群:63306533(); DBA4 群: 83829929 DBA5群: 142216823

聊天 群:40132017

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

 

<think>嗯,用户问的是ASM实例ORA-01017的问题。首先,我需要回忆一下ORA-01017错误的一般原因。这个错误通常和认证有关,比如用户名或密码错误。但ASM实例的情况可能有点不同,因为通常ASM实例的登录是通过操作系统认证或者密码文件来完成的。 接下来,我应该考虑ASM实例的特殊性。ASM实例的默认登录方式可能不是通过普通用户,比如SYS用户,但有时候可能需要使用SYSDBA权限。这时候,如果密码错误或者密码文件有问题,就会导致这个错误。 然后,用户提到的是ASM实例,所以需要检查ASM实例的认证方式。可能的情况包括操作系统组权限是否正确,比如用户是否属于dba组或者asmdba组。另外,ORACLE_SID是否正确设置,如果设置成了数据库实例而不是ASM实例,也会导致登录失败。 另外,密码文件的位置和状态也很重要。ASM实例需要有密码文件,并且密码文件应该存放在正确的目录下,比如$ORACLE_HOME/dbs目录。如果密码文件丢失或者损坏,或者使用了错误的密码,就会报错。 还有,需要检查sqlnet.ora文件中的SQLNET.AUTHENTICATION_SERVICES参数是否设置了正确的认证方式,比如NTS(Windows)或者ALL(Linux/Unix)。如果这个参数设置不正确,可能会禁用操作系统认证,导致必须使用密码文件,这时候如果密码文件有问题就会出现错误。 另外,用户可能在尝试远程连接ASM实例,这时候需要确认监听器是否配置正确,ASM实例是否注册到了监听器,并且远程登录是否被允许。如果远程登录需要密码文件认证,而密码文件不存在或权限不对,也会导致ORA-01017。 还有可能的问题是,ASM实例和数据库实例ORACLE_HOME是否不同,导致环境变量设置混乱。比如,如果用户切换到ASM实例ORACLE_HOME,但环境变量没有正确设置,可能会引用错误的密码文件或者配置。 总结一下,可能的解决步骤包括: 1. 确认使用正确的用户名和密码,尤其是SYS用户和SYSDBA权限。 2. 检查操作系统用户是否属于必要的组,如asmdba。 3. 确认ORACLE_SID是否正确设置为ASM实例的SID。 4. 检查密码文件是否存在,位置是否正确,权限是否合适。 5. 检查sqlnet.ora和listener.ora的配置是否正确。 6. 尝试本地连接和远程连接的不同情况,确定问题范围。 7. 重新生成密码文件,并确保密码与远程登录时使用的密码一致。 可能还需要检查ASM实例的状态是否正常,是否处于开放状态,允许连接。如果ASM实例没有启动或者处于限制模式,也可能导致认证失败。 最后,要确保用户了解ASM实例和普通数据库实例在管理上的不同,比如启动和关闭的方式,以及认证机制的区别。可能需要指导用户一步步检查这些配置,或者提供具体的命令示例,比如使用orapwd创建密码文件,或者检查用户组权限的命令。</think>当ASM实例报错ORA-01017(无效的用户名/口令;登录被拒绝)时,通常与身份验证或权限配置相关。以下是逐步排查和解决的思路: --- ### **1. 确认基础连接信息** - **检查ORACLE_SID** 确保环境变量`ORACLE_SID`正确设置为ASM实例的SID(如`+ASM`或`+ASM1`): ```bash echo $ORACLE_SID ``` - **确认连接语法** ASM实例默认仅允许`SYS`用户以`SYSDBA`/`SYSOPER`权限登录: ```bash sqlplus / as sysdba # 本地操作系统认证 sqlplus sys@+ASM as sysdba # 远程密码文件认证 ``` --- ### **2. 操作系统认证问题** - **用户组权限** ASM实例要求操作系统用户属于`asmdba`组(或`dba`组,具体取决于安装配置): ```bash id -a # 查看当前用户所属组 groups oracle # 查看oracle用户所属组 ``` 若未加入正确组,需联系系统管理员调整。 - **禁用操作系统认证** 检查`$ORACLE_HOME/network/admin/sqlnet.ora`: ```ini SQLNET.AUTHENTICATION_SERVICES = (NTS) # Windows SQLNET.AUTHENTICATION_SERVICES = (ALL) # Linux/Unix ``` 若设置为`NONE`,将强制使用密码文件认证,可能导致本地`/ as sysdba`失败。 --- ### **3. 密码文件问题** - **密码文件存在性** ASM实例的密码文件默认位于`$ORACLE_HOME/dbs/orapw+ASM`(Linux/Unix)或`%ORACLE_HOME%\database\PWD+ASM.ora`(Windows)。 若文件丢失,需重新生成: ```bash orapwd file=$ORACLE_HOME/dbs/orapw+ASM password=<密码> entries=10 ``` - **密码一致性** 确保远程连接时输入的密码与密码文件中的`SYS`用户密码一致。可通过以下命令修改密码: ```sql SQL> ALTER USER SYS IDENTIFIED BY <新密码>; ``` --- ### **4. 监听器配置(远程连接)** - **检查监听状态** 确保ASM实例已注册到监听器: ```bash lsnrctl status ``` 输出中应包含`Service "+ASM"`的状态为`READY`。 - **确认TNS配置** 检查`tnsnames.ora`中ASM实例的条目(示例): ```ini +ASM = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <主机名>)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = +ASM) ) ) ``` --- ### **5. 其他可能原因** - **ASM实例未启动** 检查ASM实例状态: ```bash srvctl status asm ``` 若未启动,尝试启动: ```bash srvctl start asm ``` - **权限冲突** 若同时存在多个Oracle软件安装(如Grid Infrastructure和RDBMS),确保`ORACLE_HOME`和`PATH`变量指向正确的ASM实例路径。 --- ### **6. 总结步骤** 1. 本地连接测试:`sqlplus / as sysdba` 2. 检查操作系统用户组权限 3. 验证密码文件存在性及权限 4. 检查`sqlnet.ora`和监听器配置 5. 重启ASM实例或监听服务 通过以上步骤,可逐步定位并解决ORA-01017错误。如问题仍未解决,建议检查`alert_+ASM.log`日志获取更详细错误信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值