外观
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_config2. 监听器配置文件
监听器配置文件通常位于 $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 sysasm2. 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/ORCLRAC集群管理
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 ORCL12. 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/adminWindows环境:
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\admin2. 查看Oracle环境变量
Linux/Unix环境:
bash
# 查看所有Oracle相关环境变量
env | grep ORACLE
# 查看ORACLE_HOME
echo $ORACLE_HOME
# 查看ORACLE_SID
echo $ORACLE_SIDWindows环境:
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;最佳实践
- 定期检查服务状态:定期检查数据库实例、监听器、ASM实例等服务状态,确保服务正常运行
- 使用srvctl管理RAC:在RAC环境中,建议使用srvctl命令管理数据库实例和服务,而不是直接使用SQL*Plus
- 备份配置文件:定期备份listener.ora、tnsnames.ora、init.ora等配置文件
- 合理设置环境变量:根据实际情况合理设置Oracle环境变量,避免冲突
- 使用绝对路径:在执行脚本和命令时,尽量使用绝对路径,避免路径问题
- 记录操作:重要的服务管理操作要记录日志,便于后续排查问题
- 遵循操作流程:执行服务启停等重要操作时,遵循既定的操作流程,避免误操作
- 测试操作:在生产环境执行操作前,先在测试环境测试,确保操作安全
结论
Oracle服务管理命令是数据库运维的基础,熟练掌握这些命令可以提高运维效率,确保数据库系统的稳定运行。在实际运维工作中,应根据具体情况选择合适的命令,并遵循最佳实践,确保操作安全可靠。
