Skip to content

DM 常用管理命令

命令分类

根据命令的功能和用途,可以将DM管理命令分为以下几类:

命令类别主要功能常用命令
实例管理启动、停止、重启实例DmServicedmctlcvtdm.ini
用户管理创建、修改、删除用户和权限CREATE USERALTER USERDROP USERGRANTREVOKE
备份恢复备份和恢复数据库dmrmanBACKUPRESTORERECOVER
性能监控监控数据库性能dm loggerV$视图dm sql_explain
数据管理管理数据库对象和数据CREATE TABLEALTER TABLEDROP TABLEINSERTUPDATEDELETE
参数管理管理数据库参数ALTER SYSTEMdm.ini
日志管理管理数据库日志dm loggerARCHIVE LOG
工具命令辅助管理工具dm sqldm disqldm impdm exp

实例管理命令

实例管理命令用于启动、停止、重启和监控数据库实例。

1. 实例启动命令

使用服务脚本启动

bash
# Linux系统
./DmServiceDMSERVER start

# Windows系统
net start DmServiceDMSERVER

使用dmctlcvt工具启动

bash
# 启动实例
./dmctlcvt start /opt/dmdbms/data/DAMENG/dm.ini

# 带参数启动
./dmctlcvt start /opt/dmdbms/data/DAMENG/dm.ini -noconsole

2. 实例停止命令

使用服务脚本停止

bash
# Linux系统
./DmServiceDMSERVER stop

# Windows系统
net stop DmServiceDMSERVER

使用SQL命令停止

sql
-- 停止数据库实例
SHUTDOWN;

-- 立即停止实例
SHUTDOWN IMMEDIATE;

-- 强制停止实例
SHUTDOWN ABORT;

3. 实例重启命令

使用服务脚本重启

bash
# Linux系统
./DmServiceDMSERVER restart

# Windows系统
net stop DmServiceDMSERVER && net start DmServiceDMSERVER

4. 实例状态查看

使用服务脚本查看

bash
# Linux系统
./DmServiceDMSERVER status

# Windows系统
sc query DmServiceDMSERVER

使用SQL命令查看

sql
-- 查看实例状态
SELECT STATUS$ FROM V$INSTANCE;

-- 查看实例详细信息
SELECT * FROM V$INSTANCE;

用户管理命令

用户管理命令用于创建、修改、删除用户和管理用户权限。

1. 用户创建命令

sql
-- 创建用户
CREATE USER user_name IDENTIFIED BY password;

-- 创建用户并指定表空间
CREATE USER user_name IDENTIFIED BY password DEFAULT TABLESPACE tablespace_name;

-- 创建用户并指定多个表空间
CREATE USER user_name IDENTIFIED BY password DEFAULT TABLESPACE tablespace_name TEMPORARY TABLESPACE temp_tablespace_name;

2. 用户修改命令

sql
-- 修改用户密码
ALTER USER user_name IDENTIFIED BY new_password;

-- 修改用户表空间
ALTER USER user_name DEFAULT TABLESPACE new_tablespace_name;

-- 锁定用户
ALTER USER user_name ACCOUNT LOCK;

-- 解锁用户
ALTER USER user_name ACCOUNT UNLOCK;

-- 过期用户密码
ALTER USER user_name PASSWORD EXPIRE;

3. 用户删除命令

sql
-- 删除用户(不删除用户对象)
DROP USER user_name;

-- 删除用户及其所有对象
DROP USER user_name CASCADE;

4. 权限管理命令

授予系统权限

sql
-- 授予系统权限
GRANT CREATE TABLE, CREATE VIEW TO user_name;

-- 授予系统权限并允许转授
GRANT CREATE TABLE TO user_name WITH ADMIN OPTION;

授予对象权限

sql
-- 授予表权限
GRANT SELECT, INSERT, UPDATE, DELETE ON table_name TO user_name;

-- 授予表权限并允许转授
GRANT SELECT ON table_name TO user_name WITH GRANT OPTION;

-- 授予所有表权限
GRANT ALL PRIVILEGES ON table_name TO user_name;

收回权限

sql
-- 收回系统权限
REVOKE CREATE TABLE FROM user_name;

-- 收回对象权限
REVOKE SELECT, INSERT ON table_name FROM user_name;

5. 角色管理命令

sql
-- 创建角色
CREATE ROLE role_name;

-- 授予角色权限
GRANT CREATE TABLE, CREATE VIEW TO role_name;

-- 将角色授予用户
GRANT role_name TO user_name;

-- 收回角色
REVOKE role_name FROM user_name;

-- 删除角色
DROP ROLE role_name;

备份恢复命令

备份恢复命令用于备份和恢复数据库,确保数据的安全性和可用性。

1. 备份命令

使用dmrman工具备份

bash
# 全量备份
./dmrman CTLSTMT="BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FULL BACKUPSET '/opt/dmdbms/backup/full_backup'"

# 增量备份
./dmrman CTLSTMT="BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/opt/dmdbms/backup' BACKUPSET '/opt/dmdbms/backup/increment_backup'"

# 日志备份
./dmrman CTLSTMT="BACKUP LOG '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/opt/dmdbms/backup/log_backup'"

使用SQL命令备份

sql
-- 全量备份
BACKUP DATABASE FULL;

-- 增量备份
BACKUP DATABASE INCREMENT;

-- 日志备份
BACKUP LOG;

-- 指定备份集路径备份
BACKUP DATABASE FULL BACKUPSET '/opt/dmdbms/backup/full_backup_20230101';

2. 恢复命令

使用dmrman工具恢复

bash
# 全量恢复
./dmrman CTLSTMT="RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/full_backup'"

# 增量恢复
./dmrman CTLSTMT="RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT FROM BACKUPSET '/opt/dmdbms/backup/increment_backup'"

# 归档恢复到指定时间点
./dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/opt/dmdbms/arch' UNTIL TIME '2023-01-01 10:00:00'"

# 恢复完成后更新DB_MAGIC
./dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

使用SQL命令恢复

sql
-- 全量恢复
RESTORE DATABASE FROM BACKUPSET '/opt/dmdbms/backup/full_backup';

-- 增量恢复
RESTORE DATABASE INCREMENT FROM BACKUPSET '/opt/dmdbms/backup/increment_backup';

-- 归档恢复
RECOVER DATABASE WITH ARCHIVEDIR '/opt/dmdbms/arch';

-- 归档恢复到指定时间点
RECOVER DATABASE WITH ARCHIVEDIR '/opt/dmdbms/arch' UNTIL TIME '2023-01-01 10:00:00';

性能监控命令

性能监控命令用于监控数据库性能,识别性能瓶颈和问题。

1. 性能视图查询

sql
-- 查看系统状态
SELECT * FROM V$SYSSTAT;

-- 查看会话信息
SELECT * FROM V$SESSION;

-- 查看SQL执行情况
SELECT * FROM V$SQL_HISTORY WHERE EXEC_TIME > 1000;

-- 查看锁信息
SELECT * FROM V$LOCK;

-- 查看事务信息
SELECT * FROM V$TRX;

-- 查看等待事件
SELECT * FROM V$WAIT_EVENT;

-- 查看内存使用情况
SELECT * FROM V$MEMORY;

-- 查看I/O统计信息
SELECT * FROM V$IOSTAT;

2. 使用dm logger工具

bash
# 查看错误日志
./dm logger view -t error -f /opt/dmdbms/data/DAMENG/log/dm_DMSERVER.log

# 查看事件日志
./dm logger view -t event -f /opt/dmdbms/data/DAMENG/log/dm_DMSERVER.event

# 实时查看日志
./dm logger tail -f /opt/dmdbms/data/DAMENG/log/dm_DMSERVER.log

3. 使用dm sql_explain工具

bash
# 分析SQL执行计划
./dm sql_explain -d DAMENG -u SYSDBA -p SYSDBA -s "SELECT * FROM table_name WHERE column_name = 'value'"

# 分析SQL日志
./dm sql_explain -d DAMENG -u SYSDBA -p SYSDBA -f /opt/dmdbms/data/DAMENG/log/sql.log

数据管理命令

数据管理命令用于管理数据库对象和数据。

1. 表管理命令

创建表

sql
-- 创建表
CREATE TABLE table_name (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 创建带索引的表
CREATE TABLE table_name (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_name (name),
    INDEX idx_age (age)
);

-- 创建分区表
CREATE TABLE partition_table (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    create_time DATETIME
) PARTITION BY RANGE (YEAR(create_time)) (
    PARTITION p2022 VALUES LESS THAN (2023),
    PARTITION p2023 VALUES LESS THAN (2024),
    PARTITION p2024 VALUES LESS THAN (2025)
);

修改表

sql
-- 添加列
ALTER TABLE table_name ADD column_name VARCHAR(50);

-- 修改列
ALTER TABLE table_name MODIFY column_name VARCHAR(100);

-- 删除列
ALTER TABLE table_name DROP COLUMN column_name;

-- 添加主键
ALTER TABLE table_name ADD PRIMARY KEY (id);

-- 添加索引
ALTER TABLE table_name ADD INDEX idx_name (name);

-- 删除索引
ALTER TABLE table_name DROP INDEX idx_name;

删除表

sql
-- 删除表
DROP TABLE table_name;

-- 删除分区表
DROP TABLE partition_table;

2. 索引管理命令

创建索引

sql
-- 创建普通索引
CREATE INDEX idx_name ON table_name (column_name);

-- 创建唯一索引
CREATE UNIQUE INDEX idx_unique_name ON table_name (column_name);

-- 创建复合索引
CREATE INDEX idx_name_age ON table_name (name, age);

-- 创建位图索引
CREATE BITMAP INDEX idx_bitmap_gender ON table_name (gender);

修改索引

sql
-- 重命名索引
ALTER INDEX idx_old_name RENAME TO idx_new_name;

-- 重建索引
ALTER INDEX idx_name REBUILD;

-- 禁用索引
ALTER INDEX idx_name DISABLE;

-- 启用索引
ALTER INDEX idx_name ENABLE;

删除索引

sql
-- 删除索引
DROP INDEX idx_name;

3. 数据操作命令

插入数据

sql
-- 插入单条数据
INSERT INTO table_name (id, name, age) VALUES (1, '张三', 25);

-- 插入多条数据
INSERT INTO table_name (id, name, age) VALUES 
    (2, '李四', 30),
    (3, '王五', 35),
    (4, '赵六', 40);

-- 从其他表插入数据
INSERT INTO table_name (id, name, age) 
SELECT id, name, age FROM other_table WHERE condition;

更新数据

sql
-- 更新单条数据
UPDATE table_name SET age = 26 WHERE id = 1;

-- 更新多条数据
UPDATE table_name SET age = age + 1 WHERE age < 30;

-- 使用子查询更新
UPDATE table_name SET age = (SELECT MAX(age) FROM other_table) WHERE id = 1;

删除数据

sql
-- 删除单条数据
DELETE FROM table_name WHERE id = 1;

-- 删除多条数据
DELETE FROM table_name WHERE age > 40;

-- 截断表(删除所有数据,速度更快)
TRUNCATE TABLE table_name;

参数管理命令

参数管理命令用于管理数据库参数。

1. 查看参数

使用SQL命令查看

sql
-- 查看所有参数
SELECT * FROM V$PARAMETER;

-- 查看特定参数
SELECT * FROM V$PARAMETER WHERE NAME = 'BUFFER';

-- 查看动态参数
SELECT * FROM V$PARAMETER WHERE IS_DYNAMIC = 'Y';

使用dmctlcvt工具查看

bash
# 查看参数文件
./dmctlcvt view /opt/dmdbms/data/DAMENG/dm.ini

2. 修改参数

使用SQL命令修改动态参数

sql
-- 修改参数(立即生效,无需重启)
ALTER SYSTEM SET BUFFER = 20000 SPFILE;

-- 修改参数并立即生效
ALTER SYSTEM SET BUFFER = 20000 BOTH;

-- 修改参数仅在内存中生效
ALTER SYSTEM SET BUFFER = 20000 MEMORY;

-- 修改参数仅在参数文件中生效
ALTER SYSTEM SET BUFFER = 20000 SPFILE;

修改参数文件

bash
# 使用文本编辑器修改dm.ini文件
vi /opt/dmdbms/data/DAMENG/dm.ini

# 修改后重启实例使参数生效
./DmServiceDMSERVER restart

日志管理命令

日志管理命令用于管理数据库日志。

1. 查看日志配置

sql
-- 查看归档日志配置
SELECT * FROM V$DM_INI WHERE PARA_NAME LIKE '%ARCH%';

-- 查看重做日志配置
SELECT * FROM V$LOGFILE;

2. 切换日志

sql
-- 切换重做日志
ALTER SYSTEM SWITCH LOGFILE;

-- 切换归档日志
ALTER SYSTEM ARCHIVE LOG CURRENT;

3. 清理日志

sql
-- 清理归档日志(保留最近7天)
PURGE ARCHIVELOG UNTIL TIME SYSDATE - 7;

-- 清理所有归档日志
PURGE ARCHIVELOG ALL;

工具命令

DM数据库提供了多种辅助管理工具,用于数据库的日常管理和维护。

1. dm disql工具

dm disql是DM数据库的交互式SQL工具,用于执行SQL命令和脚本。

bash
# 连接数据库
./dm disql SYSDBA/SYSDBA@localhost:5236

# 执行SQL脚本
./dm disql SYSDBA/SYSDBA@localhost:5236 -f /opt/dmdbms/scripts/create_table.sql

# 执行SQL命令并将结果输出到文件
./dm disql SYSDBA/SYSDBA@localhost:5236 -s "SELECT * FROM table_name" -o /opt/dmdbms/output/result.txt

2. dm exp和dm imp工具

dm exp和dm imp工具用于数据库的导出和导入。

导出数据

bash
# 导出整个数据库
./dm exp SYSDBA/SYSDBA@localhost:5236 file=/opt/dmdbms/backup/full.dmp log=/opt/dmdbms/backup/full.log full=y

# 导出指定用户
./dm exp SYSDBA/SYSDBA@localhost:5236 file=/opt/dmdbms/backup/user.dmp log=/opt/dmdbms/backup/user.log owner=user_name

# 导出指定表
./dm exp SYSDBA/SYSDBA@localhost:5236 file=/opt/dmdbms/backup/table.dmp log=/opt/dmdbms/backup/table.log tables=table1,table2

导入数据

bash
# 导入整个数据库
./dm imp SYSDBA/SYSDBA@localhost:5236 file=/opt/dmdbms/backup/full.dmp log=/opt/dmdbms/backup/import_full.log full=y

# 导入指定用户
./dm imp SYSDBA/SYSDBA@localhost:5236 file=/opt/dmdbms/backup/user.dmp log=/opt/dmdbms/backup/import_user.log fromuser=old_user touser=new_user

# 导入指定表
./dm imp SYSDBA/SYSDBA@localhost:5236 file=/opt/dmdbms/backup/table.dmp log=/opt/dmdbms/backup/import_table.log tables=table1,table2

3. dm dbca工具

dm dbca是DM数据库配置助手,用于创建和配置数据库实例。

bash
# 启动图形界面
./dm dbca

# 命令行模式创建数据库
./dm dbca -silent -create -dbname DAMENG -path /opt/dmdbms/data -port 5236 -userpwd SYSDBA/SYSDBA

常用命令速查表

实例管理

命令功能
./DmServiceDMSERVER start启动实例
./DmServiceDMSERVER stop停止实例
./DmServiceDMSERVER restart重启实例
./DmServiceDMSERVER status查看实例状态
SHUTDOWN IMMEDIATE立即停止实例

用户管理

命令功能
CREATE USER user_name IDENTIFIED BY password创建用户
ALTER USER user_name IDENTIFIED BY new_password修改用户密码
DROP USER user_name CASCADE删除用户及其对象
GRANT CREATE TABLE TO user_name授予系统权限
GRANT SELECT ON table_name TO user_name授予对象权限
REVOKE CREATE TABLE FROM user_name收回系统权限

备份恢复

命令功能
dmrman CTLSTMT="BACKUP DATABASE ..."使用dmrman备份
dmrman CTLSTMT="RESTORE DATABASE ..."使用dmrman恢复
BACKUP DATABASE FULL使用SQL备份
RESTORE DATABASE FROM BACKUPSET ...使用SQL恢复
RECOVER DATABASE WITH ARCHIVEDIR ...归档恢复

性能监控

命令功能
SELECT * FROM V$SESSION查看会话信息
SELECT * FROM V$SQL_HISTORY查看SQL执行历史
SELECT * FROM V$LOCK查看锁信息
./dm logger view -t error -f ...查看错误日志
./dm sql_explain -s "SQL语句"分析SQL执行计划

数据管理

命令功能
CREATE TABLE table_name (...)创建表
ALTER TABLE table_name ADD column_name ...添加列
DROP TABLE table_name删除表
CREATE INDEX idx_name ON table_name (...)创建索引
INSERT INTO table_name VALUES (...)插入数据
UPDATE table_name SET ... WHERE ...更新数据
DELETE FROM table_name WHERE ...删除数据

常见问题(FAQ)

Q1: 如何查看DM数据库的版本信息?

A1: 可以使用以下命令查看DM数据库的版本信息:

sql
-- 查看版本信息
SELECT * FROM V$VERSION;

-- 或者使用SQL命令
SELECT DBMS_SERVER_INFO('version');

Q2: 如何修改DM数据库的端口号?

A2: 可以通过以下步骤修改DM数据库的端口号:

  1. 修改dm.ini文件中的PORT_NUM参数
  2. 重启数据库实例
  3. 验证端口是否已修改
sql
-- 查看当前端口号
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'PORT_NUM';

Q3: 如何查看DM数据库的字符集?

A3: 可以使用以下命令查看DM数据库的字符集:

sql
-- 查看字符集
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'CHARSET';

-- 查看国家字符集
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'NATIONAL_CHARSET';

Q4: 如何查看DM数据库的表空间使用情况?

A4: 可以使用以下命令查看DM数据库的表空间使用情况:

sql
-- 查看表空间使用情况
SELECT 
    TABLESPACE_NAME,
    SUM(BYTES) / 1024 / 1024 AS TOTAL_MB,
    SUM(BYTES - FREE_BYTES) / 1024 / 1024 AS USED_MB,
    SUM(FREE_BYTES) / 1024 / 1024 AS FREE_MB,
    ROUND((SUM(BYTES - FREE_BYTES) / SUM(BYTES)) * 100, 2) AS USED_PERCENT
FROM V$TABLESPACE
GROUP BY TABLESPACE_NAME;

Q5: 如何查看DM数据库的会话数?

A5: 可以使用以下命令查看DM数据库的会话数:

sql
-- 查看当前会话数
SELECT COUNT(*) FROM V$SESSION;

-- 查看最大会话数配置
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'MAX_SESSIONS';

Q6: 如何杀死DM数据库的会话?

A6: 可以使用以下命令杀死DM数据库的会话:

sql
-- 查看会话信息,获取会话ID
SELECT SID, SERIAL#, USERNAME, PROGRAM FROM V$SESSION;

-- 杀死会话
ALTER SYSTEM KILL SESSION 'SID,SERIAL#';

-- 例如:杀死SID为100,SERIAL#为200的会话
ALTER SYSTEM KILL SESSION '100,200';

本文档介绍了DM数据库常用的管理命令,包括命令的语法、功能和示例。数据库管理员可以根据实际需求选择合适的命令进行数据库管理和维护。同时,建议数据库管理员在使用这些命令时,遵循最佳实践,确保命令的正确使用和数据库的安全。

随着DM数据库版本的不断升级,命令和工具也在不断增强和完善。数据库管理员应该不断学习和掌握新的命令和工具,提高数据库管理的技能和水平。