运维管理21 分钟阅读
崖山 运维命令 100 条
做 YashanDB 运维,真正考验 DBA 的并不是会不会创建用户和表空间,而是在生产环境出现实例启动失败、连接数暴增、SQL 卡顿、锁等待、表空间告警、归档堆积、主备异常、备份失败或者集群节点故障时,能不能快速找到正确的排查入口。
2026年7月25日阅读—点赞—收藏—
dba100墨力计划yashandb
在知识库中专注阅读,并随时返回相关工具与课程
做 YashanDB 运维,真正考验 DBA 的并不是会不会创建用户和表空间,而是在生产环境出现实例启动失败、连接数暴增、SQL 卡顿、锁等待、表空间告警、归档堆积、主备异常、备份失败或者集群节点故障时,能不能快速找到正确的排查入口。
做 YashanDB 运维,真正考验 DBA 的并不是会不会创建用户和表空间,而是在生产环境出现实例启动失败、连接数暴增、SQL 卡顿、锁等待、表空间告警、归档堆积、主备异常、备份失败或者集群节点故障时,能不能快速找到正确的排查入口。
YashanDB 的 SQL 语法和动态性能视图与 Oracle 有一定相似之处,但它并不是简单的 Oracle 替代品。日常连接使用 yasql,集群部署和启停经常使用 yasboot,备份恢复可以使用 SQL 命令或 yasrman,CSV 数据快速导入则使用 yasldr。在分布式部署中,还需要结合 DV$、GV$ 等视图查看跨节点状态。
下面整理 100 条 YashanDB DBA 日常使用频率较高的命令,覆盖实例管理、参数配置、表空间、用户权限、会话连接、锁与事务、SQL 性能、UNDO、临时空间、归档、备份恢复、主备复制和集群运维等常见场景。
本文主要以 YashanDB 23.3 为基准。不同产品版本、部署形态和授权版本下,部分工具参数、视图字段和功能支持范围可能存在差异。文中的用户名、IP、端口、目录、SID、SQL_ID 和表空间名称均为示例,涉及终止会话、删除数据、切换主备和恢复覆盖的操作,必须先确认影响范围。
1yasql app_user@192.168.10.10:1688执行后根据提示输入密码,可以避免密码明文出现在 Shell 历史记录和进程列表中。
1yasql / as sysdba操作系统认证只能登录本地 YASDB_DATA 环境变量所对应的数据库实例。
1yasql /nolog进入后再连接数据库:
1CONNECT app_user@192.168.10.10:1688;1SELECT *2FROM V$VERSION;也可以在操作系统上执行:
1yasql -V1SELECT database_id,2 database_name,3 log_mode,4 open_mode,5 database_role,6 protection_mode,7 status,8 current_scn9FROM V$DATABASE;该查询可以同时确认数据库名称、归档模式、打开状态、主备角色和当前 SCN。
1SELECT *2FROM V$INSTANCE;首次排查时建议先查看完整字段,再根据当前版本选取实例名称、状态、启动时间和主机信息等字段。
1STARTUP;默认将数据库启动并打开到正常读写状态。
1STARTUP NOMOUNT;NOMOUNT 状态主要用于恢复、重新创建控制文件以及部分数据库维护场景。
1STARTUP MOUNT;MOUNT 状态通常用于数据库恢复、调整归档模式和主备维护。
1SHUTDOWN IMMEDIATE;生产环境通常优先使用 IMMEDIATE。ABORT 只应在数据库无法正常关闭且已经评估风险时使用。
1SELECT name,2 value,3 default_value,4 is_deprecated5FROM V$PARAMETER6ORDER BY name;1SHOW PARAMETER MAX_SESSIONS;也可以执行:
1SELECT name,2 value,3 default_value4FROM V$PARAMETER5WHERE name = 'MAX_SESSIONS';1ALTER SYSTEM SET OPEN_CURSORS = 1000 SCOPE = BOTH;执行前应查询参数是否支持动态修改,以及修改范围是内存、配置文件还是两者同时生效。
1SELECT *2FROM V$SYSTEM_PARAMETER3ORDER BY name;在分布式和共享集群环境中,还应关注不同节点的参数是否一致。
1SELECT *2FROM V$CONTROLFILE;重点确认控制文件路径和状态是否正常。
1SELECT *2FROM V$LOG;可以查看日志组、日志序列、大小、状态和归档情况。
1SELECT *2FROM V$LOGFILE;检查日志成员路径时,应同时确认文件系统和磁盘状态。
1ALTER SYSTEM SWITCH LOGFILE;该命令只强制切换当前 Redo 日志,不等于一定完成归档。
1ALTER SYSTEM ARCHIVE LOG CURRENT;数据库必须已经启用归档模式。
1ALTER SYSTEM CHECKPOINT;检查点会触发内存中的脏数据写入磁盘,不应在生产高峰期频繁执行。
1SELECT *2FROM DBA_TABLESPACES3ORDER BY tablespace_name;1SELECT file_id,2 file_name,3 tablespace_name,4 bytes / 1024 / 1024 AS size_mb,5 auto_extend,6 maxbytes / 1024 / 1024 AS max_mb,7 status8FROM DBA_DATA_FILES9ORDER BY tablespace_name, file_id;1SELECT file_id,2 file_name,3 tablespace_name,4 bytes / 1024 / 1024 AS size_mb,5 autoextensible,6 maxbytes / 1024 / 1024 AS max_mb,7 status8FROM DBA_TEMP_FILES9ORDER BY tablespace_name, file_id;1SELECT tablespace_name,2 ROUND(SUM(bytes) / 1024 / 1024, 2) AS free_mb3FROM DBA_FREE_SPACE4GROUP BY tablespace_name5ORDER BY free_mb;1SELECT d.tablespace_name,2 ROUND(d.total_mb, 2) AS total_mb,3 ROUND(NVL(f.free_mb, 0), 2) AS free_mb,4 ROUND(d.total_mb - NVL(f.free_mb, 0), 2) AS used_mb,5 ROUND(6 (d.total_mb - NVL(f.free_mb, 0)) /7 NULLIF(d.total_mb, 0) * 100,8 29 ) AS used_percent10FROM (11 SELECT tablespace_name,12 SUM(bytes) / 1024 / 1024 AS total_mb13 FROM DBA_DATA_FILES14 GROUP BY tablespace_name15) d16LEFT JOIN (17 SELECT tablespace_name,18 SUM(bytes) / 1024 / 1024 AS free_mb19 FROM DBA_FREE_SPACE20 GROUP BY tablespace_name21) f22 ON d.tablespace_name = f.tablespace_name23ORDER BY used_percent DESC;1CREATE TABLESPACE APP_DATA2DATAFILE '/data/yashan/app_data01.dbf'3SIZE 10G;文件目录必须存在,并且数据库安装用户需要具有相应读写权限。
1ALTER TABLESPACE APP_DATA2ADD DATAFILE '/data/yashan/app_data02.dbf'3SIZE 10G;1ALTER DATABASE DATAFILE '/data/yashan/app_data01.dbf'2RESIZE 20G;缩小文件前必须确认目标位置之后没有已使用的数据块。
1ALTER DATABASE DATAFILE '/data/yashan/app_data01.dbf'2AUTOEXTEND ON NEXT 1G MAXSIZE 100G;自动扩展必须同时设置合理的文件系统告警,不能把 MAXSIZE 当成容量管理方案。
1SELECT username,2 tablespace_name,3 bytes,4 max_bytes5FROM DBA_TS_QUOTAS6ORDER BY username, tablespace_name;1SELECT username,2 account_status,3 default_tablespace,4 temporary_tablespace,5 created6FROM DBA_USERS7ORDER BY username;1CREATE USER app_user2IDENTIFIED BY "Replace_With_Strong_Password"3DEFAULT TABLESPACE APP_DATA4TEMPORARY TABLESPACE TEMP;1ALTER USER app_user2IDENTIFIED BY "Replace_With_New_Strong_Password";1ALTER USER app_user ACCOUNT LOCK;2ALTER USER app_user ACCOUNT UNLOCK;1SELECT *2FROM DBA_ROLES3ORDER BY role;1SELECT grantee,2 granted_role,3 admin_option,4 default_role5FROM DBA_ROLE_PRIVS6WHERE grantee = 'APP_USER';1SELECT grantee,2 privilege,3 admin_option4FROM DBA_SYS_PRIVS5WHERE grantee = 'APP_USER'6ORDER BY privilege;1SELECT grantee,2 owner,3 table_name,4 privilege,5 grantable6FROM DBA_TAB_PRIVS7WHERE grantee = 'APP_USER'8ORDER BY owner, table_name, privilege;1GRANT CONNECT TO app_user;23GRANT SELECT, INSERT, UPDATE, DELETE4ON app.orders5TO app_user;权限应按照最小授权原则分配,避免直接向普通业务用户授予 DBA 权限。
1SELECT owner,2 object_name,3 object_type,4 status5FROM DBA_OBJECTS6WHERE status <> 'VALID'7ORDER BY owner, object_type, object_name;1SELECT sid,2 serial#,3 username,4 status,5 ip_address,6 cli_hostname,7 cli_program,8 sql_id,9 wait_event,10 logon_time11FROM V$SESSION12WHERE type = 'USER'13ORDER BY logon_time;1SELECT sid,2 serial#,3 username,4 ip_address,5 cli_program,6 sql_id,7 wait_event,8 exec_start_time9FROM V$SESSION10WHERE type = 'USER'11 AND status = 'ACTIVE'12ORDER BY exec_start_time;1SELECT username,2 COUNT(*) AS sessions3FROM V$SESSION4WHERE type = 'USER'5GROUP BY username6ORDER BY sessions DESC;1SELECT ip_address,2 cli_hostname,3 cli_program,4 COUNT(*) AS sessions5FROM V$SESSION6WHERE type = 'USER'7GROUP BY ip_address, cli_hostname, cli_program8ORDER BY sessions DESC;1SELECT sid,2 serial#,3 username,4 sql_id,5 exec_start_time,6 SYSDATE - exec_start_time AS running_time,7 wait_event8FROM V$SESSION9WHERE status = 'ACTIVE'10 AND exec_start_time IS NOT NULL11ORDER BY exec_start_time;1SELECT s.sid,2 s.serial#,3 s.username,4 s.sql_id,5 q.sql_text6FROM V$SESSION s7LEFT JOIN V$SQL q8 ON q.sql_id = s.sql_id9WHERE s.type = 'USER'10 AND s.status = 'ACTIVE';1SELECT *2FROM V$TRANSACTION;事务排查时可以结合 V$SESSION.XID 关联会话信息。
1SELECT s.sid,2 s.serial#,3 s.username,4 s.status,5 s.xid,6 s.sql_id,7 s.wait_event8FROM V$SESSION s9WHERE s.xid IS NOT NULL10ORDER BY s.logon_time;1SELECT s.sid,2 n.name,3 s.value4FROM V$SESSTAT s5JOIN V$STATNAME n6 ON n.statistic# = s.statistic#7WHERE s.sid = 218ORDER BY s.value DESC;不同版本的统计项编号字段可能存在差异,执行前可先查看两个视图的完整结构。
1SELECT *2FROM V$MYSTAT;1ALTER SYSTEM CANCEL SQL '21,2';该命令取消会话当前正在执行的 SQL,但不会直接断开会话。
1ALTER SYSTEM CANCEL SQL '21,2,9v6m7abc12345';执行前必须确认 SID、SERIAL# 和 SQL_ID 属于同一个目标会话。
1ALTER SYSTEM KILL SESSION '21,2';该操作会断开会话、回滚未提交事务并释放相关锁。
1SELECT name,2 value3FROM V$PARAMETER4WHERE name = 'MAX_SESSIONS';1SELECT COUNT(*) AS current_user_sessions2FROM V$SESSION3WHERE type = 'USER';1SELECT sid,2 id1,3 id2,4 lmode,5 request6FROM V$LOCK7ORDER BY sid;LMODE 表示已经持有的锁,REQUEST 表示正在等待的锁。
1SELECT l.sid,2 s.serial#,3 s.username,4 s.sql_id,5 s.wait_event,6 l.id1,7 l.id2,8 l.lmode,9 l.request10FROM V$LOCK l11JOIN V$SESSION s12 ON s.sid = l.sid13WHERE l.request IS NOT NULL;1SELECT l.session_id,2 l.object_id,3 o.owner,4 o.object_name,5 o.object_type,6 l.lmode7FROM V$LOCKED_OBJECT l8LEFT JOIN DBA_OBJECTS o9 ON o.object_id = l.object_id10ORDER BY l.session_id;1SELECT sid,2 wait_event3FROM V$SESSION_WAIT4ORDER BY sid;YashanDB 23.3 的 V$SESSION_WAIT 主要提供会话 ID 和当前等待事件,详细累计等待信息需要结合 V$SESSION_EVENT 分析。
1SELECT *2FROM V$SYSTEM_EVENT3ORDER BY time_waited DESC;累计等待时间需要结合实例启动时间和业务负载变化进行分析。
1SELECT *2FROM V$SESSION_EVENT3WHERE sid = 214ORDER BY time_waited DESC;1SELECT *2FROM V$SYSTEM_WAIT_CLASS3ORDER BY time_waited DESC;1SELECT l.sid,2 l.lmode,3 l.request,4 s.username,5 s.sql_id,6 s.wait_event7FROM V$LOCK l8JOIN V$SESSION s9 ON s.sid = l.sid10WHERE l.id1 = (11 SELECT object_id12 FROM DBA_OBJECTS13 WHERE owner = 'APP'14 AND object_name = 'ORDERS'15);1SELECT name,2 value3FROM V$SYSSTAT4WHERE LOWER(name) LIKE '%deadlock%';死锁发生后还应结合运行日志和相关 SQL 还原完整的锁定顺序。
1SELECT group_id,2 group_node_id,3 global_session_id,4 sid,5 serial#,6 username,7 status,8 sql_id,9 wait_event10FROM DV$SESSION11ORDER BY global_session_id, group_id, group_node_id;分布式跨 CN 终止会话时,需要使用全局会话 ID 和对应的 SERIAL#。
1EXPLAIN2SELECT *3FROM app.orders4WHERE order_no = 'A10001';1EXPLAIN ANALYZE2SELECT *3FROM app.orders4WHERE order_no = 'A10001';ANALYZE 会真正执行 SQL,对 DML 和大查询使用前必须确认影响。
1SELECT sql_id,2 sql_text,3 executions,4 elapsed_time,5 cpu_time,6 buffer_gets,7 disk_reads,8 rows_processed9FROM V$SQL10ORDER BY elapsed_time DESC;字段口径应以当前版本 V$SQL 官方定义为准。
1SELECT *2FROM (3 SELECT sql_id,4 executions,5 elapsed_time,6 cpu_time,7 buffer_gets,8 disk_reads,9 sql_text10 FROM V$SQL11 ORDER BY elapsed_time DESC12)13WHERE ROWNUM <= 20;1SELECT *2FROM (3 SELECT sql_id,4 executions,5 elapsed_time,6 ROUND(7 elapsed_time / NULLIF(executions, 0),8 29 ) AS avg_elapsed_time,10 sql_text11 FROM V$SQL12 WHERE executions > 013 ORDER BY avg_elapsed_time DESC14)15WHERE ROWNUM <= 20;1SELECT *2FROM (3 SELECT sql_id,4 executions,5 buffer_gets,6 disk_reads,7 rows_processed,8 sql_text9 FROM V$SQL10 ORDER BY buffer_gets DESC11)12WHERE ROWNUM <= 20;1SELECT *2FROM (3 SELECT sql_id,4 executions,5 disk_reads,6 buffer_gets,7 sql_text8 FROM V$SQL9 ORDER BY disk_reads DESC10)11WHERE ROWNUM <= 20;1SELECT *2FROM V$SQLAREA3ORDER BY elapsed_time DESC;1SELECT *2FROM V$SQL_PLAN3WHERE sql_id = '9v6m7abc12345'4ORDER BY id;1SELECT *2FROM V$SQL_PLAN_STATISTICS3WHERE sql_id = '9v6m7abc12345'4ORDER BY id;1SELECT *2FROM V$SQL_BIND_CAPTURE3WHERE sql_id = '9v6m7abc12345';绑定变量不一定每次都能采集到,不能因为视图中为空就断定 SQL 没有使用绑定变量。
1SELECT sid,2 sql_id,3 sql_text4FROM V$OPEN_CURSOR5ORDER BY sid;1SELECT *2FROM V$SGA;1SELECT *2FROM V$SGASTAT3ORDER BY bytes DESC;1SELECT stat_name,2 value,3 comments,4 cumulative5FROM V$OSSTAT6ORDER BY stat_name;1SELECT *2FROM V$UNDOSTAT3ORDER BY begin_time DESC;重点关注事务量、UNDO 使用、最长查询和空间不足等指标。
1SELECT *2FROM V$ROLLBACK;1SELECT *2FROM V$TEMP_EXTENT_POOL;1SELECT tablespace_name,2 file_id,3 extents_cached,4 extents_used,5 blocks_cached,6 blocks_used,7 bytes_cached,8 bytes_used9FROM V$TEMP_EXTENT_POOL10WHERE tablespace_name = 'TEMP';V$TEMPSEG_USAGE 可以进一步定位到具体会话,但该视图主要在后续版本中提供,23.3 环境应先确认实际补丁版本。
1SELECT database_name,2 log_mode,3 open_mode,4 database_role5FROM V$DATABASE;1SHUTDOWN IMMEDIATE;2STARTUP MOUNT;3ALTER DATABASE ARCHIVELOG;4ALTER DATABASE OPEN;生产执行前应规划归档路径、空间告警和清理策略。
1SELECT *2FROM V$ARCHIVE_DEST;1SELECT *2FROM V$ARCHIVE_DEST_STATUS;1SELECT *2FROM V$ARCHIVED_LOG3ORDER BY completion_time DESC;1SELECT *2FROM V$ARCHIVE_GAP;在主备异常时,应结合归档缺口、归档目的地状态和数据库角色一起分析。
1BACKUP DATABASE FULL2FORMAT '/backup/yashandb/full_20260724';数据库必须处于 OPEN 状态并已启用归档模式,目标目录必须存在且安装用户具有读写权限。
1BACKUP DATABASE INCREMENTAL LEVEL 02TAG 'level0_20260724'3FORMAT '/backup/yashandb/level0_20260724';1BACKUP DATABASE INCREMENTAL LEVEL 12TAG 'level1_20260725'3FORMAT '/backup/yashandb/level1_20260725';Level 1 增量备份需要依赖相应的 Level 0 基线备份。
1SELECT *2FROM DBA_BACKUP_SET3ORDER BY start_time DESC;具体时间和状态字段应以当前版本视图定义为准。
1SELECT *2FROM V$BACKUP_PROGRESS;1yasrman sys@192.168.10.10:1688 \2 -c "LIST BACKUP" \3 -D /backup/yashandb/catalog建议根据提示输入密码,不要把密码直接写在命令行中。
1yasrman sys@192.168.10.10:1688 \2 -c "BACKUP DATABASE TAG 'full_20260724' FULL FORMAT 'full_20260724'" \3 -D /backup/yashandb/catalog分布式集群应根据官方指引使用 BACKUP CLUSTER,不能只备份当前连接节点。
1yasldr -H2yasldr -Vyasldr 用于将 CSV 文件快速导入 YashanDB。
1yasldr app_user@192.168.10.10:1688 \2 CONTROL_FILE=/data/load/orders.ctl \3 MODE=BATCH \4 BATCH_SIZE=4032控制文件中需要定义 CSV 文件、目标表、字段映射和并行度等信息。
1# 查看集群详细状态2yasboot cluster status -c yashandb -d34# 启动集群5yasboot cluster start -c yashandb67# 停止集群8yasboot cluster stop -c yashandb910# 重启集群11yasboot cluster restart -c yashandb1213# 收集集群日志14yasboot cluster log -c yashandb -o /backup/yashandb/logs分布式环境还应执行以下 SQL 检查节点、数据库和选举状态:
1SELECT type,2 group_id,3 group_node_id,4 endpoint,5 role,6 running_state,7 data_path8FROM DV$NODE;910SELECT group_id,11 group_node_id,12 database_id,13 log_mode,14 open_mode,15 database_role,16 status17FROM DV$DATABASE;1819SELECT *20FROM DV$ELECTION;集群的启动、停止、切换和恢复应通过对应版本的集群管理工具统一执行,不要在不了解节点关系的情况下分别手工处理各数据库进程。
这 100 条命令基本覆盖了 YashanDB DBA 日常巡检和故障排查中最常见的入口,但真正的生产运维不能只靠背命令。
遇到问题时,建议按照“确认部署形态和节点角色、检查实例状态、观察会话和等待、定位阻塞或 SQL、评估影响、执行处理、验证恢复”的顺序进行。特别是 ALTER SYSTEM KILL SESSION、调整数据文件、清理归档、主备切换和恢复覆盖等操作,执行前必须确认业务影响并准备回退方案。
另外,YashanDB 的单机主备、分布式和共享集群是三种不同的部署形态。V$ 视图通常反映当前实例,GV$ 和 DV$ 视图则用于全局或分布式信息。现场执行时,应以当前环境的版本、部署架构、视图结构和对应版本官方文档为准,不能把 Oracle 或其他数据库中的相似命令直接照搬到生产环境。
更多 Oracle、MySQL、PostgreSQL、MongoDB 实战内容,可以访问 DBA 学习平台:ora100.com