5.1 使用客户工具
可以使用许多工具连接到Oracle 数据库。其中两个最基本的工具是SQL*Plus 和SQL Developer,它们由Oracle公司提供,足以完成开发人员或数据库管理员需要完成的许多工作。选择哪个工具取决于个人喜好,部分与环境相关,部分与功能相关。毫无疑问,SQL Developer提供的功能比SQL*Plus多得多,但其要求也较高,因为它需要图形化终端,而SQL*Plus可以用于字符模式设备。
存在时间最长的工具是SQL*Plus,即使Oracle公司大力推荐SQL Developer作为替代品,仍建议在Oracle环境中工作的技术人员熟悉SQL*Plus。
5.1.1 SQL*Plus
SQL*Plus是一个客户端-服务器工具,用于连接数据库,发出即席SQL命令。它还可以用于创建PL/SQL代码,对结果进行格式化。它可以用于迁移数据库的所有目标平台。下一节将介绍在Linux和Windows上使用SQL*Plus的细节。SQL*Plus在其他平台上的用法没有显著区别。
根据体系结构,SQL*Plus 是一个用C语言编写的用户进程,它在一个实例上建立一个会话,通过Oracle Net协议建立一个数据库。客户端和服务器的平台可以不同。例如,只要Oracle Net配置为建立连接,就可以在Windows PC上使用SQL*Plus,连接运行在Unix服务器上的数据库(反之亦然)。
1.Linux上的SQL*Plus
Linux安装上的SQL*Plus可执行文件是sqlplus。该文件的位置与安装相关,但一般如下所示:
/u01/app/oracle/product/12.1.0/db_1/bin/sqlplus
Linux账户应进行相应的设置,来运行SQL*Plus,但需要设置一些环境变量,如下所示:
ORACLE_HOME PATH LD_LIBRARY_PATH
ORACLE_HOME变量指向Oracle Home。Oracle Home是Oracle软件安装,换言之,包含可执行代码的一组文件和目录,以及一些配置文件。PATH必须包含Oracle Home中的bin目录,LD_LIBRARY_PATH应包含lib目录,它也包含在Oracle Home中,但实际上可以不设置它。图5-1显示了一个Linux终端窗口和一些测试,看看环境是否正确。
图5-1 检查Linux会话的启动
在图5-1中,首先echo命令检查3个变量是否已正确设置。其中有一个ORACLE_HOME,其中的bin和lib目录分别设置为PATH的最后一个元素和LD_LIBRARY_PATH变量的第一个元素。接着,which命令确认SQL*Plus可执行文件在PATH中是可用的。最后,在命令行上,把用户名、密码和连接标识符传递给SQL*Plus,以启动它。如果测试没有返回可接受的结果,SQL*Plus启动失败,就应告知系统管理员和数据库管理员。登录本身的一些常见错误可参阅本章后面的“创建并测试数据库连接”一节。
登录字符串的格式是数据库用户名,后跟一条斜杠(作为分隔符)、一个密码、一个@符号(作为界定符),最后是Oracle Net连接标识符。在这个例子中,用户名是system,其密码是admin123,数据库用coda标识。
登录后,下一行文本显示所使用的SQL*Plus 的版本:12.1.0.0.2;建立连接的数据库的版本(它碰巧与SQL*Plus工具的版本相同),以及数据库中已安装的选项。最后一行是给用户的提示SQL>,用户可以在这里输入任何SQL*Plus或SQL命令。如果使用所分配的用户名(可能不是system)登录没有成功,就应告知数据库管理员。
2.Windows上的SQL*Plus
历史上,Microsoft Windows总是有两个版本的SQL*Plus:字符版和图形版。字符版仍旧是可执行文件sqlplus.exe,图形版是sqlplusw.exe。对于当前版本和11g,图形版不再存在,但许多开发人员仍喜欢使用它,早期版本附带的版本非常适合处理12c数据库。使用混合版本也没有问题:12c SQL*Plus客户程序可以连接10g 数据库,10g SQL*Plus客户程序可以连接12c数据库。在Windows上执行Oracle数据库或Oracle客户端的默认安装,SQL*Plus就可以显示为Windows“开始”菜单中的一个快捷方式。快捷方式启动的可执行文件的位置一般如下所示:
D:\app\oracle\product\12.1.0\dbhome_1\BIN\sqlplus.exe
但是,实际的路径与安装相关。图5-2显示了用快捷方式启动SQL*Plus登录数据库的过程。第一行文本显示了SQL*Plus的版本12.1.0.0.2,以及程序启动的时间。第三行文本是一个登录提示。
图5-2 Windows上使用SQL*Plus的数据库登录
Enter user-name:
之后是手工输入的登录字符串,如下所示:
system/admin123@coda
对于启动SQL*Plus 的快捷方式,许多人都喜欢修改它,以禁止它立即显示登录提示。为此,在命令的末尾添加nolog选项:
sqlplus /nolog
最好从操作系统的提示符下启动SQL*Plus,而不是使用“开始”菜单中的快捷选项,只需要打开一个命令窗口,运行它即可。该程序会立即提示登录,除非用上述的nolog选项调用它。
3.创建并测试数据库连接
SQL*Plus没有任何方式来存储数据库连接信息。每次用户希望连接数据库时,都必须告诉SQL*Plus 自己的身份和数据库的位置。根据与站点相关的安全特性,会有所区别,但向数据库标识自己的最常见方式是提供用户名和区分大小写的密码。标识数据库有两种常用的连接标识符形式:一种是提供一个别名,别名会解析为完整的连接信息;另一种是输入完整信息。
在操作系统的提示行上,这些命令会启动SQL*Plus,作为数据库用户SCOTT进行连接,密码是tiger,使用如下技术:
sqlplus scott/tiger@orcl sqlplus scott/tiger@ocp12c.oracle.com:1521/orcl.oracle.com
第一个示例使用别名orcl来标识数据库。它必须解析为完整的连接信息。这个名称解析的常见技术是使用本地存储的文本文件tnsnames.ora(一般包含在ORACLE_HOME的network/admin子目录中),或者联系LDAP目录,例如Microsoft的Active Directory或Oracle的Oracle Internet Directory(OID)。
第二个示例在线提供了所有连接信息。所需的连接信息是运行数据库实例的计算机的主机名、可以联系上Oracle Net数据库侦听器的TCP端口,以及用户希望数据库侦听器连接他的数据库服务。第一个技术要求用户仅输入别名,它要求数据库管理员配置一个名称解析机制,第二个技术只在用户知道连接信息的情况下有效。
许多情况下,SQL*Plus连接尝试会失败。图5-3演示了一些常见的问题。
图5-3 一些常见的登录问题
首先,用户在Windows操作系统的提示行上启动SQL*Plus,使用NOLOG选项禁止立即显示登录提示。目前没有问题。
其次,在SQL>提示行上,用户发出一个连接请求,它因一个著名的错误而失败:
ORA-12154: TNS: could not resolve the connect identifier specified
出错是因为给定的连接标识符wrongalias不能由Oracle Net的TNS层解析为数据库连接信息。所使用的名称解析方法及其配置对数据库管理员而言非常重要。在这里,错误很明显:用户输入了错误的连接标识符。
第二次连接尝试提供正确的标识符orcl,但还是失败了,如下所示:
ORA-12541: TNS:no listener
这表示,连接标识符正确解析为数据库侦听器的地址,但该侦听器实际上没有运行。注意另一个可能性是地址解析出错,把SQL*Plus 发送给错误的地址。对于这个错误,用户应联系数据库管理员,要求他启动侦听器。然后再次尝试。
第三个连接请求也失败了,如下所示:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
这个错误是数据库侦听器生成的。SQL*Plus找到了侦听器,但侦听器不能建立与数据库服务的连接。最可能的原因是数据库实例没有启动,所以用户应要求数据库管理员启动它,然后再次尝试。
第四个连接请求也失败了,如下所示:
ORA-01017: invalid username/password; logon denied
要接收这个消息,用户必须联系上数据库。用户解决了所有可能的网络问题,数据库实例在运行,数据库也由实例打开了。用户只是把密码或用户名输错了。注意消息没有指出,是密码错了,还是用户名错了,如果它这么做,就会把消息泄漏给其他人。
最后,第五个连接尝试成功了。
提示:
前面的示例演示了一个常用的问题解决技巧。如果出现失败,应一步步地解决问题,阅读每个错误消息。
5.1.2 SQL Developer
SQL Developer工具可以连接Oracle数据库(实际上还可以连接一些非Oracle数据库),发出即席SQL命令。它还可以管理PL/SQL对象。与SQL *Plus不同,这是一个带有向导的图形工具,以完成常见的动作。SQL Developer用Java编写,需要运行JRE。
由于SQL Developer用Java语言编写,因此它可以在支持JRE对应版本的所有平台上使用。平台之间没有显著的区别。
1.安装并启动SQL Developer
SQL Developer不用OUI安装,OUI用于安装其他所有的Oracle产品。它不存储在Oracle Home中,而是一个完全自包含的产品。最新版本可以从Oracle公司的网站上下载。
提示:
12c数据库的安装包含SQL Developer的副本,但它不是最新版本。即使正好有该数据库的安装,通常也需要安装SQL Developer的最新版本。
要安装SQL Developer,应解压缩ZIP文件。这就足够了。该产品需要JDK, Java Runtime Environment可用,它来自Oracle。但如果在要使用的机器上没有合适的JDK, SQL Developer for Windows的可下载版本包含它。对于非Windows的平台,JDK必须预先安装。从Oracle的网站上下载它,根据与平台相关的指令安装。为了检查正确版本的JDK是否可用,可以在操作系统的提示行上,运行如下命令:
java -version
它应返回如下信息:
java version "1.7.0_71" Java(TM) SE Runtime Environment (build 1.7.0_71-b14) Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
如果没有返回这些信息,使用which java命令可能有助于找出问题;搜索路径可以定位不正确的版本。
解压缩SQL Developer后,把当前目录改为解压缩SQL Developer的目录,并启动它。在Windows上,可执行文件是sqldeveloper.exe。在Linux上,是sqldeveloper.sh外壳脚本。记住要检查DISPLAY环境变量是否设置为合适的值(例如,如果SQL Developer在系统控制台上运行,就是127.0.0.1:0.0),之后运行外壳脚本。
出现安装JRE和启动SQL Developer的任何相关问题,都应告知系统管理员。
2.SQL Developer用户界面
图5-4显示了连接数据库后的SQL Developer用户界面。
图5-4 SQL Developer用户界面
SQL Developer窗口的一般布局是,左面板用于导航对象,右面板用于显示和输入信息。
在图中,左面板显示,与数据库建立了一个连接。该连接称为 orcl_sys。这个名称是定义连接时选择的标签,但大多数开发人员都使用某种命名约定,这里,所选的名称是数据库标识符orcl,建立连接的用户的用户名sys。下面的分支列出了可以管理的所有可能的对象类型。展开分支,会列出对象本身。右面板的上半部分提示用户输入SQL语句,下半部分显示语句的结果。SQL Developer 是一个有用的工具,因为它是高度可定制的。试验它,阅读帮助,设置用户界面,使它们以最适合自己的方式工作。
3.创建数据库连接
数据库连接可以创建并保存,以进行重用。在如图5-4所示的Connection 标签上选择+符号,就可以打开定义连接的窗口。
连接的名称可以任意。用户名和密码必须同时提供,但只保存用户名,除非选择了Save Password复选框。保存密码,意味着以后可以不输入密码,就建立连接。这很方便,但如果工作所用的计算机可能不安全,就非常危险。实际上,这是把身份验证委托给本地操作系统,如果可以登录它,就可以登录数据库。
假定使用SQL Developer连接Oracle数据库,而不是第三方数据库,就选择Oracle标签。
Role下拉框提供了作为sysdba进行连接的选项。在执行某些特别重要的操作(例如数据库启动和停止)之前,需要sysdba连接。本书中的练习不需要sysdba连接。
Connection Type单选按钮允许选择5个选项:
● Basic 它提示输入数据库服务器的机器名,数据库侦听器接受连接请求的端口,以及建立连接的实例(会话标识符SID)或服务。
● TNS 如果配置了名称解析方法,就可以(从本地文件tnsnames.ora中)选择数据库的别名,或者输入该名称,而不是Basic选项需要的完整信息。
● LDAP 指定LDAP服务器信息,可以查询存储在LDAP目录服务下的数据库服务定义及其连接信息。
● Advanced 允许输入完整的Java Database Connectivity (JDBC)连接字符串。这完全独立于Oracle,可用于连接遵循JCBD标准的任意数据库。
● Local/Bequeath 如果数据库和SQL Developer客户程序运行在同一台机器上,这个选项就允许直接连接服务器进程,绕过网络侦听器。
选择Basic要求用户知道如何连接到数据库上;选择TNS需要数据库管理员在客户机上进行一些配置,使别名能解析为完整的连接信息。