一、表空间管理介绍
在 DM 数据库中,表空间由一个或者多个数据文件组成。
DM 数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。
DM数据库中的表空间可以分为普通表空间和混合表空间。普通表空间不能存储HUGE表, 而混合表空间可以同时存储普通(非 HUGE)表和 HUGE 表,其中 HUGE 数据文件存储在混合表空间定义中指定的 HUGE 数据文件路径下。可以通过为普通表空间增加指定HUGE 数据文 件路径将普通表空间升级为混合表空间。
在创建 DM 数据库时,会自动创建 4 个表空间:
SYSTEM 表空间、ROLL 表空间、MAIN 表空间和 TEMP 表空间。
-
SYSTEM 表空间存放了有关 DM 数据库的字典信息,用户不能在 SYSTEM 表空间创建表和索引。SYSTEM 表空间又称为系统表空间。
-
ROLL 表空间完全由 DM 数据库自动维护,用户无需干预。该表空间用来存放事务运 行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致 性视图。
-
MAIN 表空间在初始化库的时候,就会自动创建一个大小为 128M 的数据文件 MAIN.DBF,以及一个 HMAIN 目录作为 HUGE 数据文件路径,因此 MAIN 表空间为 混合表空间。在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表 空间为用户默认的表空间。
-
TEMP 表空间完全由 DM 数据库自动维护。当用户的 SQL 语句需要磁盘空间来完成 某个操作时,DM 数据库会从 TEMP 表空间分配临时段。如创建索引、无法在内存中 完成的排序操作、SQL 语句中间结果集以及用户创建的临时表等都会使用到 TEMP 表空间。
system
表空间:数据字典信息和动态性能视图 roll
表空间:数据库运行中的回滚记录 main
表空间:数据库的默认表空间。创建用户或者创建数据库对象时,没有指定表空间,就存放在默认表空间 main 表空间中 hamin
表空间:huge 表空间 temp
临时表空间,临时数据,排序都存储在临时表空间
每一个用户都有一个默认的表空间。
对于 SYS、SYSSSO、SYSAUDITOR 系统用户,默认的用户表空间是 SYSTEM;SYSDBA 的默认表空间为 MAIN;新创建的用户如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。
如果用户在创建表的时候, 指定了存储表空间 A,并且和当前用户的默认表空间 B 不一致时,表存储在用户指定的表空间 A 中,并且默认情况下,在这张表上面建立的索引也将存储在 A 中,但是用户的默认表空 间是不变的,仍为 B。 一般情况下,建议用户自己创建一个表空间来存放业务数据,或者将数据存放在默认的 用户表空间 MAIN 中。
二、创建表空间
windows端
需要开服务win+x
这里服务是关闭的需要手动打开
右键表空间新建
执行时候选中需要执行的语句
创建表空间以后本地磁盘会创建一个后缀为DBF的文件
Linux端
select tablespace_name from dba_tablespaces; select tablespace_name,file_name, status from dba_data_files order by 1; create tablespace dave //新建一个表空间 datafile '/dm8/data/cndba/DAVE01.DBF' size 32, //数据文件位置 size 默认文件大小为32兆 '/dm8/data/cndba/DAVE02.DBF' size 32; select tablespace_name, file_name, status from dba_data_files order by 1;
三、拓展表空间
表空间的扩展有两种方式:
-
扩展现有数据文件大小
-
增加新的数据文件
alter tablespace dave add datafile '/dm/dmdbms/data/cndba/DAVE03.DBF' size 32; //datafile=增加新的数据文件 size:默认文件大小 select tablespace_name,file_id, bytes/1024/1023 as "size",file_name from dba_data_files where tablespace_name='DAVE'; alter tablespace dave resize datafile'/dm8/data/cndba/DAVE01.DBF' to 64; select tablespace_name,file_id, bytes/1024/1023 as "size",file_name from dba_data_files where tablespace_name='DAVE';
修改数据文件拓展属性
create tablespace cndba datafile //修改表空间 cndba :表名 '/dm8/data/cndba/CNDBA01.DBF' size 32 autoextend on next 10 maxsize 200; //数据文件位置 alter tablespace cndba datafile '/dm8/data/cndba/CNDBA01.DBF' autoextend on next 10 maxsize 200; //autoextend:只要容量'n自动扩容每次扩容10兆最多200兆
修改表空间名
alter tablespace cndba rename to test_dba; select tablespace_name,file_id,bytes/1024/1023 as "size", file_name from dba_data_files where tablespace_name='DAVE';
移动数据文件
在表空间脱机状态下,可以修改数据文件的位置。
alter tablespace dave offline; alter tablespace dave rename datafile '/dm8/data/cndba/DAVE01.DBF' TO '/dm8/data/cndba/TESTDBA01.DBF'; alter tablespace dave online; select tablespace_name,file_id, bytes/1024/1023 as "size", file_name from dba_data_files where tablespace_name='DAVE';
注意:这里的移动是操作系统物理的上移动。
删除表空间
只可以删除用户创建的表空间并且只能删除未使用过的表空间。 删除表空间时会删除其拥有的所有数据文件。 drop tablespace dave;
四、对象管理
在DM数据库中用户管理主要涉及到三块:用户、权限、角色。
用户是用来连接数据库并进行相关操作的。
模式是一个用户拥有的所有数据库对象的集合,每个用户都有自己默认的模式,用户默认的模式名和用户名相同。权限是指执行特定类型SQL命令或访问其他模式对象的权利,它用于限制用户可执行的操作。
角色是将具有相同权限的用户组织在一起,这一组具有相同权限的用户称为角色。
select * from dba_roles; #查看所有用户的信息: select username,user_id,account_status from dba_users; #查看系统中所有用户对应的角色: select* from dba_role_privs; #创建用户: create user dave identified by "dameng123"; #对用户授权: grant public,resource to dave;
视图是从用户的实际需要中抽取出来的虚表。
CREATE VIEW PURCHASING.VENDOR_EXCELLENT AS SELECT*FROM PURCHASING.VENDOR WHERE CREDIT=1;
查看视图定义: select view_name,text from dba_views where view_name='VENDOR_EXCELLENT'; 编译视图: alter view purchasing.vendor_excellent compile; 删除视图: drop view purchasing.vendor_excellent;
#在原库dexp用户下创建2张测试表 conn dexp/dameng123 create table anqing as select * from sysobjects; create table huaining as select * from sysobjects; #导出这2张表: dexp dexp/dameng123 file=tables_01.dmp log=tables.log directory=/dm8/dmbak tables=anqing,huaining #将表导入到原用户dexp用户下: dimp dexp/dameng123 file=tables_01.dmp log=tables.log directory=/dm8/dmbak tables=anqing,huaining table_exists_action=replace #将表导入到dimp用户下: #注意这里连接用户必须是对象的原用户,然后加上remap schema=DEXP:DIMP就可以导入到新用户下: dimp dexp/dameng123 file=tables_01.dmp log=tables.log directory=/dm8/dmbak tables=anqing,huaining table_exists_action=replace remap_schema=DEXP:DIMP select count(1)from anqing; select count(1)from huaining;
基本概念
表空间与数据文件
DM 数据库的表空间是一个逻辑概念,其目的主要是为了方便数据库的管理,数据库的 所有对象在逻辑上都存放在某个表空间中,而物理上都存储在所属表空间的数据文件中。一 个表空间由一个或多个数据文件组成。
数据文件是数据库中最重要的文件类型,是真实数据存储的地方。DM 中数据文件的扩 展名为.DBF,分为系统默认生成的数据文件和用户自己创建的数据文件两类。需要注意的 是,HUGE 数据文件不同于一般数据文件,其扩展名为.DTA。
在创建 DM 数据库时,系统会自动创建 4 个表空间:SYSTEM 表空间、ROLL 表空间、 MAIN表空间和TEMP表空间。
DM自动为这几个自动创建的表空间分别生成默认的数据文件: SYSTEM.DBF、ROLL.DBF、MAIN.DBF 和 TEMP.DBF。
另外,DM 还会自动创建一个 HMAIN 目录,并将其路径作为 MAIN 表空间的 HUGE 数据文件路径,因此 MAIN 表空间为混合表空 间。
用户也可以创建自己的表空间,由用户创建的表空间统称为用户自定义表空间,在创建 自定义表空间时需要为表空间指定数据文件。
SYSTEM 表空间
存放了 DM 数据库全局字典信息和全局系统数据,是 DM 数据库能够正常运行的必要前 提,默认对应数据文件 SYSTEM.DBF。CREATE TABLE 等 DDL 操作会修改 SYSTEM 表空 间数据。
ROLL 表空间
存放 DM 数据库运行过程中产生的所有回滚记录。DM 中几乎所有的数据库修改操作都 会生成回滚记录,并保存在 ROLL 表空间的数据文件中。ROLL 表空间是数据库全局对象, 不论修改哪一个表空间,生成的回滚记录都是写入 ROLL 表空间,该表空间由系统自动维护, 默认数据文件为 ROLL.DBF。
TEMP 表空间
存放临时表数据以及数据库运行过程中产生的临时数据。在数据库运行过程中,SORT、 HASH JOIN 等操作都可能会生成临时结果集,它们作为临时数据存放在 TEMP 表空间中。 TEMP 表空间是数据库全局对象,由系统自动维护。若数据库重启,保存在 TEMP 表空间中 的所有数据都会丢失。TEMP 表空间的默认数据文件为 TEMP.DBF。
DM 的物理备份还原不支持:TEMP 表空间。
MAIN 表空间
MAIN 表空间为混合表空间。在创建用户时,如果没有指定默认表空间,系统自动指定 MAIN 表空间为用户默认的表空间。MAIN 表空间的默认数据文件为 MAIN.DBF,默认 HUGE 数据文件路径为 HMAIN 目录所在路径。
重做日志
重做日志,又叫 REDO 日志,忠实记录了所有物理页的修改,基本信息包括操作类型、 表空间号、文件号、页号、页内偏移、实际数据等。数据库中 INSERT、DELETE、UPDATE 等 DML 操作以及 CREATE TABLE 等 DDL 操作最终都会转化为对某些数据文件、某些数据 页的修改。因此,在系统故障重启时,通过重做 REDO 日志,可以将数据库恢复到故障时的 状态。
DM 数据库默认包含两个扩展名为 log 的日志文件,用来保存 REDO 日志,称为联机重做日志文件。这两个文件循环使用。任何数据页从内存缓冲区写入磁盘之前,必须保证其对 应的 REDO 日志已经写入到联机日志文件。
归档日志
DM 数据库可以在归档和非归档两种模式下运行。DM 支持多种归档方式。系统在归档模式下运行会更安全,当出现介质故障,如磁盘 损坏导致数据文件丢失、异常时,利用归档日志,系统可以恢复至故障发生的前一刻。因此, 为了保证归档日志文件和数据文件不同时出现问题,建议将归档目录与数据文件配置、保存 到不同的物理磁盘上。除了表备份还原,其他的联机备份与还原必须运行在归档模式下。
备份与恢复过程都依赖归档日志,归档日志是保证数据一致性和完整性的重要保障。配 有归档日志的数据库系统在出现故障时丢失数据的可能性更小,这是因为一旦出现介质故障如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点。
五、归档管理
通过SQL命令
alter database mount; alter database add archivelog 'DEST=/dm8/dmarch,TYPE=local,FILE_SIZE=256,space_limit=0'; alter database archivelog; alter database open; select arch_mode from v$database; select arch_name,arch_type,arch_dest,arch_file_size from v$dm_arch_ini;
逻辑备份与还原
逻辑导出(dexp
)和逻辑导入(dimp
)支持如下四种级别操作:
数据库级(FULL):导出或导入整个数据库中的所有对象。 用户级(OWNER):导出或导入一个或多个用户所拥有的所有对象。 模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。 表级(TABLE):导出或导入一个或多个指定的表或表分区。
创建测试数据:
#创建用户:
create user dexp identified by dameng123;
grant resource,dba to dexp;
#连接测试用户并创建测试表: conn dexp/dameng123; #导出导入过程数据库要保持OPEN状态。 create table dexp as select * from sysobjects;
全库导出 export import
dexp SYSDBA/SYSDBA file=full_01.dmp log=full1.log directory=/dm8/dmbak full=y; 删除测试数据 drop table dexp; 全库导入 dimp USERID=SYSDBA/SYSDBA FILE=full_01.dmp LOG=full2.log directory=/dm8/dmbak full=y table_exists_action=replace; 验证之前创建的测试表 select count(1)from dexp;
导出用户
dexp SYSDBA/SYSDBA file=user_01.dmp log=user1.log directory=/dm8/dmbak owner=dexp #导入数据到原用户: dimp USERID=SYSDBA/SYSDBA FILE=user_01.dmp LOG=user.log directory=/dm8/dmbak owner=dexp table_exists_action=replace #导入数据到其他用户: create user dimp identified by dameng123; grant resource,dba to dimp; #注意这里的remap_schema中的模式名要用大写,否则会导入原来的模式中: dimp USERID=SYSDBA/SYSDBA FILE=user_01.dmp LOG=user.log directory=/dm8/dmbak remap_schema=DEXP:DIMP table_exists_action=replace 验证数据 conn dexp/dameng123 select count(1)from dexp;
导出模式
dexp SYSDBA/SYSDBA file=schema_01.dmp log=schema_01.log directory=/dm8/dmbak schemas=dexp; #注意这里的remap schema中的模式名要用大写,否侧会导入原来的模式中: dimp USERID=dimp/dameng123 FILE=schema_01.dmp LOG=schema.log directory=/dm8/dmbak remap_schema=DEXP:DIMP table_exists_action=replace 验证模式 select count(1)from dexp;
导出表
#在原库dexp用户下创建2张测试表 conn dexp/dameng123 create table anqing as select * from sysobjects; create table huaining as select * from sysobjects; #导出这2张表: dexp dexp/dameng123 file=tables_01.dmp log=tables.log directory=/dm8/dmbak tables=anqing,huaining #将表导入到原用户dexp用户下: dimp dexp/dameng123 file=tables_01.dmp log=tables.log directory=/dm8/dmbak tables=anqing,huaining table_exists_action=replace #将表导入到dimp用户下: #注意这里连接用户必须是对象的原用户,然后加上remap schema=DEXP:DIMP就可以导入到新用户下: dimp dexp/dameng123 file=tables_01.dmp log=tables.log directory=/dm8/dmbak tables=anqing,huaining table_exists_action=replace remap_schema=DEXP:DIMP select count(1)from anqing; select count(1)from huaining;
联机备份与还原
联机备份在数据库级别只支持备份操作,不支持还原,数据库级别的还原必须在脱机进行。 默认的备份路径为dm.ini中BAK PATH参数配置的路径,若未配置,则使用SYSTEM PATH下的bak目录。
备份类型:分为完全备份 FULL 和增量备份 INCREMENT 两种。缺省为 FULL。
全备:full参数可以省略,不指定备份类型默认为完全备份。 backup database backupset '/dm8/dmbak/full01';
增量备份 backup database increment with backupdir '/dm8/dmbak' backupset '/dm8/dmbak/inc_back';