第五章 Oracle存储结构
本章学习内容
? 了解表空间和数据文件 ? 创建和管理表空间 ? 管理表空间中的空间
练习5-1 了解数据库的数据存储结构
在本练习中,将运行查询来了解数据库的物理结构。可以从SQL*Plus或Database Control,交互方式运行这些命令。但最好将它们保存为一个脚本(针对显示格式做适当的完善,并执行特定站点的自定义),可针对任何数据库运行此脚本,这将作为普通空间使用报告的一部分。
(1) 以用户SYSTEM的身份连接到数据库 (2) 确定控制文件的名称和大小:
SELECT NAME, block_size*file_size_blks bytes FROM v$controlfile;
(3) 确定联机重做日志文件成员的名称和大小: SELECT MEMBER,bytes FROM v$log JOIN v$logfile USING(group#);
(4) 确定数据文件和临时文件的名称和大小: SELECT 'v$datafile', NAME, BYTES FROM V$DATAFILE UNION ALL SELECT 'v$tempfile', NAME, BYTES FROM V$TEMPFILE;
练习5-2 创建、更改和删除表空间
在本练习中,将创建表空间并更改其特性。此后将启用和使用OMF。可以通过Database Control完成本练习,若如此,请在所有阶段单击Show SQL按钮以观察生成的SQL语句。 (1) 以用户SYSTEM的身份连接到数据库
(2) 在适当目录(Oracle所有者拥有写权限的任何目录)中创建表空间 CREATE TABLESPACE mpac_lc DATAFILE 'D:\\oracle\\product\\10.2.0\\oradata\\orcl\\mpac_lc.dbf' SIZE 10m EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO; 此命令指定默认选项。这是一项良好的实践,使语句可以自我记录。 (3) 在新的表空间创建表,并确定第一个区间的大小: CREATE TABLE lc_test(c1 DATE) TABLESPACE mpac_lc; SELECT owner, extent_id, bytes FROM dba_extents WHERE segment_name = 'LC_TEST'; --创建表初始为1个段大小64k,8个块
(4) 手动添加区间,并通过重复执行以下命令来观察每个新区间的大小,并重复执行区
间大小的查询。注意区间大小的增长点。(手动添加区间,每次增加一个区间)
ALTER TABLE lc_test ALLOCATE EXTENT; SELECT owner, extent_id, bytes FROM dba_extents WHERE segment_name = 'LC_TEST';
(5) 使表空间脱机,观察效果,再使其重新联机。
ALTER TABLESPACE mpac_lc OFFLINE; SELECT * FROM lc_test; ORA-00376: file 7 cannot be read at this time ORA-01110: data file 7: 'D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\MPAC_LC.DBF' ALTER TABLESPACE mpac_lc ONLINE; SELECT * FROM lc_test; (6) 将表空间设置为只读表空间,观察效果,再将其设置为读写。 ALTER TABLESPACE mpac_lc READ ONLY; SELECT * FROM lc_test; INSERT INTO lc_test VALUES(SYSDATE); ORA-00372: file 7 cannot be modified at this time ORA-01110: data file 7: 'D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\MPAC_LC.DBF'
DROP TABLE lc_test; ALTER TABLESPACE mpac_lc READ WRITE; CREATE TABLE lc_test (c1 DATE) TABLESPACE mpac_lc; INSERT INTO lc_test VALUES(SYSDATE); (7) 启动OMF来创建数据库文件: ALTER SYSTEM SET db_create_file_dest='D:\\oracle\\product\\10.2.0\\oradata'; (8) 使用最少的语法创建表空间 CREATE TABLESPACE mpac_lc_idx; (9) 确定OMF文件的特性 SELECT FILE_NAME, BYTES / 1024 / 1024, AUTOEXTENSIBLE, MAXBYTES / 1024 / 1024, INCREMENT_BY / 1024 / 1024 FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'MPAC_LC_IDX';
文件名:
D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\DATAFILE\\O1_MF_MPAC_LC__9V83O8D0_.DBF
数据文件默认的初始化大小为100MB、文件大小自动扩展、没有扩展上限(这里最大为32GB,与32位操作系统有关)、空间大小增长的步长为12.5KB
(10) 调整OMF条件,使特性更趋于合理。使用步骤(9)返回的系统生成的任何文件名:
ALTER DATABASE DATAFILE 'D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\DATAFILE\\O1_MF_MPAC_LC__9V83O8D0_.DBF' RESIZE 200m; ALTER DATABASE DATAFILE 'D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\DATAFILE\\O1_MF_MPAC_LC__9V83O8D0_.DBF' AUTOEXTEND ON NEXT 100m MAXSIZE 2g; (11) 删除表空间,并使用操作系统命令予以确认: DROP TABLESPACE mpac_lc_idx INCLUDING CONTENTS AND DATAFILES; DROP TABLESPACE mpac_lc_idx ; 在表空间中没有对象时,两者效果相同,否则第二条执行将报错。
练习5-3 更改表空间特性
本练习将使用非默认的手动空间管理来创建表空间,以便在升级后模拟到自动段空间管理的转换:
(1) 以用户SYSTEM的身份连接到数据库。
(2) 使用手动段空间管理创建表空间。由于【练习5-2】中启用了OMF,所以不需要任
何数据文件子句:
CREATE TABLESPACE manualsegs SEGMENT SPACE MANAGEMENT MANUAL; (3) 使用手动技术确认新表空间的存在:
SELECT segment_space_management FROM dba_tablespaces WHERE tablespace_name = 'MANUALSEGS'
(4) 在表空间中创建表和索引:
CREATE TABLE mantab (c1 NUMBER) TABLESPACE manualsegs ; CREATE INDEX mantabidx ON mantab(c1) TABLESPACE manualsegs ; 将使用空闲列表(而非位图)来创建这些段。
(5) 新建将使用自动段空间管理(默认方式)的表空间: CREATE TABLESPACE autosegs; (6) 将对象移入新表空间: ALTER TABLE mantab MOVE TABLESPACE autosegs; ALTER INDEX mantabidx REBUILD ONLINE TABLESPACE autosegs; (7) 确认对象位于正确的表空间中: SELECT segment_name,tablespace_name FROM dba_segments WHERE segment_name LIKE 'MANTAB%' (8) 删除原先的表空: DROP TABLESPACE manualsegs INCLUDING CONTENTS AND DATAFILES; (9) 将新的表空间重命名为原来的名称。通常这是必需的,因为某些应用程序软件将检
查表空间名称: ALTER TABLESPACE autosegs RENAME TO manualsegs; (10) 通过删除表空间进行清理,首先使用以下命令:
DROP TABLESPACE manualsegs; ORA-01549: tablespace not empty, use INCLUDING CONTENTS option 由于表空间非空,将引发错误,应对此进行修正: DROP TABLESPACE manualsegs INCLUDING CONTENTS AND DATAFILES; TIPS 自动段管理和手动段管理的区别 TIPS 本地区间管理和xxx 的区别 本章知识点回顾
了解表空间和数据文件
? 一个表空间可能是多个数据文件 ? 一个表空间可包含多个段 ? 一个段是一个或多个区间
? 一个区间是位于一个数据文件的多个连续的块 ? Oracle块是数据库的基本I/O单元
创建和管理表空间
? SMALLFILE表空间可以有多个数据文件,但BIGFILE表空间只能有一个数据文件 ? 默认方式下,表空间采用本地区间管理和自动段空间管理的方式。但统一区间大小并非
默认设置。
? OMF数据文件自动命名,开始为100MB,可以自动拓展,没有上限
? 除非指定了INCLUDING CONTENTS 子句,否则包含段的表空间无法删除 ? 可将表空间设置为联机或脱机,设置为读写或只读
? 表空间可以存储三类对象:永久对象、临时对象或撤销段
管理表空间中的空间
? 本地区间管理使用每个数据文件中的位图来跟踪区间分配
? 创建表空间时,UNIFORM SIZE子句强制所有的区间采用相同的大小
? AUTOALLOCATE 子句让Oracle确定下一区间的大小,Oracle将根据分配给段的区间
数进行确定。
? 自动段空间管理使用位图跟踪区间每个块中的可用空间
? 可将表空间从字典区间管理转换为本地区间管理,但不能讲空闲段管理转换为自动管
理。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库OCP认证考试指南全册Oracle Database 11g练习与知识点 - 图文(5)在线全文阅读。
相关推荐: