外观
DM 常用维护命令
实例管理命令
1. 实例启动命令
shell
# 使用dmserver命令启动实例
dmserver /dm/data/DAMENG/dm.ini
# 后台启动实例
dmserver /dm/data/DAMENG/dm.ini &
# 使用service命令启动实例(Linux)
systemctl start DmServiceDMSERVER
# 使用service命令启动实例(Windows)
net start DmServiceDMSERVER2. 实例停止命令
shell
# 使用dmctl命令停止实例
dmctl stop /dm/data/DAMENG/dm.ini
# 使用service命令停止实例(Linux)
systemctl stop DmServiceDMSERVER
# 使用service命令停止实例(Windows)
net stop DmServiceDMSERVER
# 强制停止实例
dmctl stop /dm/data/DAMENG/dm.ini force3. 实例状态查询命令
shell
# 使用dmctl命令查询实例状态
dmctl status /dm/data/DAMENG/dm.ini
# 使用service命令查询实例状态(Linux)
systemctl status DmServiceDMSERVER
# 使用SQL语句查询实例状态
SELECT STATUS$ FROM V$INSTANCE;会话管理命令
1. 会话查询命令
sql
-- 查询所有会话
SELECT * FROM V$SESSION;
-- 查询活跃会话
SELECT * FROM V$SESSION WHERE STATE = 'ACTIVE';
-- 查询特定用户的会话
SELECT * FROM V$SESSION WHERE USERNAME = 'SYSDBA';
-- 查询会话详细信息,包括SQL语句
SELECT S.SID, S.USERNAME, S.STATE, S.EVENT, S.SQL_TEXT
FROM V$SESSION S
WHERE S.STATE = 'ACTIVE';2. 会话终止命令
sql
-- 终止指定会话
ALTER SYSTEM KILL SESSION 'sid,serial#';
-- 示例:终止SID为10,SERIAL#为20的会话
ALTER SYSTEM KILL SESSION '10,20';
-- 强制终止会话
ALTER SYSTEM KILL SESSION '10,20' IMMEDIATE;性能监控命令
1. 系统状态查询命令
sql
-- 查询系统基本信息
SELECT * FROM V$SYSTEMINFO;
-- 查询系统负载信息
SELECT * FROM V$SYSLOAD;
-- 查询CPU使用率
SELECT * FROM V$CPU_USAGE;
-- 查询内存使用情况
SELECT * FROM V$MEMORY;
-- 查询磁盘I/O情况
SELECT * FROM V$DISK_IO;2. SQL性能分析命令
sql
-- 查看SQL执行计划
EXPLAIN SELECT * FROM EMP WHERE EMPNO = 7369;
-- 查看SQL执行历史
SELECT * FROM V$SQL_HISTORY ORDER BY EXEC_TIME DESC;
-- 查看慢SQL
SELECT * FROM V$LONG_EXEC_SQL;
-- 查看SQL统计信息
SELECT * FROM V$SQL_STAT ORDER BY EXECUTIONS DESC;备份恢复命令
1. 全量备份命令
sql
-- 使用SQL语句执行全量备份
BACKUP DATABASE FULL BACKUPSET '/dm/backup/full_backup_20230101';
-- 使用dmrman工具执行全量备份
dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL BACKUPSET '/dm/backup/full_backup_20230101'";2. 增量备份命令
sql
-- 使用SQL语句执行增量备份
BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dm/backup' BACKUPSET '/dm/backup/increment_backup_20230101';
-- 使用dmrman工具执行增量备份
dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/dm/backup' BACKUPSET '/dm/backup/increment_backup_20230101'";3. 恢复命令
sql
-- 使用dmrman工具执行数据库恢复
dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/backup/full_backup_20230101'";
dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/backup/full_backup_20230101'";
dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC";空间管理命令
1. 表空间查询命令
sql
-- 查询所有表空间
SELECT * FROM V$TABLESPACE;
-- 查询表空间使用情况
SELECT T.NAME, T.TOTAL_SIZE*P.PAGE_SIZE/1024/1024 AS TOTAL_MB,
(T.TOTAL_SIZE-T.FREE_SIZE)*P.PAGE_SIZE/1024/1024 AS USED_MB,
T.FREE_SIZE*P.PAGE_SIZE/1024/1024 AS FREE_MB,
ROUND((T.TOTAL_SIZE-T.FREE_SIZE)*100/T.TOTAL_SIZE, 2) AS USED_PERCENT
FROM V$TABLESPACE T, V$DM_INI P
WHERE P.PARA_NAME = 'PAGE_SIZE';2. 数据文件管理命令
sql
-- 查看数据文件
SELECT * FROM V$DATAFILE;
-- 扩展表空间
ALTER TABLESPACE USERS ADD DATAFILE '/dm/data/DAMENG/users02.dbf' SIZE 100M;
-- 修改数据文件大小
ALTER DATABASE DATAFILE '/dm/data/DAMENG/users01.dbf' RESIZE 200M;3. 表空间碎片整理命令
sql
-- 表空间碎片整理
ALTER TABLESPACE USERS COALESCE;
-- 重建表以减少碎片
ALTER TABLE EMP MOVE;
-- 重建索引以减少碎片
ALTER INDEX PK_EMP REBUILD;用户和权限管理命令
1. 用户管理命令
sql
-- 创建用户
CREATE USER TEST IDENTIFIED BY "123456" DEFAULT TABLESPACE USERS;
-- 修改用户密码
ALTER USER TEST IDENTIFIED BY "654321";
-- 锁定用户
ALTER USER TEST ACCOUNT LOCK;
-- 解锁用户
ALTER USER TEST ACCOUNT UNLOCK;
-- 删除用户
DROP USER TEST CASCADE;2. 权限管理命令
sql
-- 授予系统权限
GRANT CREATE TABLE, CREATE VIEW TO TEST;
-- 授予对象权限
GRANT SELECT, INSERT, UPDATE ON EMP TO TEST;
-- 授予角色
GRANT DBA TO TEST;
-- 回收权限
REVOKE CREATE TABLE FROM TEST;
-- 查看用户权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'TEST';
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'TEST';日志管理命令
1. 日志文件查询命令
sql
-- 查询重做日志文件
SELECT * FROM V$LOGFILE;
-- 查询归档日志信息
SELECT * FROM V$ARCHIVED_LOG;
-- 查询日志模式
SELECT ARCH_MODE FROM V$DATABASE;2. 归档配置命令
sql
-- 启用归档模式
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
-- 配置归档路径
ALTER SYSTEM SET ARCH_DEST = '/dm/arch' SCOPE=SPFILE;
-- 手动归档
ALTER SYSTEM ARCHIVE LOG CURRENT;统计信息管理命令
1. 统计信息收集命令
sql
-- 收集表统计信息
ANALYZE TABLE EMP COMPUTE STATISTICS;
-- 收集表和索引统计信息
ANALYZE TABLE EMP COMPUTE STATISTICS FOR ALL COLUMNS FOR ALL INDEXED COLUMNS;
-- 收集模式下所有表的统计信息
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SYSDBA');
-- 收集数据库级统计信息
EXEC DBMS_STATS.GATHER_DATABASE_STATS();2. 统计信息查询命令
sql
-- 查看表统计信息
SELECT * FROM DBA_TABLES WHERE TABLE_NAME = 'EMP';
-- 查看列统计信息
SELECT * FROM DBA_TAB_COL_STATISTICS WHERE TABLE_NAME = 'EMP';
-- 查看索引统计信息
SELECT * FROM DBA_IND_STATISTICS WHERE TABLE_NAME = 'EMP';常见维护任务命令
1. 数据库检查命令
sql
-- 检查数据库完整性
DBMS_DBHELP.CHECK_DB();
-- 检查表完整性
DBMS_DBHELP.CHECK_TABLE('SYSDBA', 'EMP');
-- 检查索引完整性
DBMS_DBHELP.CHECK_INDEX('SYSDBA', 'PK_EMP');2. 配置参数管理命令
sql
-- 查看配置参数
SELECT * FROM V$DM_INI WHERE PARA_NAME LIKE '%BUFFER%';
-- 修改配置参数(动态参数)
ALTER SYSTEM SET BUFFER = 10000 SCOPE=BOTH;
-- 修改配置参数(静态参数,需要重启实例)
ALTER SYSTEM SET MEMORY_POOL = 2000 SCOPE=SPFILE;命令使用最佳实践
1. 命令执行前的准备
- 了解命令的功能和影响范围
- 检查命令的执行权限
- 在测试环境中验证命令效果
- 备份相关数据和配置
2. 命令执行中的注意事项
- 记录命令的执行时间和结果
- 监控命令执行过程中的系统状态
- 注意命令执行的并发影响
- 遵循最小权限原则
3. 命令执行后的验证
- 验证命令执行结果是否符合预期
- 检查系统性能和稳定性
- 确认数据完整性
- 记录命令执行日志
常见问题(FAQ)
Q1: 如何快速查询当前数据库的活跃会话?
A1: 使用以下SQL语句可以快速查询当前数据库的活跃会话:
sql
SELECT S.SID, S.USERNAME, S.PROGRAM, S.EVENT, S.SQL_TEXT, S.WAIT_TIME
FROM V$SESSION S
WHERE S.STATE = 'ACTIVE';Q2: 如何终止一个长时间运行的SQL语句?
A2: 首先查询该SQL语句对应的会话ID和序列号,然后使用ALTER SYSTEM KILL SESSION命令终止会话:
sql
-- 查询长时间运行的SQL
SELECT S.SID, S.SERIAL#, S.USERNAME, S.SQL_TEXT, S.EXEC_TIME
FROM V$SESSION S
WHERE S.EXEC_TIME > 300;
-- 终止会话
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;Q3: 如何查看数据库的表空间使用情况?
A3: 使用以下SQL语句可以查看数据库的表空间使用情况:
sql
SELECT T.NAME AS TABLESPACE_NAME,
ROUND(T.TOTAL_SIZE * P.PAGE_SIZE / 1024 / 1024, 2) AS TOTAL_MB,
ROUND((T.TOTAL_SIZE - T.FREE_SIZE) * P.PAGE_SIZE / 1024 / 1024, 2) AS USED_MB,
ROUND(T.FREE_SIZE * P.PAGE_SIZE / 1024 / 1024, 2) AS FREE_MB,
ROUND((T.TOTAL_SIZE - T.FREE_SIZE) * 100 / T.TOTAL_SIZE, 2) AS USED_PERCENT
FROM V$TABLESPACE T, V$DM_INI P
WHERE P.PARA_NAME = 'PAGE_SIZE';Q4: 如何收集数据库的统计信息?
A4: 可以使用DBMS_STATS包或ANALYZE命令收集数据库的统计信息:
sql
-- 使用DBMS_STATS包收集模式统计信息
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SYSDBA');
-- 使用ANALYZE命令收集表统计信息
ANALYZE TABLE EMP COMPUTE STATISTICS;Q5: 如何查看数据库的配置参数?
A5: 使用以下SQL语句可以查看数据库的配置参数:
sql
-- 查看所有配置参数
SELECT * FROM V$DM_INI;
-- 查看特定配置参数
SELECT * FROM V$DM_INI WHERE PARA_NAME = 'BUFFER';
-- 查看动态配置参数
SELECT * FROM V$DM_INI WHERE ISPARA_MODIFIABLE = 'Y';Q6: 如何手动归档重做日志?
A6: 使用以下SQL语句可以手动归档重做日志:
sql
ALTER SYSTEM ARCHIVE LOG CURRENT;
-- 归档指定日志文件
ALTER SYSTEM ARCHIVE LOG FILE '/dm/data/DAMENG/redo01.log';