Oracle Administrator's Guide(Oracle 19c):1.3 SQL Statements

与 Oracle 数据库通信的主要方式是提交 SQL 语句。

向数据库提交命令和 SQL

有几种向Oracle数据库提交 SQL 语句和命令的方法。

  • 直接使用 SQL*Plus 的命令行界面
  • 间接地,使用图形用户界面,如 Oracle Enterprise Manager Database Express(EM Express)或 Oracle Enterprise Manager Cloud Control(Cloud Control)
    使用这些工具,您可以使用直观的图形界面来管理数据库,并且该工具在后台提交 SQL 语句和命令。
  • 直接使用 SQL Developer
    开发人员使用 SQL Developer 创建和测试数据库模式和应用程序,尽管您也可以将其用于数据库管理任务。

Oracle 数据库还支持 SQL 的超集,其中包括启动和关闭数据库、修改数据库配置等命令。

关于 SQL*Plus

SQL*Plus 是 Oracle 数据库的主要命令行接口。使用 SQL*Plus 可以启动和关闭数据库、设置数据库初始化参数、创建和管理用户、创建和修改数据库对象(如表和索引)、插入和更新数据、运行 SQL 查询等等。

在提交 SQL 语句和命令之前,必须连接到数据库。使用 SQL*Plus,您可以本地或远程连接。本地连接是指连接到运行 SQL*Plus 的同一台计算机上运行的 Oracle 数据库。远程连接是指通过网络连接到远程计算机上运行的 Oracle 数据库。这样的数据库称为远程数据库。本地计算机上的 SQL*Plus 可执行文件由完整的 Oracle 数据库安装、Oracle 客户端安装或即时客户端安装提供。

使用 SQL*Plus 连接数据库

使用 SQL*Plus 连接到 Oracle 数据库实例。

关于使用 SQL*Plus 连接数据库

Oracle 数据库包括以下组件:Oracle 数据库实例(进程和内存的集合)和一组磁盘文件(包含用户数据和系统数据)。

每个实例都有一个实例 ID,也称为系统 ID(SID)。由于主机上可能有多个 Oracle 实例,每个实例都有自己的数据文件集,因此必须确定要连接的实例。对于本地连接,您可以通过设置操作系统环境变量来标识实例。对于远程连接,可以通过指定网络地址和数据库服务名称来标识实例。对于本地和远程连接,必须设置环境变量,以帮助操作系统找到 SQL*Plus 可执行文件,并为可执行文件提供其支持文件和脚本的路径。

步骤1:打开命令窗口

在您的平台上执行必要的操作,打开一个窗口,在其中输入操作系统命令。

  • 打开命令窗口。

步骤2:设置操作系统环境变量

根据您的平台,您可能必须在启动 SQL*Plus 之前设置环境变量,或者至少验证它们是否正确设置。

例如,在大多数平台上,必须设置环境变量 ORACLE_SID 和 ORACLE_HOME。另外,必须配置 PATH 环境变量,使其包含 ORACLE_HOME/bin 目录。某些平台可能需要额外的环境变量:

  • 在 Unix 和 Linux 环境下,可以根据需要输入操作系统命令设置环境变量。
  • 在 Microsoft Windows 操作系统下,安装程序会自动在 Windows 注册表中为 ORACLE_HOME 和 ORACLE_SID 赋值。修改 LD_LIBRARY_PATH

如果在安装时没有创建数据库,那么安装程序不会在注册表中设置 ORACLE_SID;在以后创建数据库之后,必须从命令窗口设置 ORACLE_SID 环境变量。

Unix 和 Linux 安装附带了两个脚本,oraenv 和 coraenv,您可以使用它们轻松地设置环境变量。

对于所有平台,当在具有不同Oracle home的实例之间切换时,必须更改ORACLE_HOME环境变量。如果多个实例共享同一个Oracle home,那么切换实例时只需要修改 ORACLE_SID。

例 1:设置 Unix 环境变量(C Shell)

setenv ORACLE_SID orcl
setenv ORACLE_HOME /u01/app/oracle/product/database_release_number/dbhome_1
setenv LD_LIBRARY_PATH $ORACLE_HOME/lib:/usr/lib:/usr/dt/lib:/usr/openwin/lib:/usr/ccs/lib

例 2:设置 Linux 环境变量(Bash Shell)

export ORACLE_SID=orcl
export ORACLE_HOME=/u01/app/oracle/product/database_release_number/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/dt/lib:/usr/openwin/lib:/usr/ccs/lib

例 3:设置 Windows 环境变量

SET ORACLE_SID=orawin2
setenv LD_LIBRARY_PATH $ORACLE_HOME/lib:/usr/lib:/usr/dt/lib:/usr/openwin/lib:/usr/ccs/lib:$LD_LIBRARY_PATH

这个 Microsoft Windows 示例假设在注册表中设置了 ORACLE_HOME 和 ORACLE_SID,但是您想要覆盖 ORACLE_SID 的注册表值以连接到另一个实例。

在 Microsoft Windows 上,在命令提示符窗口中设置的环境变量值将覆盖注册表中的值。

启动 SQL*Plus

要连接到 Oracle 数据库,请使用以下选项之一启动 SQL*Plus。

  1. 做以下其中一件事:

    • 确保 PATH 环境变量中包含$ORACLE_HOME/bin
    • 修改目录为$ORACLE_HOME/bin。确保 PATH 环境变量包含一个点(“.”)。
  2. 输入如下命令(Unix 和 Linux 区分大小写):

    sqlplus /nolog

    也可以通过指定 sqlplus 的完整路径来运行 sqlplus 命令:

    $ORACLE_HOME/bin/sqlplus /nolog

步骤4:提交 SQL*Plus CONNECT 命令

要初始连接到 Oracle 数据库实例,或者在任何时候以不同的用户重新连接,请提交 SQL*Plus CONNECT 命令。

  • 在 SQL*Plus 中提交 CONNECT 命令。

例 1:连接数据库本地用户

连接数据库本地用户

这个简单的示例以 SYSTEM 用户身份连接到本地数据库。SQL*Plus 提示输入 SYSTEM 用户密码。

connect system

例 2:以 SYSDBA 权限连接本地数据库用户

本例以具有 SYSDBA 权限的用户 SYS 连接到本地数据库。SQL*Plus 提示输入 SYS 用户密码。

connect sys as sysdba

使用SYS用户连接时,必须以AS SYSDBA连接用户。

例 3:以 SYSBACKUP 权限连接本地数据库用户

本例以具有 SYSBACKUP 权限的 SYSBACKUP 用户连接到本地数据库。SQL*Plus 提示输入 SYSBACKUP 用户密码。

connect sysbackup as sysbackup

SYSBACKUP 用户连接时,必须以 AS SYSBACKUP 连接用户。

例 4:使用 SYSDBA 权限本地连接,使用操作系统认证

本例使用 SYSDBA 权限与操作系统身份验证进行本地连接。

connect / as sysdba

例 5:使用 Easy Connect 语法连接

本例使用简单连接语法以用户 salesadmin 的身份连接到运行在主机 dbhost.example.com 上的远程数据库。Oracle Net Listener 在默认端口(1521)上监听。数据库服务为 sales.example.com。SQL*Plus 提示输入 salesadmin 用户密码。

connect salesadmin@"dbhost.example.com/sales.example.com"

例 6:使用 Easy Connect 语法连接并指定服务处理程序类型

此示例与使用 Easy Connect 语法连接到数据库相同,只是指出了服务处理程序类型。

connect salesadmin@"dbhost.example.com/sales.example.com:dedicated"

例 7:使用Easy Connect语法使用非默认监听端口进行连接

此示例与使用 Easy Connect 语法连接到数据库相同,不同之处在于监听器正在监听非默认端口号1522。

connect salesadmin@"dbhost.example.com:1522/sales.example.com"

例 8:使用 Easy Connect 语法通过主机IP地址连接

这个示例与使用 Easy Connect 语法连接到数据库相同,只是主机 IP 地址被替换为主机名。

connect salesadmin@"192.0.2.5/sales.example.com"

例 9:使用 Easy Connect 语法通过主机IP地址连接

本例使用 IPv6 地址进行连接。注意其中的方括号。

connect salesadmin@"[2001:0DB8:0:0::200C:417A]/sales.example.com"

例 10:指定实例连接

此示例指定要连接的实例,并省略数据库服务名称。注意,当您只指定实例时,您不能指定服务处理程序类型。

connect salesadmin@"dbhost.example.com//orcl"

例 11:使用 Net 服务名连接

本例以用户 salesadmin 的身份远程连接到由网络服务名称 sales1 指定的数据库服务。SQL*Plus 提示输入 salesadmin 用户密码。

connect salesadmin@sales1

例 12:对接外部认证

本例使用外部身份验证将远程连接到由网络服务名称 sales1 指定的数据库服务。

connect /@sales1

例 13:对接 SYSDBA 特权和外部认证

本例使用 SYSDBA 特权和外部身份验证远程连接到由网络服务名称 sales1 指定的数据库服务。

connect /@sales1 as sysdba

例 14:使用带服务名的用户连接

本例以用户 salesadmin 的身份远程连接到由网络服务名称 sales1 指定的数据库服务。数据库会话从 rev21 版本开始。SQL*Plus 提示输入 salesadmin 用户密码。

connect salesadmin@sales1 edition=rev21

SQL*Plus CONNECT 命令语法

使用 SQL*Plus CONNECT 命令初始连接到 Oracle 实例或重新连接到 Oracle 实例。

CONN[ECT] [logon] [AS {SYSOPER | SYSDBA | SYSBACKUP | SYSDG | SYSKM | SYSRAC}]

logon 的语法如下:

{username | /}[@connect_identifier] [edition={edition_name | DATABASE_DEFAULT}]

当您提供用户名时,SQL*Plus会提示输入密码。输入密码时不回显。

下表描述了 CONNECT 命令的语法组件。

组件 说明
/ 调用连接请求的外部身份验证。在这种类型的身份验证中不使用数据库密码。最常见的外部身份验证形式是操作系统身份验证,其中数据库用户通过使用某个主机用户帐户登录到主机操作系统来进行身份验证。外部身份验证也可以通过 Oracle wallet 或网络服务执行。
AS {SYSOPER |SYSDBA |SYSBACKUP |SYSDG |SYSKM |SYSRAC} 指示数据库用户正在使用管理权限进行连接。只有某些预定义的管理用户或已添加到密码文件的用户才能使用这些特权进行连接。
username 有效的数据库用户名。数据库通过根据数据字典匹配用户名并提示输入用户密码来验证连接请求。
connect_identifier(1) 用于远程连接的 Oracle Net 连接标识符。确切的语法取决于 Oracle Net 配置。如果省略,SQL*Plus 将尝试连接到本地实例。
一个通用的连接标识符是一个网络服务名。这是 Oracle Net 连接描述符(网络地址和数据库服务名称)的别名。别名通常在 tnsnames 中解析。ora 文件在本地计算机上,但可以通过其他方式解析。
connect_identifier(2) 作为一种替代方法,连接标识符可以使用简单的连接语法。Easy connect 为远程数据库提供了开箱即用的 TCP/IP 连接,而无需在客户端(本地)计算机上配置 Oracle Net Services。
连接标识符的简单连接语法如下(必须包含封闭的双引号):
host[:port][/service_name][:server][/instance_name]
- host 是托管远程数据库的计算机的主机名或 IP 地址。
- 支持 IPv4 和 IPv6 两种 IP 地址。IPv6 地址必须用方括号括起来。
- port 是主机上 Oracle Net 监听器监听数据库连接的 TCP 端口。如果省略,则假定为 1521。
- Service_name 是要连接的数据库服务名称。如果远程主机上的 Net Services 监听器配置指定了默认服务,则可以省略此选项。如果没有配置默认服务,则必须提供 service_name。每个数据库通常提供一个标准服务,其名称等于全局数据库名称,由 DB_NAME 和 DB_DOMAIN 初始化参数组成,如下所示:DB_NAME.DB_DOMAIN
如果 DB_DOMAIN 为空,那么标准服务名称就是 DB_NAME。例如,DB_NAME 为 orcl,DB_DOMAIN 为 us.example.com,则标准服务名称为 orcl.us.example.com。
- server 是服务处理程序的类型。可接受的值是专用的、共享的和合用的。如果省略,则监听器将选择默认的服务器类型:如果配置了共享服务器,否则选择专用服务器。
- instance_name 是要连接的实例。您可以指定服务名称和实例名称,这通常只适用于 Oracle RAC 环境。对于 Oracle RAC 或单实例环境,如果只指定实例名,则连接到默认数据库服务。如果listener.ora中没有配置默认服务,则发生错误。实例名称可通过 INSTANCE_NAME 初始化参数获取。
edition={edition_name|DATABASE_DEFAULT} 指定启动新数据库会话的版本。如果您指定了一个版本,那么它必须存在,并且您必须对它具有 USE 特权。如果未指定此子句,则对会话使用数据库默认版本。