Oracle数据库作为企业级关系型数据库管理系统,其强大的功能和稳定性离不开丰富的命令支持,掌握Oracle常见命令是数据库管理员和开发人员必备的技能,这些命令涵盖了数据库的连接、数据操作、用户管理、权限控制、性能监控等多个方面,以下将详细介绍Oracle常用命令及其应用场景。

数据库连接与退出命令
在操作Oracle数据库之前,首先需要建立与数据库的连接,最常用的工具是SQLPlus,连接命令的基本格式为:sqlplus 用户名/密码@数据库服务名
,以管理员身份连接到本地数据库,可使用sqlplus / as sysdba
,该命令无需用户名和密码,直接以操作系统认证的特权用户身份登录,若要连接到远程数据库,需确保网络配置正确,服务名(或数据库名)在tnsnames.ora文件中已定义,退出当前会话则使用exit
或quit
命令,两者功能相同,都会关闭当前SQLPlus会话并返回操作系统提示符。
数据操作语言(DML)命令
DML命令用于操作数据库中的数据,主要包括查询、插入、更新和删除。
- 查询数据(SELECT):
SELECT
命令是Oracle中最常用的命令,用于从表中检索数据,基本语法为SELECT 列名 FROM 表名 WHERE 条件 ORDER BY 排序列名
。SELECT * FROM employees WHERE department_id = 10 ORDER BY hire_date DESC
表示查询10号部门所有员工信息,并按入职日期降序排列,使用可查询表中所有列,DISTINCT
关键字可去除重复行。 - 插入数据(INSERT):
INSERT
命令用于向表中添加新数据,语法为INSERT INTO 表名 (列名1, 列名2) VALUES (值1, 值2)
,若要插入所有列的值,可省略列名列表,但值的顺序必须与表中列的顺序一致。INSERT INTO employees (employee_id, first_name, last_name, email) VALUES (1001, 'John', 'Doe', 'john.doe@example.com')
,还可使用INSERT INTO ... SELECT ...
将查询结果插入到另一张表中。 - 更新数据(UPDATE):
UPDATE
命令用于修改表中现有数据,语法为UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2 WHERE 条件
。注意:WHERE
子句至关重要,若省略,则会更新表中的所有行,可能导致数据丢失。UPDATE employees SET salary = salary * 1.1 WHERE employee_id = 1001
表示将员工ID为1001的薪资提高10%。 - 删除数据(DELETE):
DELETE
命令用于从表中删除数据,语法为DELETE FROM 表名 WHERE 条件
,同样,WHERE
子句不可省略,否则会清空整个表。DELETE FROM employees WHERE employee_id = 1001
表示删除员工ID为1001的记录,若需删除表中所有数据,可使用TRUNCATE TABLE 表名
,该命令比DELETE
更快,且不记录undo日志,但无法回滚。
数据定义语言(DDL)命令
DDL命令用于定义或修改数据库对象的结构,如表、索引、视图等。
- 创建表(CREATE TABLE):
CREATE TABLE
命令用于创建新表,语法为CREATE TABLE 表名 (列名1 数据类型1 [约束], 列名2 数据类型2 [约束])
。CREATE TABLE departments (department_id NUMBER(4) PRIMARY KEY, department_name VARCHAR2(50) NOT NULL, location_id NUMBER(4))
,常见约束包括PRIMARY KEY
(主键)、FOREIGN KEY
(外键)、NOT NULL
(非空)、UNIQUE
(唯一)、CHECK
(检查)等。 - 修改表结构(ALTER TABLE):
ALTER TABLE
命令用于修改已存在的表结构,如添加列、修改列数据类型、删除列等。ALTER TABLE employees ADD (phone_number VARCHAR2(20))
添加新列,ALTER TABLE employees MODIFY (salary NUMBER(10,2))
修改薪资列的数据类型。 - 删除表(DROP TABLE):
DROP TABLE
命令用于删除表及其所有数据、索引和约束,语法为DROP TABLE 表名 [CASCADE CONSTRAINTS]
。CASCADE CONSTRAINTS
选项用于删除与该表相关的外键约束,删除表后,数据无法恢复,需谨慎操作。 - 创建索引(CREATE INDEX):索引可提高查询速度,语法为
CREATE INDEX 索引名 ON 表名 (列名)
。CREATE INDEX idx_employees_lastname ON employees (last_name)
,但索引会降低DML操作速度,并占用存储空间,需根据实际需求创建。
用户与权限管理命令
Oracle是多用户数据库,用户和权限管理至关重要。

- 创建用户(CREATE USER):
CREATE USER 用户名 IDENTIFIED BY 密码
命令用于创建新用户。CREATE USER john IDENTIFIED BY password123
,新用户创建后无任何权限,需手动授权。 - 授予权限(GRANT):
GRANT
命令用于授予用户权限,权限包括系统权限(如CREATE SESSION
、CREATE TABLE
)和对象权限(如SELECT ON 表名
、UPDATE ON 表名
)。GRANT CREATE SESSION TO john
授予用户john连接数据库的权限,GRANT SELECT ON employees TO john
授予查询employees表的权限。 - 撤销权限(REVOKE):
REVOKE
命令用于撤销已授予的权限。REVOKE CREATE SESSION FROM john
撤销john的会话权限。 - 修改用户密码(ALTER USER):
ALTER USER 用户名 IDENTIFIED BY 新密码
命令用于修改用户密码。ALTER USER john IDENTIFIED BY newpassword
。
数据库控制命令
控制命令用于管理数据库实例的运行状态。
- 启动数据库(STARTUP):以sysdba身份登录后,使用
STARTUP
命令启动数据库实例,可附加选项,如STARTUP NOMOUNT
(仅启动实例,不加载数据文件)、STARTUP MOUNT
(启动实例并加载数据文件,但不打开数据库)。 - 关闭数据库(SHUTDOWN):
SHUTDOWN
命令用于关闭数据库,常用选项包括SHUTDOWN NORMAL
(等待所有用户断开连接后关闭)、SHUTDOWN TRANSACTIONAL
(等待事务提交后关闭)、SHUTDOWN IMMEDIATE
(立即关闭,未提交的事务回滚)、SHUTDOWN ABORT
(立即终止实例,恢复时需要实例恢复)。 - 切换数据库状态(ALTER DATABASE):
ALTER DATABASE OPEN
打开数据库,ALTER DATABASE MOUNT
加载数据文件。
常用函数与伪列
Oracle提供了丰富的函数和伪列,方便数据处理。
- 聚合函数:如
COUNT
(计数)、SUM
(求和)、AVG
(平均值)、MAX
(最大值)、MIN
(最小值)。SELECT AVG(salary) FROM employees
计算平均薪资。 - 字符串函数:如
CONCAT
(连接字符串)、SUBSTR
(截取子串)、LENGTH
(字符串长度)、UPPER
/LOWER
(大小写转换)。 - 日期函数:如
SYSDATE
(当前系统日期)、ADD_MONTHS
(增加月份)、MONTHS_BETWEEN
(月份差)。 - 伪列:如
ROWNUM
(行号,从1开始)、ROWID
(物理行地址,唯一标识一行数据)。
性能监控相关命令
- 查看当前会话信息:
SELECT * FROM v$session WHERE sid = (SELECT sid FROM v$mystat WHERE rownum = 1)
查看当前会话信息。 - 查看等待事件:
SELECT * FROM v$session_wait WHERE sid = (SELECT sid FROM v$mystat WHERE rownum = 1)
查看当前会话等待事件。 - 执行计划分析:使用
EXPLAIN PLAN FOR
命令生成执行计划,例如EXPLAIN PLAN FOR SELECT * FROM employees WHERE employee_id = 1001
,然后查询SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY)
查看执行计划。
数据导出与导入命令
Oracle提供了数据泵(Data Pump)工具进行高效的数据导出和导入。
- 导出数据(expdp):命令格式为
expdp 用户名/密码@数据库服务名 DIRECTORY=目录名 DUMPFILE=文件名.dmp TABLES=表名
。expdp system/password@orcl DIRECTORY=dpump_dir DUMPFILE=employees.dmp TABLES=employees
。 - 导入数据(impdp):命令格式为
impdp 用户名/密码@数据库服务名 DIRECTORY=目录名 DUMPFILE=文件名.dmp TABLES=表名
。impdp system/password@orcl DIRECTORY=dpump_dir DUMPFILE=employees.dmp TABLES=employees
。
常用命令速查表
命令类别 | 命令 | 功能描述 |
---|---|---|
连接与退出 | sqlplus / as sysdba | 以管理员身份连接本地数据库 |
exit/quit | 退出SQL*Plus会话 | |
数据查询 | SELECT * FROM 表名 | 查询表中所有数据 |
SELECT 列名 FROM 表名 | 查询指定列数据 | |
数据插入 | INSERT INTO ... VALUES | 向表中插入单条数据 |
INSERT INTO ... SELECT | 通过查询结果插入数据 | |
数据更新 | UPDATE 表名 SET ... WHERE | 更新表中符合条件的记录 |
数据删除 | DELETE FROM 表名 WHERE | 删除表中符合条件的记录 |
TRUNCATE TABLE 表名 | 清空表数据(不可回滚) | |
创建表 | CREATE TABLE 表名 (...) | 创建新表 |
修改表结构 | ALTER TABLE 表名 ADD/ MODIFY/DROP | 添加/修改/删除列 |
删除表 | DROP TABLE 表名 | 删除表及其所有数据 |
创建用户 | CREATE USER 用户名 IDENTIFIED BY 密码 | 创建新用户 |
授权 | GRANT 权限 TO 用户名 | 授予用户权限 |
撤销权限 | REVOKE 权限 FROM 用户名 | 撤销用户权限 |
启动数据库 | STARTUP | 启动数据库实例 |
关闭数据库 | SHUTDOWN IMMEDIATE | 立即关闭数据库 |
数据导出 | expdp ... | 使用数据泵导出数据 |
数据导入 | impdp ... | 使用数据泵导入数据 |
相关问答FAQs
Q1: 如何查看Oracle数据库的版本信息?
A1: 可以使用以下命令查看Oracle数据库版本:

- 在SQLPlus中执行:`SELECT FROM v$version;`
- 或在操作系统命令行中执行:
sqlplus -v
(仅显示SQLPlus版本)或`sqlplus / as sysdba "SELECT FROM v$version;"`(显示数据库完整版本信息)。
Q2: Oracle中如何查询当前用户的权限?
A2: 可以通过查询数据字典视图session_privs
获取当前用户的所有系统权限,SELECT * FROM session_privs;
,若要查看用户拥有的对象权限,可查询tab_privs
视图,SELECT table_name, privilege FROM tab_privs WHERE grantee = USER;
,其中USER
是当前用户的用户名。