1表空间及数据文件
1.1表空间的介绍
在DM数据库中,表空间由一个或者多个数据文件组成。DM数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。
在创建 DM 数据库时,会自动创建 4 个表空间:SYSTEM表空间、ROLL表空间、MAIN表空间和TEMP表空间。
(1).SYSTEM 表空间存放了有关DM数据库的字典信息,用户不能在SYSTEM 表空间创建表和索引。SYSTEM表空间又称为系统表空间。
(2).ROLL表空间完全由DM数据库自动维护,用户无需干预。该表空间用来存放事务运行过程中执行DML操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图。
(3).MAIN表空间在初始化库的时候,就会自动创建一个大小为128M的数据文件MAIN.DBF,以及一个HMAIN目录作为HUGE数据文件路径,因此MAIN表空间为混合表空间。在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN表空间为用户默认的表空间。
(4).TEMP 表空间完全由DM数据库自动维护。当用户的SQL语句需要磁盘空间来完成某个操作时,DM数据库会从TEMP表空间分配临时段。如创建索引、无法在内存中完成的排序操作、SQL语句中间结果集以及用户创建的临时表等都会使用到TEMP表空间。
1.2数据文件
数据文件以dbf为扩展名,它是数据库中最重要的文件类型,一个DM数据文件对应磁盘上的一个物理文件或者达梦分布式数据库中的一个逻辑文件,数据文件是真实数据存储的地方,每个数据库至少有一个与之相关的数据文件。在实际应用中,通常有多个数据文件。
2数据文件删除恢复
2.1前提条件
LINUX系统中被删除的文件,在一定时间限制内,其句柄没有被关闭。不能重启服务器和数据库服务。
2.2测试前准备
1.创建表空间
CREATE TABLESPACE DMTEST DATAFILE '/opt/dmdbms/data/DAMENG/DMTEST.DBF' SIZE 128 AUTOEXTEND ON MAXSIZE UNLIMITED;
2.创建用户
CREATE USER "TEST" IDENTIFIED BY "ADMIN1234" DEFAULT TABLESPACE "DMTEST" DEFAULT INDEX TABLESPACE "DMTEST";
GRANT "PUBLIC","RESOURCE","SOI","SVI","VTI" TO "TEST";
3.创建表
CREATE TABLE TEST.TABLE_1(ID INT);
4.插入数据
INSERT INTO TEST.TABLE_1 VALUES(1);
INSERT INTO TEST.TABLE_1 VALUES(2);
COMMIT;
5.查询表
SELECT * FROM TEST.TABLE_1;
5.查询数据文件
SELECT TABLESPACE_NAME, FILE_NAME, STATUS FROM DBA_DATA_FILES;
2.3删除并恢复数据文件
1.删除数据文件
[dmdba@redhat31 DAMENG]$ rm DMTEST.DBF -fr
2.检查数据文件
SQL> call SP_FILE_SYS_CHECK();
DMSQL 过程已成功完成
已用时间: 2.597(毫秒). 执行号:601.
3.查询数据文件
SQL> SELECT TABLESPACE_NAME, FILE_NAME, STATUS FROM DBA_DATA_FILES;
4.修复表空间
SQL> CALL SP_TABLESPACE_PREPARE_RECOVER('DMTEST');
DMSQL 过程已成功完成
已用时间: 0.883(毫秒). 执行号:603.
5.查看数据库进程
[dmdba@redhat31 DAMENG]$ ps aux |grep dm.ini
6.根据进程号查看DBF文件
[dmdba@redhat31 DAMENG]$ ll /proc/7916/fd/* |grep DBF
7.复制已删除文件
[dmdba@redhat31 DAMENG]$ cp /proc/7916/fd/45 /opt/dmdbms/data/DAMENG/DMTEST.DBF
8.恢复表空间
SQL> call sp_tablespace_recover('DMTEST');
DMSQL 过程已成功完成
已用时间: 15.384(毫秒). 执行号:604.
9.检查数据文件
SQL> call SP_FILE_SYS_CHECK();
DMSQL 过程已成功完成
已用时间: 2.461(毫秒). 执行号:605.
10.查询数据文件
SQL> SELECT TABLESPACE_NAME, FILE_NAME, STATUS FROM DBA_DATA_FILES;
注:测试删除MAIN.DBF、TEMP.DBF、ROLL.DBF、SYSTEM.DBF均可以恢复。
3表空间文件失效检查
LINUX操作系统中,被进程打开的文件仍可以在OS系统中被删除,因此存在 DM数据文件可能被误删的风险。如果数据文件被删除,DM系统能够及时检测出来,并立刻停止对其继续使用并通知用户。
在dm.ini中参数FIL_CHECK_INTERVAL的值指定DM系统检查数据文件是否仍存在的时间间隔。将其设为0表示不进行检查。
也可以通过系统过程SP_FILE_SYS_CHECK()来手动的进行检查。
系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除。
文章
阅读量
获赞