Skip to content

Oracle 服务管理命令

服务管理概述

Oracle服务管理是数据库运维的重要组成部分,包括数据库实例、监听器、ASM实例等服务的启动、停止、重启和状态检查。本文档汇总了常用的Oracle服务管理命令。

数据库实例管理

1. 启动数据库实例

命令描述适用场景
startup启动数据库实例、加载数据库并打开数据库正常启动
startup nomount仅启动数据库实例,不加载数据库数据库创建、控制文件重建
startup mount启动数据库实例并加载数据库,不打开数据库数据库恢复、备份、修改数据库结构
startup force强制启动数据库实例,先关闭再启动数据库异常终止后
startup restrict以受限模式启动数据库,仅允许具有RESTRICTED SESSION权限的用户访问数据库维护、升级
startup upgrade以升级模式启动数据库Oracle版本升级

示例

sql
-- 正常启动数据库
SQL> startup;

-- 仅启动实例
SQL> startup nomount;

-- 启动实例并加载数据库
SQL> startup mount;

-- 强制启动数据库
SQL> startup force;

-- 以受限模式启动数据库
SQL> startup restrict;

-- 以升级模式启动数据库
SQL> startup upgrade;

2. 关闭数据库实例

命令描述适用场景
shutdown normal正常关闭数据库,等待所有用户断开连接计划内关闭
shutdown immediate立即关闭数据库,终止当前事务并回滚未提交的事务紧急关闭,不等待用户断开
shutdown transactional事务性关闭,等待当前事务完成后关闭计划内关闭,确保事务完整性
shutdown abort强制终止数据库实例,不关闭数据库,可能导致数据不一致数据库无响应时的紧急关闭

示例

sql
-- 正常关闭数据库
SQL> shutdown normal;

-- 立即关闭数据库
SQL> shutdown immediate;

-- 事务性关闭数据库
SQL> shutdown transactional;

-- 强制终止数据库实例
SQL> shutdown abort;

3. 检查数据库实例状态

命令描述
select status from v$instance;检查实例状态
select name, open_mode from v$database;检查数据库名称和打开模式
select instance_name, status from gv$instance;检查RAC环境中所有实例状态
select database_role from v$database;检查数据库角色(主库/备库)

示例

sql
-- 检查实例状态
SQL> select status from v$instance;

-- 检查数据库名称和打开模式
SQL> select name, open_mode from v$database;

-- 检查RAC环境中所有实例状态
SQL> select instance_name, status from gv$instance;

-- 检查数据库角色
SQL> select database_role from v$database;

监听器管理

1. 监听器命令行工具 (lsnrctl)

命令描述
lsnrctl status查看监听器状态
lsnrctl start启动监听器
lsnrctl stop停止监听器
lsnrctl reload重新加载监听器配置文件,无需停止监听器
lsnrctl services查看监听器服务信息
lsnrctl show查看监听器参数
lsnrctl set设置监听器参数
lsnrctl save_config保存监听器配置到配置文件

示例

bash
# 查看监听器状态
$ lsnrctl status

# 启动监听器
$ lsnrctl start

# 停止监听器
$ lsnrctl stop

# 重新加载监听器配置
$ lsnrctl reload

# 查看监听器服务信息
$ lsnrctl services

# 查看监听器参数
$ lsnrctl show listener_name

# 保存监听器配置
$ lsnrctl save_config

2. 监听器配置文件

监听器配置文件通常位于 $ORACLE_HOME/network/admin/listener.ora,用于配置监听器的端口、协议、服务等参数。

示例配置

sql
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (SID_NAME = ORCL)
    )
  )

ASM服务管理

1. ASM实例管理

命令描述
srvctl status asm查看ASM实例状态
srvctl start asm启动ASM实例
srvctl stop asm停止ASM实例
srvctl restart asm重启ASM实例
sqlplus / as sysasm以ASM实例身份连接

示例

bash
# 查看ASM实例状态
$ srvctl status asm

# 启动ASM实例
$ srvctl start asm

# 停止ASM实例
$ srvctl stop asm

# 重启ASM实例
$ srvctl restart asm

# 以ASM实例身份连接
$ sqlplus / as sysasm

2. ASM磁盘组管理

命令描述
asmcmd lsdg查看ASM磁盘组状态
asmcmd lsdd查看ASM磁盘状态
asmcmd lsdsk查看ASM磁盘信息
asmcmd mkdir在ASM中创建目录
asmcmd rm删除ASM中的文件或目录
asmcmd cp复制ASM中的文件
asmcmd du查看ASM目录大小

示例

bash
# 查看ASM磁盘组状态
$ asmcmd lsdg

# 查看ASM磁盘状态
$ asmcmd lsdd

# 查看ASM磁盘信息
$ asmcmd lsdsk

# 在ASM中创建目录
$ asmcmd mkdir +DATA/ORCL/backup

# 删除ASM中的文件
$ asmcmd rm +DATA/ORCL/backup/old_backup.bkp

# 复制ASM中的文件
$ asmcmd cp +DATA/ORCL/datafile/users01.dbf +FRA/ORCL/backup/

# 查看ASM目录大小
$ asmcmd du +DATA/ORCL

RAC集群管理

1. 集群状态检查

命令描述
crsctl stat res -t查看集群资源状态
crsctl check cluster检查集群状态
crsctl check crs检查CRS状态
olsnodes查看集群节点列表
srvctl status database -d <db_name>查看RAC数据库状态
srvctl status instance -d <db_name> -i <instance_name>查看RAC实例状态

示例

bash
# 查看集群资源状态
$ crsctl stat res -t

# 检查集群状态
$ crsctl check cluster

# 检查CRS状态
$ crsctl check crs

# 查看集群节点列表
$ olsnodes

# 查看RAC数据库状态
$ srvctl status database -d ORCL

# 查看RAC实例状态
$ srvctl status instance -d ORCL -i ORCL1

2. RAC实例管理

命令描述
srvctl start database -d <db_name>启动RAC数据库所有实例
srvctl stop database -d <db_name>停止RAC数据库所有实例
srvctl restart database -d <db_name>重启RAC数据库所有实例
srvctl start instance -d <db_name> -i <instance_name>启动RAC特定实例
srvctl stop instance -d <db_name> -i <instance_name>停止RAC特定实例
srvctl restart instance -d <db_name> -i <instance_name>重启RAC特定实例

示例

bash
# 启动RAC数据库所有实例
$ srvctl start database -d ORCL

# 停止RAC数据库所有实例
$ srvctl stop database -d ORCL

# 重启RAC数据库所有实例
$ srvctl restart database -d ORCL

# 启动RAC特定实例
$ srvctl start instance -d ORCL -i ORCL1

# 停止RAC特定实例
$ srvctl stop instance -d ORCL -i ORCL1

# 重启RAC特定实例
$ srvctl restart instance -d ORCL -i ORCL1

环境变量管理

1. 设置Oracle环境变量

Linux/Unix环境

bash
# 设置Oracle主目录
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1

# 设置Oracle SID
export ORACLE_SID=ORCL

# 设置监听器名称
export LISTENER_NAME=LISTENER

# 添加Oracle命令到PATH
export PATH=$ORACLE_HOME/bin:$PATH

# 设置TNS_ADMIN
export TNS_ADMIN=$ORACLE_HOME/network/admin

Windows环境

cmd
# 设置Oracle主目录
set ORACLE_HOME=C:\app\oracle\product\19.0.0\dbhome_1

# 设置Oracle SID
set ORACLE_SID=ORCL

# 设置监听器名称
set LISTENER_NAME=LISTENER

# 添加Oracle命令到PATH
set PATH=%ORACLE_HOME%\bin;%PATH%

# 设置TNS_ADMIN
set TNS_ADMIN=%ORACLE_HOME%\network\admin

2. 查看Oracle环境变量

Linux/Unix环境

bash
# 查看所有Oracle相关环境变量
env | grep ORACLE

# 查看ORACLE_HOME
echo $ORACLE_HOME

# 查看ORACLE_SID
echo $ORACLE_SID

Windows环境

cmd
# 查看所有环境变量
set

# 查看Oracle相关环境变量
set ORACLE

# 查看ORACLE_HOME
echo %ORACLE_HOME%

# 查看ORACLE_SID
echo %ORACLE_SID%

常用工具命令

1. SQL*Plus

命令描述
sqlplus / as sysdba以DBA身份连接本地数据库
sqlplus username/password@tnsname以普通用户身份连接数据库
sqlplus username/password@host:port/servicename以普通用户身份连接数据库(EZCONNECT方式)
@script.sql执行SQL脚本
spool filename将输出保存到文件
set linesize 120设置行宽
set pagesize 100设置每页行数
desc tablename查看表结构
show user查看当前用户
show parameter parameter_name查看数据库参数

示例

bash
# 以DBA身份连接本地数据库
$ sqlplus / as sysdba

# 以普通用户身份连接数据库
$ sqlplus scott/tiger@ORCL

# 以普通用户身份连接数据库(EZCONNECT方式)
$ sqlplus scott/tiger@192.168.1.100:1521/ORCL

# 执行SQL脚本
SQL> @/u01/app/oracle/scripts/create_tables.sql

# 将输出保存到文件
SQL> spool /u01/app/oracle/output/query_result.txt
SQL> select * from user_info;
SQL> spool off

# 设置行宽和每页行数
SQL> set linesize 120
SQL> set pagesize 100

# 查看表结构
SQL> desc user_info;

# 查看当前用户
SQL> show user;

# 查看数据库参数
SQL> show parameter sga_target;

2. RMAN

命令描述
rman target /以RMAN身份连接本地数据库
rman target sys/password@source_db auxiliary sys/password@target_db以RMAN身份连接源数据库和辅助数据库
backup database plus archivelog;备份数据库和归档日志
restore database;恢复数据库
recover database;恢复数据库到最新状态
list backup;查看备份列表
report obsolete;查看过时备份
delete obsolete;删除过时备份

示例

bash
# 以RMAN身份连接本地数据库
$ rman target /

# 以RMAN身份连接源数据库和辅助数据库
$ rman target sys/password@source_db auxiliary sys/password@target_db

# 备份数据库和归档日志
RMAN> backup database plus archivelog;

# 恢复数据库
RMAN> restore database;

# 恢复数据库到最新状态
RMAN> recover database;

# 查看备份列表
RMAN> list backup;

# 查看过时备份
RMAN> report obsolete;

# 删除过时备份
RMAN> delete obsolete;

最佳实践

  1. 定期检查服务状态:定期检查数据库实例、监听器、ASM实例等服务状态,确保服务正常运行
  2. 使用srvctl管理RAC:在RAC环境中,建议使用srvctl命令管理数据库实例和服务,而不是直接使用SQL*Plus
  3. 备份配置文件:定期备份listener.ora、tnsnames.ora、init.ora等配置文件
  4. 合理设置环境变量:根据实际情况合理设置Oracle环境变量,避免冲突
  5. 使用绝对路径:在执行脚本和命令时,尽量使用绝对路径,避免路径问题
  6. 记录操作:重要的服务管理操作要记录日志,便于后续排查问题
  7. 遵循操作流程:执行服务启停等重要操作时,遵循既定的操作流程,避免误操作
  8. 测试操作:在生产环境执行操作前,先在测试环境测试,确保操作安全

结论

Oracle服务管理命令是数据库运维的基础,熟练掌握这些命令可以提高运维效率,确保数据库系统的稳定运行。在实际运维工作中,应根据具体情况选择合适的命令,并遵循最佳实践,确保操作安全可靠。