SQL*Plus是Oracle数据库提供的一个交互式命令行工具,用于访问Oracle数据库并执行SQL、PL/SQL命令和SQL*Plus特有的命令。
一、SQL*Plus基本概念
SQL*Plus是Oracle数据库的标准命令行接口,具有以下特点:
轻量级客户端工具
支持所有Oracle数据库版本
可以执行SQL、PL/SQL和SQL*Plus特有命令
支持脚本执行和批处理
提供格式化查询结果的功能
如果要使用SQL*Plus与数据库服务器进行交互,首先要登录到数据库服务器上,这时在SQL*Plus进程和数据库服务器之间将建立一条连接,它们以客户/服务器模式工作。
二、启动SQL*Plus
1. 基本启动方式
sqlplus 用户名/密码@数据库服务名2. 连接方式示例
SQL*Plus无论采用哪种方式登录,登录成功后都将出现SQL*Plus的提示符。SQL*Plus是一个基于字符界面的使用工具,在界面框中所有的命令操作都要使用手工输入执行,如果执行的命令行过长,可以输入回车键,在换行后继续输入执行命令,这时候在每行之前都将自动出现当前的行号。命令的最后需要输入分号才可以回车,这条执行命令会提交给数据库服务器执行。需要注意分号并不是SQL命令里的一份子,只是一条SQL命令执行结束的标志符罢了。例子:
xsuy>select empno,comm
2 from anf
3 where empno='20';需要退出SQL*Plus命令行模式时,需要在提示符之后输入命令quit或者exit。如果你需要在不退出SQL*Plus的情况之下断开与数据库服务器的连接模式,输入DISCONNECT命令执行。如果你需要重新连接或者在已连接的情况下以另外用户的身份连接数据库服务器,可以使用CONNECT 用户名/密码@服务名 - 连接到数据库。如果你使用的用户身份是sys用户,需要使用"as sysdba"或者"as sysoper"参数。如果使用的是远程登录数据库服务器,还需要在用户名和口令之后输入需要访问数据库服务器的网络服务器名。例子:
CONNECT用户名/口令as sysdba如果你在操作SQL*Plus命令行模式时,可以使用help或者?命令来获取帮助信息,你可以先获得帮助索引,例子:
sql>help index命令执行结果为:
@COPY PAUSE SHUTDOWN
@@DEFINE PRINT SPOOL
/DEL PROMPT SQLPLUS
ACCEPT DESCRIBE QUIT START
APPEND DISCONNECT RECOVER STARTUP
……在上述命令中都属于SQL*Plus,这些命令也只能在SQL*Plus中里执行,学习Oracle数据库的过程中,需要搞清楚哪些是SQL*Plus命令,哪些是SQL命令。可以通过help命令进一步获得每条命令的详细帮助信息。例子:
sql>HELP CONNECT
CONNECT
-------
Connects a given username to Oracle.
CONN[ECT][{logon|/}[AS{SYSOPER|SYSDBA}]]
WHERE logon has the following syntax:username[/password][@CONNECT_identifier]
In iSQL*Plus you must always include your username and password.3. 修改SQL*Plus的配置信息
在SQL*Plus中其实有两种相关的设置信息参数,一种是SQL*Plus本身自带的设置信息,这类信息主要控制SQL*Plus的输出格式;另一种是数据库服务器的设置信息,这类信息主要来自实例的参数文件。显示SQL*Plus设置信息命令show,例子:显示当前登录用户的命令为
sql>show user
USER为"SCOTT"如果你需要显示SQL*Plus的所有设置信息,你需要执行"show all"命令,例子:
sql>show all
appinfo为OFF并且已设置为"SQL*Plus"
arraysize 15
autocommit OFF
autoprint OFF
autorecovery OFFSQL*Plus有许多可以配置的参数信息,在SQL*Plus命令中可以分类为:
1. 环境设置命令
SET AUTOCOMMIT ON|OFF -- 设置自动提交
SET ECHO ON|OFF -- 控制脚本回显
SET FEEDBACK ON|OFF -- 显示返回行数
SET HEADING ON|OFF -- 显示列标题
SET LINESIZE n -- 设置行宽(1-32767)
SET PAGESIZE n -- 设置每页行数
SET SERVEROUTPUT ON|OFF [SIZE n] -- 控制PL/SQL输出
SET TIMING ON|OFF -- 显示执行时间
SET TIME ON|OFF -- 显示当前时间2. 编辑命令
-- 缓冲区操作
LIST -- 列出缓冲区内容
LIST 3 -- 列出第3行
LIST 3 5 -- 列出3-5行
DEL 3 -- 删除第3行
INPUT -- 添加新行
APPEND text -- 当前行追加文本
CLEAR BUFFER -- 清空缓冲区
-- 文件操作
SAVE report.sql -- 保存缓冲区
GET report.sql -- 加载文件到缓冲区
START report.sql -- 执行脚本
@report.sql -- 同上(简写)
EDIT report.sql -- 编辑文件
SPOOL output.txt -- 开始输出捕获
SPOOL OFF -- 停止捕获3. 文件操作命令
SAVE filename[.ext] [REPLACE|APPEND] -- 保存缓冲区到文件
GET filename[.ext] [LIST|NOLIST] -- 加载文件到缓冲区
START filename[.ext] [arg1 arg2 ...] -- 执行脚本文件
@filename[.ext] [arg1 arg2 ...] -- 同上(简写)
EDIT [filename[.ext]] -- 调用外部编辑器
SPOOL filename[.ext] [APPEND|OFF|OUT] -- 输出重定向4. 格式化命令
-- 列格式化
COLUMN empno FORMAT 99999 HEADING 'ID'
COLUMN ename FORMAT A20 HEADING 'Employee|Name'
COLUMN sal FORMAT $99,999.99 HEADING 'Salary'
-- 分组设置
BREAK ON deptno SKIP 1 ON REPORT
COMPUTE SUM OF sal ON deptno
COMPUTE SUM OF sal ON REPORT
-- 标题设置
TTITLE CENTER '部门工资报表' SKIP 2
BTITLE CENTER '页: ' FORMAT 999 SQL.PNO5.变量高级用法
替代变量
-- 临时变量
SELECT &column_name FROM &table_name WHERE &condition;
-- 永久变量
DEFINE dept_no = 20
SELECT * FROM emp WHERE deptno = &dept_no;
-- 参数化脚本
ACCEPT min_sal NUMBER PROMPT '输入最低工资: '
SELECT * FROM emp WHERE sal > &min_sal;绑定变量
-- 定义绑定变量
VARIABLE g_dname VARCHAR2(20)
-- PL/SQL中使用绑定变量
BEGIN
SELECT dname INTO :g_dname
FROM dept
WHERE deptno = 10;
END;
/
-- 打印绑定变量
PRINT g_dname
-- SQL中使用绑定变量
SELECT * FROM emp
WHERE deptno = (SELECT deptno FROM dept WHERE dname = :g_dname);4.实例的启动与关闭
Oracle数据库实例是Oracle数据库系统的核心运行环境,是用户与数据库交互的桥梁。下面我将从多个维度全面介绍Oracle数据库实例的概念、组成和管理。
1. 实例与数据库的区别
实例是一组内存结构和后台进程的集合,内存结构(SGA)

关键组件说明:
共享池:存储SQL解析树和执行计划
缓冲区缓存:缓存数据块,减少物理I/O
重做日志缓冲区:临时存储重做记录
大池:为RMAN、共享服务器等提供内存
Java池:支持Java程序运行
流池:支持Oracle Streams功能
后台进程:
实例生命周期管理:
启动阶段Oracle服务器的命令为startup,这条命令只有SYS用户才可以执行。执行startup命令时,显示的信息为:
sql>startup
ORACLE例程已经启动。
Total System Global Area 409194496 bytes
Fixed Size 2176248 bytes
Variable Size 301992712 bytes
Database Buffers 96468992 bytes
Redo Buffers 8556544 bytes
数据库装载完毕。
数据库已经打开。-- 分阶段启动实例
STARTUP NOMOUNT; -- 启动实例(不挂载数据库)
ALTER DATABASE MOUNT; -- 挂载数据库
ALTER DATABASE OPEN; -- 打开数据库
-- 常用启动选项
STARTUP FORCE; -- 强制启动(异常关闭后)
STARTUP RESTRICT; -- 受限模式启动
STARTUP PFILE='/path/init.ora'; -- 指定参数文件关闭选项
SHUTDOWN NORMAL; -- 等待所有会话断开(优雅关闭)
SHUTDOWN IMMEDIATE; -- 中断当前事务(推荐方式)
SHUTDOWN TRANSACTIONAL; -- 等待事务完成
SHUTDOWN ABORT; -- 立即终止(类似kill -9)状态转换

Oracle实例的高效管理是数据库稳定运行的基础,理解实例的组成和工作原理对于解决数据库性能问题至关重要。