注册
DM8操作命令整理
培训园地/ 文章详情 /

DM8操作命令整理

Invictus 2025/05/27 219 0 0

仅供测试环境参考,生产环境按实际要求操作!!!

一、disql常用命令

1.1 set设置常用环境变量

set pagesize <数字> #设置一页有多少行数。默认14。
set LINESHOW on/off #设置是否显示行号。默认on。
set HEADING on/off #设置是否显示列标题。默认on。
set TIMING on/off #设置是否显示列标题。默认on。
set TIME on/off #显示系统的当前时间。默认off。
set FEED <数字>/on/off #设置是否显示当前 SQL 语句查询或修改的总行数。数字为表示结果大于n行时,才显示结果的总行数。默认6。
set ECHO on/off #在用 START 命令执行一个 SQL 脚本时,是否显示脚本中正在执行的SQL语句。默认ON。
set AUTOCOMMIT on/off #在用 START 命令执行一个 SQL 脚本时,设置当前 session 是否对修改的数据进行自动提交。默认OFF。

1.2 spool输出到文件和host切换到操作系统

SQL> spool D:/output.txt SQL> select * from v$database; NAME CREATE_TIME ARCH_MODE LAST_CKPT_TIME STATUS$ ROLE$ MAX_SIZE TOTAL_SIZE DSC_NODES OPEN_COUNT STARTUP_COUNT ---- ------------------- --------- ------------------- ----------- ----------- -------------------- -------------------- ----------- ----------- -------------------- LAST_STARTUP_TIME ------------------- DMDB 2025-04-15 10:35:35 Y 2025-05-09 16:09:32 4 0 0 748544 1 8 7 2025-05-09 13:33:32 SQL> spool off SQL> host Microsoft Windows [版本 10.0.26100.3775] (c) Microsoft Corporation。保留所有权利。 C:\Users\administrator\AppData\Local\Programs\SQLark\plugins\terminal\disql>dir D:\output.txt 驱动器 D 中的卷是 新加卷 卷的序列号是 50A2-DFBE D:\ 的目录 2025/05/09 16:12 611 output.txt 1 个文件 611 字节 0 个目录 115,858,219,008 可用字节 -- exit回到sql终端,或者host dir D:\output.txt可以直接跟需要执行的命令

1.3 desc获取对象结构信息

SQL> desc dba_users; NAME TYPE$ NULLABLE --------------------------- ------------ -------- USERNAME VARCHAR(128) Y USER_ID INTEGER Y PASSWORD VARCHAR(8) Y ACCOUNT_STATUS VARCHAR(21) Y LOCK_DATE DATETIME(0) Y EXPIRY_DATE DATETIME(6) Y DEFAULT_TABLESPACE VARCHAR(128) Y DEFAULT_INDEX_TABLESPACE VARCHAR(128) Y TEMPORARY_TABLESPACE VARCHAR(4) Y CREATED DATETIME(6) Y PROFILE VARCHAR(128) Y INITIAL_RSRC_CONSUMER_GROUP VARCHAR(1) Y EXTERNAL_NAME VARCHAR(1) Y PASSWORD_VERSIONS INTEGER Y EDITIONS_ENABLED VARCHAR(1) Y AUTHENTICATION_TYPE VARCHAR(19) Y NOWDATE DATETIME(0) Y

1.4 list查看历史命令

SQL> list 1* select * from v$database;

1.5 变量和获取输入

--- 设置变量和引用变量 SQL> select count(1) from &target_object; 输入 target_object的值:dba_users 原值 1:select count(1) from &target_object; 新值 1:select count(1) from dba_users; COUNT(1) -------------------- 9 SQL> def target_object=dba_users SQL> select count(1) from &target_object; 原值 1:select count(1) from &target_object; 新值 1:select count(1) from dba_users; COUNT(1) -------------------- 9 -- 设置sql脚本变量和使用 SQL> host type D:\select_object.sql select count(1) from &1; SQL> start D:\select_object.sql dba_users SQL> select count(1) from &1; 原值 1:select count(1) from &1; 新值 1:select count(1) from dba_users; COUNT(1) -------------------- 9

1.6 缓存清理

cl col # 清理所有的变量信息 cl screen # 清理终端屏幕信息 col sql # 清理本地sql缓存信息

二、表空间管理

2.1 创建、重命名、删除和设置在线离线

-- 创建自动增长表空间 CREATE TABLESPACE "AGILE_DATA" DATAFILE '/dm8/data/DMDB/AGILE.DBF' SIZE 128 AUTOEXTEND ON NEXT 10 MAXSIZE 200 CACHE = NORMAL; -- 创建非自动增长表空间 CREATE TABLESPACE "AGILE_INDEX" DATAFILE '/dm8/data/DMDB/AGILE_INDEX.DBF' SIZE 200 AUTOEXTEND OFF CACHE = NORMAL;

2.2 重命名表空间

alter tablespace AGILE rename to AGILE_DATA;

2.3 删除表空间

drop tablespace AGILE_INDEX;

2.4 在线离线表空间

alter tablespace agile_data offline; alter tablespace agile_data online;

2.5 查询表空间对应的物理文件

SELECT ts.NAME, df.PATH FROM V$TABLESPACE ts, V$DATAFILE AS df WHERE ts.ID = df.GROUP_ID;

2.6 查询表空间的使用大小

SELECT TS_NAME AS 表空间名, ROUND(SUM(TOTAL) / 1048576, 2) AS "总大小_MB", ROUND(SUM(USED) / 1048576, 2) AS "已使用大小_MB", CONCAT(CAST(ROUND(SUM(USED) * 100.0 / SUM(TOTAL), 2) AS VARCHAR), '%') AS 使用率 FROM ( SELECT UPPER(df.TABLESPACE_NAME) AS TS_NAME, df.BYTES AS TOTAL, df.BYTES - fs.BYTES AS USED FROM DBA_DATA_FILES df INNER JOIN DBA_FREE_SPACE fs ON df.TABLESPACE_NAME = fs.TABLESPACE_NAME AND df.FILE_ID = fs.FILE_ID ) group by TS_NAME;

2.7 表空间增加数据文件

ALTER TABLESPACE agile_data ADD DATAFILE '/dm8/data/DMDB/AGILE2.DBF' SIZE 2000; ALTER TABLESPACE agile_data ADD DATAFILE '/dm8/data/DMDB/AGILE3.DBF' SIZE 1000;

2.8 表空间删除数据文件

ALTER TABLESPACE agile_data DROP DATAFILE '/dm8/data/DMDB/AGILE3.DBF';

删除表空间中数据文件时必须遵守文件 ID 从大到小的原则。先从具有最大文件 ID 的数

据文件开始,且表空间中文件 ID 为零的数据文件不能被删除。

2.9 数据文件增加大小

ALTER TABLESPACE agile_data RESIZE DATAFILE '/dm8/data/DMDB/AGILE2.DBF' TO 1200;

2.10 数据文件减少大小

ALTER TABLESPACE agile_data RESIZE DATAFILE '/dm8/data/DMDB/AGILE3.DBF' TO 800;

三、用户与权限管理

3.1 创建用户

CREATE USER AGILE_APP IDENTIFIED BY "123456Aa_" DEFAULT TABLESPACE AGILE_DATA DEFAULT INDEX TABLESPACE AGILE_INDEX; GRANT PUBLIC,RESOURCE,SOI,VTI TO AGILE_APP;

3.2 删除用户

drop user AGILE_APP; # 删除用户 drop user AGILE_APP cascade; # 级联删除,把用户以及用户下的所有表、视图等对象全部删除

3.3 修改用户口令

alter user "agile_app" identified by "Aa12345678_";

3.4 查询用户默认表空间、默认索引表空间、用户锁定状态等信息

SELECT USERNAME AS 用户名, DEFAULT_TABLESPACE AS 默认数据表空间, DEFAULT_INDEX_TABLESPACE AS 默认索引表空间, TEMPORARY_TABLESPACE AS 临时表空间, DECODE(ACCOUNT_STATUS,'OPEN','正常','LOCKED','锁定','未知') AS 用户状态, CREATED AS 创建时间 FROM DBA_USERS;

3.5 查询查看用户对象统计信息

SELECT S2.NAME AS 模式名, S1.TYPE$ AS 主类型, S1.SUBTYPE$ AS 子类型, COUNT(*) AS 对象数量 FROM SYSOBJECTS S1, SYSOBJECTS S2 WHERE S1.SCHID = S2.ID AND S2.TYPE$ = 'SCH' GROUP BY S2.NAME, S1.TYPE$, S1.SUBTYPE$ ORDER BY S2.NAME, S1.TYPE$, S1.SUBTYPE$;

3.6 查看用户占用的空间大小

SELECT USER_USED_SPACE('agile_app');

3.7 查看用户占用表空间大小

SELECT USERNAME AS 用户名, USER_USED_SPACE(USERNAME) * PAGE / 1024.0 / 1024.0 AS "用户占用空间(MB)" FROM DBA_USERS ORDER BY 2 DESC;

四、表管理

4.1 创建表

-- 创建表1 CREATE TABLE "AGILE_APP"."test1" ( "id" INT NOT NULL, "name" VARCHAR(50) NOT NULL, "size" VARCHAR(50), NOT CLUSTER PRIMARY KEY("id", "name") USING INDEX TABLESPACE "AGILE_INDEX" ) STORAGE(ON "AGILE_DATA", CLUSTERBTR); -- 创建表2 CREATE TABLE "AGILE_APP"."test2" ( "id" INT NOT NULL, "tname" VARCHAR(50), "fname" VARCHAR(50), "connect" VARCHAR(50), CLUSTER KEY("tname", "fname"), NOT CLUSTER PRIMARY KEY("id") USING INDEX TABLESPACE "AGILE_INDEX" ) STORAGE(ON "AGILE_DATA", CLUSTERBTR);

4.2 删除表

DROP TABLE employee; DROP TABLE IF EXISTS employee; DROP TABLE employee CASCADE; # 如果要删除的表被其他表引用,即其他表的外键引用了表的任何主键或唯一键,则需要在DROP TABLE语句中包含CASCADE选项

4.3 清空表

TRUNCATE TABLE EMPLOYEE; # 快速清空表数据,但保留表结构和存储空间分配(如数据文件、簇等),不可以回滚 TRUNCATE TABLE EMPLOYEE PURGE; # 彻底清空表数据并立即释放存储空间,同时清除表的元数据依赖(如索引、约束等),不可以回滚

4.4 修改表的列

ALTER TABLE "AGILE_APP"."test2" ALTER COLUMN "connect" RENAME TO "connect_new"; ALTER TABLE "AGILE_APP"."test2" ADD COLUMN "address" VARCHAR(50); ALTER TABLE "AGILE_APP"."test2" MODIFY "connect_new" TEXT NULL; ALTER TABLE "AGILE_APP"."test2" DROP "connect";

4.5 内容的增删改查

update AGILE_APP."test2" set "connect"='202505091710' where "id"=13412341; commit; delete from AGILE_APP."test2" where "id"=13412341; commit;

4.6 查看表的定义语句

SQL> SP_TABLEDEF('AGILE_APP','test2'); 行号 COLUMN_VALUE ---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 CREATE TABLE "AGILE_APP"."test2" ( "id" INT NOT NULL, "tname" VARCHAR(50), "fname" VARCHAR(50), "connect" VARCHAR(50), CLUSTER KEY("tname", "fname"), NOT CLUSTER PRIMARY KEY("id") USING INDEX TABLESPACE "AGILE_INDEX" ) STORAGE(ON "AGILE_DATA", CLUSTERBTR) ; 已用时间: 2.021(毫秒). 执行号:35000.

4.7 查看表的使用页面数

-- 已分配给表的页面数 SQL> SELECT table_used_space('AGILE_APP','test2'); -- 行号 TABLE_USED_SPACE('AGILE_APP','test2') ---------- ------------------------------------- 1 1872 -- 表已使用的页面数 SQL> SELECT table_used_pages('AGILE_APP','test2'); 行号 TABLE_USED_PAGES('AGILE_APP','test2') ---------- ------------------------------------- 1 1868

4.8 查看表占用的物理大小

SELECT S2.NAME AS SCHEMA_NAME, S1.NAME AS TABLE_SPACE, TABLE_USED_SPACE(S2.NAME,S1.NAME) * PAGE /1024.0/1024.0 AS PHYSICS_SIZW_MB FROM SYSOBJECTS S1, SYSOBJECTS S2 WHERE S1.SCHID = S2.ID AND S1."SUBTYPE$" = 'UTAB' AND S2."TYPE$" = 'SCH' ORDER BY 3 DESC;

五、索引管理

5.1 创建非聚集索引

CREATE INDEX idx_test1_size ON AGILE_APP."test1"("size") TABLESPACE AGILE_INDEX;

5.2 查询所有的索引信息

select owner,segment_name,TABLESPACE_NAME,bytes/1024/1024 from SYS.DBA_SEGMENTS where SEGMENT_TYPE='INDEX'; -- segment_name为定义的索引的名称

5.3 查询索引占用大小

SELECT segment_name AS index_name, bytes/1024/1024 AS size_mb FROM dba_segments WHERE owner = 'AGILE_APP' AND segment_name = upper('idx_test1_size') -- 替换为实际索引名(如主键索引名或自定义索引名) AND segment_type = 'INDEX';

5.4 重建索引

-- 查询资源对象id select OBJECT_ID from sys.DBA_OBJECTS where OBJECT_TYPE='INDEX' and OBJECT_NAME=upper('idx_test1_size') and OWNER='AGILE_APP'; -- 查询结果为33555516 -- 重建索引 SP_REBUILD_INDEX('AGILE_APP', 33555516);

5.5 删除索引

DROP INDEX AGILE_APP."idx_test1_size";

六、日志和备份管理

6.1 查询重做日志信息

SELECT * FROM V$RLOG; --查看日志空间信息 SELECT * FROM V$RLOGFILE; --RLOG 文件信息 SELECT * FROM V$LOG_HISTORY; --日志文件切换历史

6.2 查询默认备份目录

select * from v$dm_ini where PARA_NAME='BAK_PATH';

6.3 查询归档文件

select arch_name, arch_type, arch_dest from v$dm_arch_ini; select arch_mode from v$database;

6.4 开启本地归档

-- 1. 进入MOUNT状态并开启归档模式 ALTER DATABASE MOUNT; ALTER DATABASE ARCHIVELOG; -- 2. 添加本地归档路径 ALTER DATABASE ADD ARCHIVELOG 'DEST = /dm8/arch/arch_local_02.log, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048'; ALTER DATABASE ADD ARCHIVELOG 'DEST = /dm8/arch/arch_local_03.log, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048'; -- 3. 切换为OPEN状态 ALTER DATABASE OPEN;

6.5 查询所有的备份信息

SELECT BACKUP_NAME AS 备份名, BACKUP_PATH AS 备份路径, CASE WHEN TYPE = 0 THEN '完全备份' WHEN TYPE = 1 THEN '增量备份' WHEN TYPE = 3 THEN '归档备份' END AS 备份类型, BACKUP_TIME AS 备份时间 FROM V$BACKUPSET;

6.6 联机完全备份

-- 生成到默认路径 BACKUP DATABASE FULL BACKUPSET; BACKUP DATABASE FULL BACKUPSET 'db_full_bak'; -- 指定路径 BACKUP DATABASE full BACKUPSET '/dm8/backup_new/202505121348';

6.7 联机增量备份

-- 差异增量 BACKUP DATABASE INCREMENT BACKUPSET 'db_incr_bak_202505121551'; -- 指定基备份路径 BACKUP DATABASE INCREMENT BASE ON BACKUPSET '/dm8/backup_new/202505121348' BACKUPSET 'db_incr_bak_202505121552';

6.8 dmrman脱机备份和还原

-- 备份 ./dmrman BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' FULL TO db_offline_bak; -- 还原 ./dmrman RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/backup/DB_DAMENG_FULL_20250512_135423_987587'; RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/backup/DB_DAMENG_FULL_20250512_135423_987587'; RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;

6.9 联机备份表空间

-- 完全备份表空间MAIN BACKUP TABLESPACE MAIN BACKUPSET 'ts_main_bak'; -- 增量备份(需存在基备份) BACKUP TABLESPACE MAIN INCREMENT BACKUPSET 'ts_main_incr';

6.10 脱机还原表空间

./dmrman RESTORE TABLESPACE MAIN FROM BACKUPSET 'ts_main_bak'; RECOVER TABLESPACE MAIN FROM BACKUPSET 'ts_main_bak';

6.11 联机备份表

BACKUP TABLE TAB_01 BACKUPSET 'tab_bak_01';

6.12 联机还原表

RESTORE TABLE TAB_01 FROM BACKUPSET 'tab_bak_01';

6.13 备份归档日志

-- 备份所有归档 BACKUP ARCHIVELOG ALL BACKUPSET 'arch_bak_20250512'; -- 按时间/LSN范围备份 BACKUP ARCHIVELOG LSN BETWEEN 50000 AND 60000 BACKUPSET 'arch_bak_20250512_range';

6.14 还原归档日志

./dmrman RESTORE ARCHIVELOG FROM BACKUPSET '/dm8/data/backup/arch_bak_20250512' TO ARCHIVEDIR '/tmp/arch_new';

6.15 校验备份集

SF_BAKSET_CHECK('DISK', '/dm8/data/backup/DB_DAMENG_FULL_20250512_142007_962153');

6.16 删除备份集

-- 删除单个备份 SF_BAKSET_REMOVE('DISK', '/dm8/data/backup/DB_DAMENG_FULL_20250512_142007_96215', 1); -- 批量删除旧备份(保留最近2个完全备份) SF_BAKSET_REMOVE_BATCH_N('DISK', NOW(), 1, NULL, 2);
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服