外观
Oracle 常用命令参考
SQL*Plus 命令
连接命令
功能说明:用于连接到 Oracle 数据库实例,是最常用的数据库访问方式。
常用连接方式:
sql
# 本地连接(使用操作系统认证)
sqlplus / as sysdba
# 远程连接(使用用户名密码认证)
sqlplus username/password@hostname:port/service_name
# 加密连接(使用 TCPS 协议)
sqlplus username/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=hostname)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=service_name)))使用场景:
- 本地连接:适用于数据库服务器本地管理操作
- 远程连接:适用于从客户端连接到数据库服务器
- 加密连接:适用于对安全性要求较高的环境
会话管理
功能说明:管理当前 SQL*Plus 会话的设置和信息。
常用命令:
sql
# 显示当前用户
show user
# 设置会话参数
alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
alter session set nls_language = 'SIMPLIFIED CHINESE';
# 查看会话信息
select * from v$session where sid = (select sid from v$mystat where rownum = 1);参数说明:
- nls_date_format:设置日期显示格式
- nls_language:设置会话语言
数据库状态
功能说明:查看数据库实例和数据库的当前状态。
常用命令:
sql
# 查看数据库实例状态
select status from v$instance;
# 查看数据库打开模式
select open_mode from v$database;
# 查看所有实例状态(RAC 环境)
select instance_name, status from gv$instance;状态说明:
- INSTANCE 状态:STARTED, MOUNTED, OPEN, SHUTDOWN
- DATABASE 打开模式:READ WRITE, READ ONLY, MOUNTED
性能监控
功能说明:监控数据库性能指标,识别性能瓶颈。
常用命令:
sql
# 查看等待事件
select event, count(*) from v$session_wait group by event order by count(*) desc;
# 查看会话消耗资源
select sid, serial#, username, osuser, machine, program, cpu_time, logical_reads from v$session order by cpu_time desc;
# 查看SQL执行情况
select sql_id, sql_text, elapsed_time, executions from v$sql order by elapsed_time desc;监控重点:
- 等待事件:识别系统瓶颈类型
- 会话资源:发现消耗资源过多的会话
- SQL执行:找出执行时间长的SQL语句
RMAN 命令
连接命令
功能说明:连接到 RMAN(Recovery Manager)进行备份恢复操作。
常用连接方式:
bash
# 连接到目标数据库
rman target /
# 连接到目标数据库和恢复目录
rman target / catalog rman/rman@rcat
# 连接到辅助数据库(Data Guard 环境)
rman target / auxiliary sys/password@standby连接说明:
- target /:使用操作系统认证连接到本地数据库
- catalog:使用恢复目录存储备份元数据
- auxiliary:连接到备用数据库
备份命令
功能说明:使用 RMAN 执行各种类型的数据库备份。
常用备份命令:
bash
# 全库备份(包含归档日志)
backup database plus archivelog delete input;
# 表空间备份
backup tablespace users, sysaux;
# 数据文件备份
backup datafile 1, 2, 3;
# 控制文件备份
backup current controlfile;
# SPFILE备份
backup spfile;备份选项说明:
- plus archivelog:备份数据库的同时备份归档日志
- delete input:备份完成后删除输入的归档日志
恢复命令
功能说明:使用 RMAN 执行数据库恢复操作。
常用恢复命令:
bash
# 全库恢复
restore database;
recover database;
# 表空间恢复
restore tablespace users;
recover tablespace users;
# 数据文件恢复
restore datafile 5;
recover datafile 5;
# 控制文件恢复
restore controlfile from autobackup;恢复流程:
- restore:从备份中还原数据文件
- recover:应用归档日志和重做日志进行恢复
RMAN 维护
功能说明:维护 RMAN 备份信息和配置。
常用维护命令:
bash
# 列出所有备份集
list backup;
# 列出过期备份
list expired backup;
# 删除过期备份
delete expired backup;
# 交叉检查备份(验证备份是否存在)
crosscheck backup;
# 显示RMAN配置
show all;维护说明:
- 过期备份:RMAN 元数据中存在但实际备份文件已不存在的备份
- 交叉检查:验证备份文件的存在性,更新 RMAN 元数据
监听器命令
基本命令
功能说明:管理 Oracle 监听器,控制数据库连接的接收和处理。
常用命令:
bash
# 启动监听器
lsnrctl start
# 停止监听器
lsnrctl stop
# 重启监听器(重新加载配置)
lsnrctl reload
# 查看监听器状态
lsnrctl status
# 查看监听器服务(已注册的数据库服务)
lsnrctl services命令说明:
- start:启动监听器进程
- stop:停止监听器进程
- reload:重新加载监听器配置文件,无需停止监听器
- status:显示监听器当前状态和已注册的服务
- services:显示详细的服务注册信息
高级命令
功能说明:配置和管理监听器的高级参数。
常用高级命令:
bash
# 设置监听器日志状态
lsnrctl set log_status on
# 设置跟踪级别
lsnrctl set trc_level admin
# 设置当前监听器
lsnrctl set current_listener LISTENER
# 查看监听器版本
lsnrctl version
# 保存监听器配置到文件
lsnrctl save_config参数说明:
- log_status:控制监听器日志的开启和关闭
- trc_level:设置跟踪级别(off, user, admin, support)
- current_listener:指定要操作的监听器名称
- save_config:将当前配置保存到 listener.ora 文件
数据库管理命令
实例管理
功能说明:管理 Oracle 数据库实例的启动和关闭。
常用命令:
sql
# 启动数据库(完整启动)
startup
# 启动到挂载状态(不打开数据库)
startup mount
# 启动到只读模式
startup mount
alter database open read only;
# 正常关闭数据库
shutdown immediate
# 强制关闭数据库(紧急情况)
shutdown abort启动模式说明:
- startup:正常启动,经历 nomount → mount → open 三个阶段
- startup mount:仅启动到挂载状态,可用于执行某些维护操作
- startup nomount:仅启动实例,不挂载数据库
关闭模式说明:
- shutdown immediate:立即关闭,回滚未提交事务
- shutdown abort:强制终止实例,不回滚事务,下次启动需要恢复
- shutdown normal:等待所有用户断开连接后关闭
- shutdown transactional:等待当前事务完成后关闭
表空间管理
功能说明:创建、修改和管理数据库表空间。
常用命令:
sql
# 创建表空间
create tablespace users datafile '/u01/app/oracle/oradata/ORCL/users01.dbf' size 100m autoextend on next 10m maxsize unlimited;
# 扩展表空间(添加数据文件)
alter tablespace users add datafile '/u01/app/oracle/oradata/ORCL/users02.dbf' size 100m;
# 调整数据文件大小
alter database datafile '/u01/app/oracle/oradata/ORCL/users01.dbf' resize 200m;
# 查看表空间使用情况
select tablespace_name, sum(bytes)/1024/1024 as mb, sum(maxbytes)/1024/1024 as max_mb from dba_data_files group by tablespace_name;参数说明:
- datafile:指定数据文件路径
- size:数据文件初始大小
- autoextend:是否自动扩展
- next:自动扩展的增量大小
- maxsize:最大文件大小
用户管理
功能说明:创建、修改和管理数据库用户。
常用命令:
sql
# 创建用户
create user test identified by password default tablespace users temporary tablespace temp;
# 授予权限
grant connect, resource to test;
grant create table, create view to test;
# 修改用户密码
alter user test identified by new_password;
# 锁定/解锁用户
alter user test account lock;
alter user test account unlock;
# 删除用户(级联删除用户对象)
drop user test cascade;参数说明:
- identified by:设置用户密码
- default tablespace:设置默认表空间
- temporary tablespace:设置临时表空间
- cascade:级联删除用户的所有对象
性能监控命令
AWR 报告
sql
-- 生成AWR报告
@?/rdbms/admin/awrrpt.sql
-- 生成AWR比较报告
@?/rdbms/admin/awrddrpt.sql
-- 生成ASH报告
@?/rdbms/admin/ashrpt.sql系统监控
bash
# 查看Oracle进程
ps -ef | grep oracle
# 查看Oracle会话
ps -ef | grep LOCAL=NO
# 查看网络连接
netstat -tuln | grep 1521
# 查看磁盘I/O
iostat -x 2
# 查看内存使用
free -m
# 查看CPU使用
top数据库监控视图
sql
# 查看表空间使用情况
select * from dba_tablespace_usage_metrics;
# 查看数据文件状态
select file_name, status, bytes/1024/1024 as mb from dba_data_files;
# 查看重做日志状态
select group#, status, bytes/1024/1024 as mb from v$log;
# 查看控制文件
select name from v$controlfile;
# 查看参数文件
show parameter spfile;安全管理命令
权限管理
sql
# 创建角色
create role db_monitor;
# 授予角色权限
grant select on v_$session to db_monitor;
grant select on v_$sysstat to db_monitor;
# 授予用户角色
grant db_monitor to test;
# 查看用户权限
select * from dba_sys_privs where grantee = 'TEST';
# 查看用户角色
select * from dba_role_privs where grantee = 'TEST';审计管理
sql
# 启用审计
alter system set audit_trail = db, extended scope = spfile;
# 审计用户登录/登出
audit session;
# 审计权限使用
audit create table, drop table by access;
# 查看审计记录
select * from dba_audit_session order by timestamp desc;备份恢复命令
冷备份
bash
# 关闭数据库
shutdown immediate
# 复制数据文件、控制文件和重做日志文件
cp /u01/app/oracle/oradata/ORCL/*.dbf /backup/
cp /u01/app/oracle/oradata/ORCL/*.ctl /backup/
cp /u01/app/oracle/oradata/ORCL/*.log /backup/
# 启动数据库
startup热备份
sql
-- 开始表空间热备份
alter tablespace users begin backup;
-- 复制数据文件
!cp /u01/app/oracle/oradata/ORCL/users01.dbf /backup/
-- 结束表空间热备份
alter tablespace users end backup;
-- 备份归档日志
alter system switch logfile;
alter system archive log current;
!cp /u01/app/oracle/arch/ORCL/* /backup/arch/数据泵命令
bash
# 导出全库
expdp system/password full=y directory=DATA_PUMP_DIR dumpfile=full.dmp logfile=exp_full.log
# 导出模式
expdp system/password schemas=hr,scott directory=DATA_PUMP_DIR dumpfile=schemas.dmp logfile=exp_schemas.log
# 导出表
expdp system/password tables=hr.employees,hr.departments directory=DATA_PUMP_DIR dumpfile=tables.dmp logfile=exp_tables.log
# 导入数据
impdp system/password directory=DATA_PUMP_DIR dumpfile=full.dmp logfile=imp_full.log full=y版本差异
Oracle 11g 命令
sql
-- Oracle 11g 特定命令
-- 查看自动内存管理配置
show parameter memory_target;
-- 启用自动内存管理
alter system set memory_target = 4G scope = spfile;Oracle 12c 命令
sql
-- Oracle 12c 特定命令
-- 查看可插拔数据库
show pdbs;
-- 切换到可插拔数据库
alter session set container = pdb1;
-- 创建可插拔数据库
create pluggable database pdb2 admin user pdb_admin identified by password file_name = '/u01/app/oracle/oradata/ORCL/pdb2/pdb2.xml';Oracle 19c 命令
sql
-- Oracle 19c 特定命令
-- 查看数据库版本详细信息
select * from v$version;
-- 启用增强的自动诊断
alter system set diagnostic_dest = '/u01/app/oracle' scope = spfile;
-- 使用新的SQL语句
select /*+ APPEND */ * from employees;常见问题(FAQ)
Q1: 如何快速查看数据库当前状态?
A1: 使用以下命令:
sql
-- 查看实例状态
select status, instance_name from v$instance;
-- 查看数据库打开模式
select open_mode from v$database;
-- 查看表空间使用情况
select tablespace_name, sum(bytes)/1024/1024 as mb, sum(maxbytes)/1024/1024 as max_mb from dba_data_files group by tablespace_name;
-- 查看会话数
select count(*) from v$session;Q2: 如何查找消耗资源最多的SQL语句?
A2: 使用以下SQL:
sql
-- 按执行时间排序
select sql_id, sql_text, elapsed_time/1000000 as elapsed_seconds, executions, elapsed_time/1000000/executions as avg_elapsed_seconds from v$sql where executions > 0 order by elapsed_time desc;
-- 按CPU时间排序
select sql_id, sql_text, cpu_time/1000000 as cpu_seconds, executions from v$sql order by cpu_time desc;
-- 按逻辑读排序
select sql_id, sql_text, buffer_gets, executions, buffer_gets/executions as avg_buffer_gets from v$sql order by buffer_gets desc;Q3: 如何备份和恢复控制文件?
A3: 备份控制文件:
sql
-- 使用SQL命令备份
alter database backup controlfile to '/backup/controlfile.bak';
-- 备份到 trace 文件
alter database backup controlfile to trace;
-- 使用RMAN备份
rman target /
backup current controlfile;恢复控制文件:
sql
-- 从备份恢复
startup nomount
restore controlfile from '/backup/controlfile.bak';
alter database mount;
recover database;
alter database open resetlogs;Q4: 如何查看和修改数据库参数?
A4: 查看参数:
sql
-- 查看所有参数
show parameters;
-- 查看特定参数
show parameter sga;
-- 查看参数文件中的参数
select name, value, description from v$parameter where name like '%sga%';修改参数:
sql
-- 动态参数(立即生效)
alter system set sga_target = 4G scope = both;
-- 静态参数(需要重启)
alter system set processes = 300 scope = spfile;Q5: 如何监控数据库空间使用情况?
A5: 使用以下SQL:
sql
-- 表空间使用情况
select tablespace_name,
round(sum(bytes)/1024/1024, 2) as total_mb,
round(sum(bytes - free_bytes)/1024/1024, 2) as used_mb,
round(sum(free_bytes)/1024/1024, 2) as free_mb,
round((sum(bytes - free_bytes)/sum(bytes))*100, 2) as used_percent
from (select tablespace_name, bytes,
case when maxbytes > bytes then maxbytes - bytes else 0 end as free_bytes
from dba_data_files)
group by tablespace_name
order by used_percent desc;
-- 数据文件使用情况
select file_name, tablespace_name, bytes/1024/1024 as mb, autoextensible, maxbytes/1024/1024 as max_mb from dba_data_files order by tablespace_name;Q6: 如何管理归档日志?
A6: 管理归档日志:
sql
-- 查看归档日志模式
select log_mode from v$database;
-- 启用归档日志模式
shutdown immediate
startup mount
alter database archivelog;
alter database open;
-- 查看归档日志位置
show parameter log_archive_dest;
-- 清理归档日志
-- 使用RMAN删除
rman target /
delete archivelog all completed before 'sysdate-7';
-- 使用操作系统命令删除
rm /u01/app/oracle/arch/ORCL/*.arcQ7: 如何处理数据库连接问题?
A7: 排查步骤:
bash
# 检查监听器状态
lsnrctl status
# 检查网络连接
telnet hostname 1521
# 检查tnsnames.ora配置
cat $ORACLE_HOME/network/admin/tnsnames.ora
# 测试连接
sqlplus username/password@tns_alias
# 查看连接数
select count(*) from v$session;
# 查看连接限制
show parameter processes;Q8: 如何生成数据库性能报告?
A8: 生成AWR报告:
sql
-- 执行AWR报告脚本
@?/rdbms/admin/awrrpt.sql
-- 输入报告类型(html或txt)
-- 输入开始快照ID
-- 输入结束快照ID
-- 输入报告文件名生成ASH报告:
sql
-- 执行ASH报告脚本
@?/rdbms/admin/ashrpt.sql
-- 输入报告类型
-- 输入开始时间
-- 输入结束时间
-- 输入报告文件名Q9: 如何迁移数据库用户和数据?
A9: 使用数据泵迁移:
bash
# 导出用户
expdp system/password schemas=hr directory=DATA_PUMP_DIR dumpfile=hr.dmp logfile=exp_hr.log
# 导入用户
impdp system/password schemas=hr directory=DATA_PUMP_DIR dumpfile=hr.dmp logfile=imp_hr.log
# 导出表
expdp system/password tables=hr.employees,hr.departments directory=DATA_PUMP_DIR dumpfile=hr_tables.dmp logfile=exp_hr_tables.log
# 导入表
impdp system/password tables=hr.employees,hr.departments directory=DATA_PUMP_DIR dumpfile=hr_tables.dmp logfile=imp_hr_tables.logQ10: 如何确保数据库安全?
A10: 安全措施:
sql
-- 启用密码复杂度验证
alter profile default limit password_verify_function verify_function_11g;
-- 启用密码过期
alter profile default limit password_life_time 90;
-- 启用账户锁定
alter profile default limit failed_login_attempts 5 password_lock_time 1;
-- 限制特权用户登录
alter system set remote_login_passwordfile = exclusive scope = spfile;
-- 启用网络加密
alter system set sqlnet.encryption_server = required scope = spfile;
alter system set sqlnet.encryption_types_server = '(AES256, AES192, AES128)' scope = spfile;
-- 定期审计
audit session;
audit all privileges;