数据库存储管理是数据库管理和运维中非常重要的一部分,也是日常运维中很常用的部分。进行数据库存储管理是确保数据库系统高效、稳定、安全运行的关键。
做好数据库的存储管理有很多优点:
优化数据库性能
高效利用存储资源
保障数据安全与可靠性
支持数据库扩展与升级
降低运维成本
满足合规与审计要求
提升系统稳定性
本次将介绍DM8数据库的存储管理内容,包含表空间的管理、数据文件的管理、重做日志文件的管理、回滚空间的管理和控制文件的管理。
表空间的管理操作需要 DM 服务器处于打开状态下。
DM 数据库中的表空间可以分为普通表空间和混合表空间。使用 <HUGE 路径子句 > 创建的表空间为混合表空间,未使用 <HUGE 路径子句 > 创建的表空间即为普通表空间。普通表空间只能存储普通表(非 HUGE 表);而混合表空间既可以存储普通表又可以存储 HUGE 表。
语法
CREATE TABLESPACE [IF NOT EXISTS] <表空间名> <数据文件子句>[<数据页缓冲池子句>][<存储加密子句>][<指定ASM存储子句>][<HUGE路径子句>][<STORAGE子句>]
<STORAGE子句> ::=
STORAGE (ON <RAFT组名>)|
STORAGE (ON <BP组名>)
<数据文件子句> ::= DATAFILE <文件说明项>{,<文件说明项>}
<文件说明项> ::= <文件路径> [ MIRROR <文件路径>] SIZE <文件大小>[<自动扩展子句>]
<自动扩展子句> ::= AUTOEXTEND <ON [<每次扩展大小子句>][<最大大小子句>] |OFF>
<每次扩展大小子句> ::= NEXT <扩展大小>
<最大大小子句> ::= MAXSIZE <文件最大大小> |
UNLIMITED
<数据页缓冲池子句> ::= CACHE = <缓冲池名>
<存储加密子句> ::= ENCRYPT WITH <加密算法> <密码子句>
<密码子句>::=BY <加密密码> |
BY WRAPPED <加密密码密文>
<指定ASM存储子句>::= [<条带化类型子句>][<镜像类型子句>]
<条带化类型子句> ::= STRIPING<0|32|64|128|256>
<镜像类型子句> ::= HIGH | NORMAL | EXTERNAL
<HUGE路径子句> ::= WITH HUGE PATH <HUGE数据文件路径>
示例
创建名为 bookshop 的表空间,并指定该空间上拥有 2 个数据文件,每个数据文件的大小为 128MB。
CREATE TABLESPACE bookshop DATAFILE 'd:\bookshop1.dbf' SIZE 128, 'd:\bookshop2.dbf' SIZE 128;
理论上最多允许有 65535 个表空间,但用户允许创建的表空间 ID 取值范围为 0~32767,超过 32767 的只允许系统使用,ID 由系统自动分配,ID 不能重复使用,即使删除掉已有表空间,也无法重复使用已用 ID 号,也就是说只要创建 32768 次表空间后,用户将无法再创建表空间。
注意
表空间通过数据文件来扩展,表空间的大小等于构成该表空间的所有数据文件的大小之和。所以要扩展表空间可以通过添加新的数据文件或者扩展表空间中已有的数据文件完成。数据文件的添加和扩展可见下一节。
只可以删除用户创建的表空间并且只能删除未使用过的表空间。删除表空间时会删除其拥有的所有数据文件。
语法
DROP TABLESPACE [IF EXISTS] <表空间名>
示例
删除 bookshop 表空间
DROP TABLESPACE bookshop;
注意
可修改已存在的由用户创建的表空间的属性。
语法
ALTER TABLESPACE <表空间名> [ONLINE|OFFLINE|CORRUPT|<表空间重命名子句>|<数据
文件重命名子句>|<增加数据文件子句>|<修改文件大小子句>|<修改文件自动扩展子句>|<数据页缓冲池子句>|<DSC集群表空间负载均衡子句>|<增加HUGE路径子句>|<删除表空间文件>]
<表空间重命名子句> ::= RENAME TO <表空间名>
<数据文件重命名子句>::= RENAME DATAFILE <文件路径>{,<文件路径>} TO <文件路径>{,<文件路径>}
<增加数据文件子句> ::= ADD <数据文件子句>
<数据文件子句> ::= 参考3.4.1 表空间定义语句中的<数据文件子句>
<修改文件大小子句> ::= RESIZE DATAFILE <文件路径> TO <文件大小> [ON RAFT_NAME]
<修改文件自动扩展子句> ::= DATAFILE <文件路径>{,<文件路径>}[<自动扩展子句>]
<自动扩展子句> ::= 参考3.4.1 表空间定义语句中的<自动扩展子句>
<数据页缓冲池子句> ::= CACHE = <缓冲池名>
<DSC集群表空间负载均衡子句> ::= OPTIMIZE <DSC集群节点号>
<增加HUGE路径子句> ::= ADD HUGE PATH <HUGE数据文件路径>
<删除表空间文件>::=DROP DATAFILE <文件路径>
示例
修改 bookshop 表空间名为 books
ALTER TABLESPACE bookshop RENAME TO books;
注意
可以通过查询动态视图 V$TABLESPACE 得到系统中除 RLOG 表空间外其他所有表空间的信息,通过查询动态视图 V$DATAFILE 得到系统中除 RLOG 表空间外所有数据文件的信息。将两个动态视图以表空间 ID 为连接条件,通过以下查询可以得到表空间上对应的数据文件。
SELECT ts.NAME, df.PATH FROM V$TABLESPACE ts, V$DATAFILE AS df WHERE ts.ID = df.GROUP_ID;
LINUX 操作系统中,被进程打开的文件仍可以在 OS 系统中被删除,因此存在 DM 数据文件可能被误删的风险。如果数据文件被删除,DM 系统能够及时检测出来,并立刻停止对其继续使用并通知用户。
在 dm.ini 中参数 FIL_CHECK_INTERVAL 的值指定 DM 系统检查数据文件是否仍存在的时间间隔。将其设为 0 表示不进行检查。
也可以通过系统过程 SP_FILE_SYS_CHECK()来手动的进行检查。
系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除。
语法
SP_FILE_SYS_CHECK ();
示例
SP_FILE_SYS_CHECK ();
注意
该过程只在 LINUX 下有效。
LINUX 系统中被删除的文件,只要其句柄没有被关闭,可以在/proc/<pid>/fd 中找到其对应的文件副本。其中<pid>指打开该文件的进程 id。
利用该方法,结合 OS 命令,DM 提供失效文件的恢复方案如下:
语法
SP_TABLESPACE_PREPARE_RECOVER(<表空间名称>); SP_TABLESPACE_RECOVER(<表空间名>);
示例
恢复被删除的表空间bookshop
SP_TABLESPACE_PREPARE_RECOVER(bookshop); SP_TABLESPACE_RECOVER(bookshop);
注意
管理数据文件的操作需要 DM 服务器处于打开状态下。
移动数据文件的操作在 DM 服务器处于打开或配置状态下都可以进行。
可以在用户表空间中添加数据文件。添加的数据文件大小最小为 4096*页大小,如页大小为 8KB,则可添加的文件最小值为 4096*8kB=32MB。
语法
ALTER TABLESPACE <表空间名> ADD DATAFILE '<数据文件>' SIZE <数据文件大小>;
示例
在 bookshop 表空间中添加大小为 64M 的数据文件。
ALTER TABLESPACE bookshop ADD DATAFILE 'd:\book.dbf' SIZE 64;
注意
一个表空间中,数据文件和镜像文件的个数一起不能超过 INI 参数 TS_FIL_MAX_ID 设置的值。例如,如果创建表空间的时候已经指定了 1 个数据文件,那么添加数据文件的时候,最多只能添加 TS_FIL_MAX_ID-1 个文件了。
可以删除用户表空间中的数据文件。
语法
ALTER TABLESPACE <表空间名> DROP DATAFILE '<数据文件>';
示例
bookshop 表空间中的一个名为 book.dbf 的数据文件。
ALTER TABLESPACE bookshop DROP DATAFILE 'd:\book.dbf';
可以修改用户表空间中已存在的数据文件的大小。
语法
ALTER TABLESPACE <表空间名> RESIZE DATAFILE '<数据文件>' TO <修改后大小>;
示例
比如修改bookshop 表空间中数据文件 book.dbf 大小至 128MB。
ALTER TABLESPACE bookshop RESIZE DATAFILE 'd:\book.dbf' TO 128;
可以修改用户表空间中已存在数据文件的路径。
语法
ALTER TABLESPACE <表空间名> RENAME DATAFILE '<j旧数据文件>' TO '<新数据文件>';
示例
修改 bookshop 表空间中文件 book.dbf 的路径为 e:\ book.dbf
ALTER TABLESPACE bookshop RENAME DATAFILE 'd:\book.dbf' TO 'e:\book.dbf';
注意
待修改的数据文件所在表空间必须处于脱机状态并且只可修改用户创建的表空间中文件的路径。
可以为普通表空间添加 HUGE 数据文件路径将其升级为混合表空间,也可以为混合表空间添加 HUGE 数据文件路径。
语法
ALTER TABLESPACE <表空间名> ADD HUGE PATH '<文件路径>';
示例
为普通表空间 bookshop 添加 HUGE 数据文件路径 e:\HUGE,将 bookshop 升级为混合表空间。
ALTER TABLESPACE bookshop ADD HUGE PATH 'e:\HUGE';
注意
一个混合表空间最多可以添加 127 个 HUGE 数据文件路径。
管理重做日志文件需在服务器打开状态下。
添加的数据文件大小最小为 4096*页大小,如页大小为 8KB,则可添加的文件最小值为 4096*8kB=32MB。
语法
ALTER DATABASE ADD LOGFILE '<日志文件>' size <日志大小>;
示例
添加重做大小为 128MB 的重做日志文件 DAMENG03.log。
ALTER DATABASE ADD LOGFILE 'd:\DAMENG03.log' size 128;
可以扩展已有的重做日志文件的大小
语法
ALTER DATABASE RESIZE LOGFILE '<日志文件>' TO <日志大小>;
示例
扩展重做日志文件 DAMENG03.log 到 256M。
ALTER DATABASE RESIZE LOGFILE 'd:\DAMENG03.log' to 256;
可以删除已有的重做日志文件。
语法
ALTER DATABASE DROP LOGFILE '<日志文件>';
示例
删除重做日志文件 DAMENG03.log。
ALTER DATABASE DROP LOGFILE 'd:\DAMENG03.log';
注意
在删除重做日志文件时,指定的文件需要满足以下的一些条件才能够成功删除:
回滚表空间的管理和用户表空间的管理基本是一样的,区别是回滚表空间的空间名固定为 ROLL,不可修改。可增加和扩展回滚空间中的回滚文件,设置回滚空间的扩展属性。操作同普通表空间一致。
回滚文件的路径记录在控制文件里面,可以使用 dmctlcvt 工具在 DM 服务器关闭的状态下对控制文件进行修改。使用 dmctlcvt 工具将控制文件转换为文本文件,编辑文本文件中要修改的文件的路径后再使用 dmctlcvt 工具将文本文件转换为控制文件即可。
首先转换控制文件到文本文件:
dmctlcvt c2t D:\dm.ctl D:\ctl.txt
编辑 ctl.txt 文本文件中 fil_path=d:\roll.dbf 为 fil_path=e:\ roll.dbf,保存文本文件。复制 d:\roll.dbf 文件为 e:\ roll.dbf。
最后转换文本文件到控制文件:
dmctlcvt t2c D:\ctl.txt D:\dm.ctl
这种修改文件路径的方法也可用于重做日志文件,SYSTEM 表空间文件等路径的修改。
控制文件主要通过dm.ini参数来管理。
文章
阅读量
获赞
