Skip to content

Oracle 常见问题及注意事项

非 docker 安装的 oracle,通过客户端工具连接时,可能遇到这些问题:

Oracle 客户端工具 SQL Developer

Windows 下安装 Oracle 时,默认自带安装 SQL Developer 可视化管理工具,可以直接使用。

使用 sqlplus 连接

sql
-- sys 用户在 cmd 下以 DBA 身份登陆
-- 运行 sqlplus 命令,进入sqlplus环境。
-- 其中/nolog是不登陆到数据库服务器的意思,如果没有/nolog参数,sqlplus会提示你输入用户名和密码
sqlplus /nolog   

-- 以系统管理员(sysdba)身份连接数据库,如果需要对数据库进行管理操作,那么需要以这种方式登陆数据库
SQL> connect / as sysdba   
-- 或者如下方式。其中 service_name 是你配置的客户 tnsname 服务名
SQL> connect sys@service_name as sysdba

-- 如果数据库没有启动的话,经过上述步骤连接后,正常启动数据
SQL> startup

这里介绍下几种连接用到的命令形式

shell
# 1. 这是典型的操作系统认证,不需要listener进程
sqlplus / as sysdba

# 2. 这种连接方式只能连接本机数据库,同样不需要listener进程
sqlplus sys/oracle

# 3. 这种方式需要listener进程处于可用状态。最普遍的通过网络连接
sqlplus sys/oracle@orcl

以上连接方式使用sys用户或者其他通过密码文件验证的用户都不需要数据库处于可用状态,操作系统认证也不需要数据库可用,普通用户因为是数据库认证,所以数据库必需处于open状态。

SQLPlus 在连接时通常有三种方式

txt
1. sqlplus / as sysdba
操作系统认证,不需要数据库服务器启动listener,不需要数据库服务器处于可用状态。比如我们想要启动据库就可以用这种方式进入
sqlplus,然后通过startup命令来启动。
 
sqlplus / as sysdba 是操作系统用户验证登录方式通过OS本地的IPC可以直接连接到实例,IPC由本地OS供,允许各种进程在主机内进行通信。所以不需listener也可以连接到实例。

2. sqlplus username/password
连接本机数据库,不需要数据库服务器的listener程,但是由于需要用户名密码的认证,因此需要数据库务器处于可用状态才行。
 
3. sqlplus username/password@orcl
通过网络连接,这是需要数据库服务器的listener处于监听状态。此时建立一个连接的大致步骤如下 
  a. 查询sqlnet.ora,看看名称的解析方式,默认是TNSNAME  
  b. 查询tnsnames.ora文件,从里边找orcl的记录,并且找到数据库服务器的主机名或者IP,端口和service_name  
  c. 如果服务器listener进程没有问题的话,建立与listener进程的连接。  
  d. 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端
            就连接上了数据库的server process。
  e. 这时连接已经建立,可以操作数据库了。

ORA-12514:TNS:listener does not currently know of service requested in connect descriptor

首先检查如下信息是否正确:主机、端口号、用户名和密码。

其次检查服务名是否正确,默认的服务名是 ORCL,但有时候会被修改。可通过如下方式查询:

sql
-- sqlplus 本地登录后,执行查询:
SQL> select global_name from global_name;

GLOBAL_NAME
-----------------------------------------
ORCL

这个时候服务名称是 ORCL,有些版本或容器默认是 XE,这时候连接的时候修改为 XE 即可。

sqlplus 可以连接,但客户端工具无法使用 SYS 用户连接 ORA-12541

ORA-12541: Cannot connect. No listener at host 192.168.188.141 port 1521. (CONNECTION_ID=YWFMDX8WQVqJpeOreyFc4w==)

ORA-12541: TNS: 无监听程序

使用 oracle 服务器上的 net configuration assistant 工具重新配置【监听程序配置】和【本地网络服务名配置】。

配置【监听程序配置】时,选择:

  • 【重新配置】
  • 【LISTENER】
  • 【TCP】
  • 【1521】

配置【本地网络服务名配置】时,选择:

  • 【重新配置】
  • 服务名选择【ORCL】(根据自己实际情况)
  • 【TCP】
  • 主机名写 ip 地址【192.168.1.100】
  • 【1521】
  • 【是,进行测试】
  • 【更改登录】修改用户名和密码为自己创建的普通角色的用户。
  • 提示测试成功,则完成配置。

创建的新用户无法登录 ORA-01017

ORA-01017: invalid username/password; logon denied

检查客户端工具是不是【角色】没有选【Normal】