查看数据文件:
SQL> select GROUP_ID,PATH,ID,STATUS$ from v$datafile;
行号 GROUP_ID PATH ID STATUS$
---------- ----------- ---------------------------------------------------- ----------- -----------
1 0 /home/dmdba/dmdbms/data/ECARD/SYSTEM.DBF 0 1
2 1 /home/dmdba/dmdbms/data/ECARD/ROLL.DBF 0 1
3 3 /home/dmdba/dmdbms/data/ECARD/TEMP.DBF 0 1
4 4 /home/dmdba/dmdbms/data/ECARD/MAIN.DBF 0 1
5 5 /home/dmdba/dmdbms/data/ECARD/DMHR.DBF 0 1
6 6 /home/dmdba/dmdbms/data/ECARD/V8_TABLESPACE.dbf 0 1
7 7 /home/dmdba/dmdbms/data/ECARD/OPENPLARTFORM_DATA.dbf 0 1
8 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_01.dbf 0 1
9 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_02.dbf 1 1
10 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_03.dbf 2 1
11 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_04.dbf 3 1
行号 GROUP_ID PATH ID STATUS$
---------- ----------- ------------------------------------------------- ----------- -----------
12 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_05.dbf 4 1
12 rows got
查看重做日志文件:
SQL> select path from v$rlogfile;
行号 PATH
---------- -----------------------------------------
1 /home/dmdba/dmdbms/data/ECARD/ECARD01.log
2 /home/dmdba/dmdbms/data/ECARD/ECARD02.log
3 /home/dmdba/dmdbms/data/ECARD/ECARD03.log
已用时间: 0.730(毫秒). 执行号:1308.
SQL> select path,rlog_size/1024/1024 from v$rlogfile;
行号 PATH RLOG_SIZE/1024/1024
---------- ----------------------------------------- --------------------
1 /home/dmdba/dmdbms/data/ECARD/ECARD01.log 256
2 /home/dmdba/dmdbms/data/ECARD/ECARD02.log 256
3 /home/dmdba/dmdbms/data/ECARD/ECARD03.log 256
已用时间: 0.989(毫秒). 执行号:1309.
查看控制文件:
SQL> select para_name,para_value from v$dm_ini where para_name= 'CTL_PATH';
行号 PARA_NAME PARA_VALUE
---------- --------- ------------------------------------
1 CTL_PATH /home/dmdba/dmdbms/data/ECARD/dm.ctl
已用时间: 10.951(毫秒). 执行号:1313.
SQL> select para_name,para_value from v$dm_ini where para_name='CTL_BAK_PATH';
行号 PARA_NAME PARA_VALUE
---------- ------------ -------------------------------------
1 CTL_BAK_PATH /home/dmdba/dmdbms/data/ECARD/ctl_bak
已用时间: 4.678(毫秒). 执行号:1314.
SQL> select para_name,para_value from v$dm_ini where para_name='CTL_BAK_NUM';
行号 PARA_NAME PARA_VALUE
---------- ----------- ----------
1 CTL_BAK_NUM 10
已用时间: 6.657(毫秒). 执行号:1315.
SQL> select para_name,para_value from v$dm_ini where para_name in ('CTL_PATH','CTL_BAK_PATH','CTL_BAK_NUM');
DM 默认预定义 SYSTEM、ROLL、MAIN、TEMP、HMAIN 五个表空间。
系统表空间,存放数据字典等信息(表、字段、视图等对象的定义、用户角色权限信息等,部分隐含参数写入 SYSTEM 表空间),SYSTEM 表空间自动扩展不允许关闭。
回滚表空间,存放回滚页,数据库中的 DML 操作对应都会生成 redo 和 undo,undo 信息放入 ROLL 表空间对应的数据文件中,redo 信息写入联机日志文件,用于保证数据的一致性。
ROLL 回滚段数据包含 Active、unexpired、expired 三种状态。遇到查询记录过旧的错误(等同于 oracle 的快照过旧的错误)。
解决方法:
1.增大 undo_retention(回滚段的保留时长), 及时、分段提交。扩大 ROLL 表空间。
2.查询时间过长导致,可以考虑优化查询
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE,DESCRIPTION from v$parameter where name='UNDO_RETENTION';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- -------------- ---- ---------- ---------- ----------
DESCRIPTION
----------------------------------------------------------------------------------------
1 UNDO_RETENTION SYS 180.000000 180.000000 90.000000
Maximum retention time in seconds for undo pages since relative transaction is committed
用户默认表空间,当创建用户时,如果为指定用户的默认表空间,则 MAIN 为用户的默认表空间。相当于 Oracle 的 USERS 表空间。
临时表空间,存放临时表数据、临时结果集等,当大量的数据排序或创建索引等占用临时表空间。DM 中临时表空间由参数 TEMP_SIZE 指定,不支持单独创建临时表空间。
达梦 TEMP 表空间,数据库启动时会按照如下参数重建 TEMP 表空间。
SQL> select name, value, type from v$parameter t where name like 'TEMP%';
行号 NAME VALUE TYPE
---------- ---------------- ---------------------- ---------
1 TEMP_PATH /dm8/dmdbms/data/ECARD READ ONLY
2 TEMP_SIZE 10 IN FILE
3 TEMP_SPACE_LIMIT 0 SYS
相关参数说明:
TEMP_SIZE:临时表空间初始大小
TEMP_PATH: 临时表空间路径
TEMP_SPACE_LIMIT:临时表空间的空间限制,0 表示不限制。
收缩 TEMP 表空间的方法:
1.重启数据库,TEMP 表空间数据文件会重建。
2.在线收缩临时表空间使用 SP_TRUNC_TS_FILE 函数
SQL> select id,name from v$ifun where name='SP_TRUNC_TS_FILE';
行号 ID NAME
---------- ----------- ----------------
1 1298 SP_TRUNC_TS_FILE
SQL> select * from v$ifun_arg where id=1298;
行号 ID NAME SEQ DATA_TYPE LEN PREC IO_TYPE COMMENT$
---------- ----------- ------- ----------- ---------------- ----------- ----------- ------- --------
1 1298 RVAL -1 UNKNOWN DATATYPE 0 0 RETURN NULL
2 1298 TS_ID 0 INTEGER 4 0 IN NULL
3 1298 FILE_ID 1 INTEGER 4 0 IN NULL
4 1298 TO_SIZE 2 INTEGER 4 0 IN NULL
调大temp表空间的方法:
--可以直接修改temp文件的大小,但重启后会重建为temp_size指定的大小
alter tablespace temp resize datafile 'TEMP.DBF' to 50;
--永久修改大小方法
alter system set 'TEMP_SIZE' =50 spfile;
HUGE 表的默认表空间(HTS 表空间)
创建名为tbs1的表空间,并指定该空间上拥有 2个数据文件,每个数据文件的大小为50M ,设置自动扩展
-- 达梦表空间数据文件单位默认为M,不需要带单位,路径可以省略,使用system_path的路径
create tablespace tbs1 datafile '/home/dmdba/dmdbms/data/ECARD/TBS101.DBF' size 50 autoextend on next 10 maxsize 10240,'/home/dmdba/dmdbms/data/ECARD/TBS102.DBF' size 50 autoextend on next 10 maxsize 10240;
DM 预定义表空间不支持重命名,自定义表空间支持重命名。
alter tablespace tbs1 rename to tbs1_new;
用户表空间有联机和脱机两种状态。系统表空间、回滚表空间、重做日志表空间和临时文件表空间不允许
脱机。设置表空间状态为脱机状态时,如果该表空间有未提交的事务,则脱机失败报错。 脱机后可对表
空间的数据进行备份.
alter tablespace tbs1 offline;
alter tablespace tbs1 online;
用户表空间可以切换使用的数据缓冲区,系统表空间、回滚表空间、重做日志表空间和临时文件表空间不
允许修改数据缓冲区。可以使用的数据缓冲区有 NORMAL 和 KEEP。表空间修改成功后,并不会立即生效,
而是需要服务器重启。缓冲池名 KEEP 是达梦的保留关键字,使用时必须加双引号。
SQL> alter tablespace tbs1_new cache="KEEP";
SQL> select name,cache from v$tablespace;
SQL> alter tablespace tbs1_new cache="NORMAL";
只可以删除用户创建的表空间并且只能删除未使用过的表空间,删除表空间时会删除其拥有的所有数据文件。
drop tablespace tbs1;
1.添加数据文件
--可以使用相对路径
alter tablespace tbs1 add datafile 'TBS103.DBF' size 50;
2.设置数据文件自动扩展
alter tablespace tbs1 add datafile 'TBS103.DBF' autoextend on;
3.修改数据文件大小
--dm老版本不支持将数据文件改小,2022年9月份以后的版本支持
alter tablespace tbs1 RESIZE DATAFILE 'TBS103.DBF' TO 100;
4.迁移自定义表空间数据文件
alter tablespace tbs offline;
--Oracle19c之前,需要手动拷贝数据文件,然后再进行rename
alter TABLESPACE tbs RENAME DATAFILE 'TBS01.DBF' TO '/dm8/data/DM/TBS/TBS01.DBF';
alter TABLESPACE tbs RENAME DATAFILE 'TBS02.DBF' TO '/dm8/data/DM/TBS/TBS02.DBF';
alter tablespace tbs online;
相关数据字典:
select * from dba_tablespaces;
select * from DBA_DATA_FILES;
select * from v$tablespace;
select * from v$datafile;
--查询数据文件剩余空间
select * from DBA_FREE_SPACE;
表空间和数据文件对应关系查询:
SQL> SELECT df.GROUP_ID,ts.NAME, df.PATH FROM V$TABLESPACE AS ts, V$DATAFILE AS df WHERE ts.ID= df.GROUP_ID;
行号 GROUP_ID NAME PATH
---------- ----------- ------ ---------------------------------
1 0 SYSTEM /dm8/dmdbms/data/ECARD/SYSTEM.DBF
2 7 TEST /dm8/dmdbms/data/ECARD/TEST02.DBF
3 7 TEST /dm8/dmdbms/data/ECARD/TEST01.DBF
4 5 DMHR /dm8/dmdbms/data/ECARD/DMHR.DBF
5 4 MAIN /dm8/dmdbms/data/ECARD/MAIN.DBF
6 3 TEMP /dm8/dmdbms/data/ECARD/TEMP.DBF
7 1 ROLL /dm8/dmdbms/data/ECARD/ROLL.DBF
7 rows got
-- file_id是针对某个表空间内部排序的
SQL> select TABLESPACE_NAME,FILE_ID,FILE_NAME from dba_data_files order by 1,2;
行号 TABLESPACE_NAME FILE_ID FILE_NAME
---------- --------------- ----------- ---------------------------------
1 DMHR 0 /dm8/dmdbms/data/ECARD/DMHR.DBF
2 MAIN 0 /dm8/dmdbms/data/ECARD/MAIN.DBF
3 ROLL 0 /dm8/dmdbms/data/ECARD/ROLL.DBF
4 SYSTEM 0 /dm8/dmdbms/data/ECARD/SYSTEM.DBF
5 TEMP 0 /dm8/dmdbms/data/ECARD/TEMP.DBF
6 TEST 0 /dm8/dmdbms/data/ECARD/TEST01.DBF
7 TEST 1 /dm8/dmdbms/data/ECARD/TEST02.DBF
7 rows got
重做日志包含联机日志和归档日志(数据库在归档模式下才会产生归档日志文件)。
联机重做日志:存放 redo 信息,循环使用,不断覆盖,默认重做日志大小256M。联机日志 v$rlog 中记录有日志序列号(LSN: Log Sequence Number)。
DM 数据库联机日志自动切换,不能手工切换,无法删除重做日志。DM 联机日志没有日志组。
--建议所有日志大小一样
alter database resize logifle 'DAMENG01.log' to 500;
alter database resize logifle 'DAMENG02.log' to 500;
alter database add logfile 'DAMENG03.log' SIZE 500;
alter database mount;
alter database RENAME LOGFILE 'DM01.log' TO '/dm8/data/DM/REDO/DM01.log';
alter database RENAME LOGFILE 'DM02.log' TO '/dm8/data/DM/REDO/DM02.log';
alter database RENAME LOGFILE 'DM03.log' TO '/dm8/data/DM/REDO/DM03.log';
alter database open;
相关视图:
select * from v$rlogfile;
--cur_file表示正在使用的联机日志
select * from v$rlog;
查询redo日志相关信息:
--查询redo log日志信息
SQL> select group_id,file_id,path,rlog_size/1024/1024 M from v$rlogfile;
行号 GROUP_ID FILE_ID PATH M
---------- ----------- ----------- ---------------------------------- --------------------
1 2 0 /dm8/dmdbms/data/ECARD/ECARD01.log 256
2 2 1 /dm8/dmdbms/data/ECARD/ECARD02.log 256
文章
阅读量
获赞