Linux系统中,DBA一般使用oracle用户登陆/访问Linux操作系统,然后使用sqlplus命令登陆数据库进行一些维护操作,如果由于某些特殊原因,系统管理员创建了一个db_support用户,如果使用dba_support这个普通账号登陆了Linux操作系统,如何使用sqlplus访问数据库呢?
首先,我们必须在当前用户的主目录下设置环境变量,在~/.bash_profile中加入下面环境变量,例如:
export ORACLE_SID=gsp
export ORACLE_BASE=/opt/oracle19c
export ORACLE_HOME=/opt/oracle19c/product/19.3.0/db_1
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
export PATH
执行source ~/.bash_profile使之生效。然后我们可以使用账号密码登陆数据库。
$ sqlplus sys/****** as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Oct 18 16:19:16 2023
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.16.0.0.0
SQL>
在oracle用户下可以使用下面方式(系统认证登陆)登陆数据库,但是,在db_support用户下,使用下面方式登陆数据库会报ORA-01017错误
$sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Aug 9 10:25:39 2023
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
ERROR:
ORA-01017: invalid username/password; logon denied
那么怎么解决这个问题呢?其实导致这个错误的原因在于这个用户没有加入dba用户组。检查这两个用户所属的用户组,发现dba_support账号不在dba用户组下面,如下所示:
[oracle@db_01 ~]$ id
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba)
[dba_support@db_01 ~]$ id dba_support
uid=54322(dba_support) gid=54321(oinstall) groups=54321(oinstall)
切换到root用户下,将dba_support加入dba用户组后,这个问题解决了
#usermod -G dba dba_support