第一篇:oracle 数据文件、表空间、日志文件、控制文件数据库管理
实验四 oracle 数据库管理
一、试验目的
掌握对数据文件、表空间、日志文件、控制文件的常用命令,作为DBA的必要准备。
二、实验内容
2.1 数据文件的管理
(1)在安装完毕之后,在INITsid.ORA参数文件有一个DB_FILES 参数,用于设置当前实例的数据外文件的个数。如: db_files = 80 如果在INITsid.ORA文件没有该参数,则可以用下面查询语句从视图中查到。如: SQL> col name for a20 SQL> col value for a50 SQL> set lin 100 SQL> select name,value from v$parameter where name = 'db_files';NAME VALUE---------------------------------------db_files 1024(2)行命令建立表空间:
例1 CREATE TABLESPACE user_stu DATAFILE 'h:/oracle/oradata/orcl/user_stu.dat' SIZE 20M DEFAULT STORAGE(INITIAL 10K NEXT 50K MINEXTENTS 1 MAXEXTENTS 99 PCTINCREASE 10)ONLINE;例2:建立一个新的表空间,具有两个数据文件: CREATE TABLESPACE CRM_TAB
DATAFILE 'h:/oracle/oradata/orcl/crm01.dbf' size 10 MB,'h:/oracle/oradata/orcl/crm02.dbf' size 10 MB;(3)对一个已存在的表空间追加新数据文件: 例1 ALTER TABLESPACE user_stu
Add datafile 'H:/oracle/oradata/orcl/user_stu01.dbf' size 30M;例2 为表空间增加数据文件 ALTER TABLESPACE users ADD DATAFILE 'userora1.dbf ' SIZE 10M;(4)数据文件更名
ALTER TABLESPACE users RENAME DATAFILE? 'filename1', 'filename2' TO 'filename3', 'filename4';(5)变更数据文件大小 在创建表空间时,可以将表空间说明为自动扩展或固定大小。因而管理员的一项工作就是查看系统所有的表空间对应的数据文件情况。看是否为自动扩展。如: SQL> col tablespace_name for a12 SQL> col file_name for a48 SQL> select tablespace_name,file_name,AUTOEXTENSIBLE ,bytes from dba_data_files
(6)数据文件的自动扩展与调整。重新调整数据文件大小的命令如下: ALTER DATABASE DATAFILE [datafile_name] RESIZE [new_size];
当我们发现数据文件过大而不可能用完时,可以用上面命令将数据文件调小。对于设置数据文件的自动扩展问题,可用下面命令来达到: ALTER DATABASE DATAFILE [ file_spec ] AUTOEXTEND ON NEXT [increment_size] MAXSIZE [max_size,UNLIMITED]; 如:
ALTER DATABASE DATAFILE 'H:ORACLEORADATAORCLUSER_STU01.DBF' AUTOEXTEND ON NEXT 10m MAXSIZE 60M;(7)行命令修改表空间:
ALTER TABLESPACE USER_STU ONLINE;(8)ALTER TABLESPACE accounting OFFLINE NORMAL;(9)行命令删除表空间:
DROP TABLESPACE 表空间名 INCLUDING CONTENTS CASCADE CONSTRAINTS(10)、与数据文件有关的视图
select file_name from dba_data_files;select * from v$datafile;DBA_DATA_FILES DBA_EXTENTS DBA_FREE_SPACE V$DATAFILE V$DATAFILE_HEADER(11)、为了保证表空间的可用,除了掌握表空间的创建外,还应该查看dba_free_space中表空间的信息,以确保系统正常运行。一般管理员应该关心的内容有:表空间共有多少个;总共有多少自由空间;最大的自由空间是什么;下面例子是一个经常使用的脚本,可以查出数据文件和表空间的可用情况。clear buffer clear columns clear breaks column a1 heading 'Tablespace' format a15 column a2 heading 'data File' format a45 column a3 heading 'Total|Space' format 999,999.99 column a4 heading 'Free|Space' format 999,999.99 column a5 heading 'Free|perc' format 999,999.99 break on a1 on report compute sum of a3 on a1 compute sum of a4 on a1 compute sum of a3 on report compute sum of a4 on report set linesize 120 select a.tablespace_name a1, a.file_name a2, a.avail a3, nvl(b.free,0)a4, nvl(round(((free/avail)*100),2),0)a5 from(select tablespace_name, substr(file_name,1,45)file_name, file_id, round(sum(bytes/(1024*1024)),3)avail from sys.dba_data_files group by tablespace_name, substr(file_name,1,45), file_id)a,(select tablespace_name, file_id, round(sum(bytes/(1024*1024)),3)free from sys.dba_free_space group by tablespace_name, file_id)b where a.file_id = b.file_id(+)order by 1, 2;(12)查询是否存在表的扩展超出表空间可用大小 一般在系统使用较长时间后,表空间的连续块被多次的修改与删除等操作后出现了许多的不连续的块(叫碎片)。这样就有可能出现表的扩展所需要的连续块不能满足的情况。为了避免这样的情况发生而导致扩展失败,管理员要经常查询系统的表空间情况。下面就是这样的一个脚本:
Col segment_name for a20 Select segment_name, segment_type, owner, a.tablespace_name tablespace, Initial_extent, next_extent, pct_increase,b.bytes max_bytes From dba_segments a,(select tablespace_name, max(bytes)bytes from dba_free_space group by tablespace_name)b where a.tablespace_name=b.tablespace_name and next_extent > b.bytes;(13)查询表空间自由、最大及碎片
其实,平常管理最关系就是表空间的总量、最大字节、使用多少、碎片多少等。下面脚本可以查询出所有表空间的自由空间、总空间数、已用空间、自由百分比及最大块的字节数。set pau off
col free heading 'Free(Mb)' format 99999.9 col total heading 'Total(Mb)' format 999999.9 col used heading 'Used(Mb)' format 99999.9 col pct_free heading 'Pct|Free' format 99999.9 col largest heading 'Largest(Mb)' format 99999.9 compute sum of total on report compute sum of free on report compute sum of used on report break on report select substr(a.tablespace_name,1,13)tablespace, round(sum(a.total1)/1024/1024, 1)Total, round(sum(a.total1)/1024/1024, 1)-round(sum(a.sum1)/1024/1024, 1)used, round(sum(a.sum1)/1024/1024, 1)free, round(sum(a.sum1)/1024/1024, 1)*100/round(sum(a.total1)/1024/1024, 1)pct_free, round(sum(a.maxb)/1024/1024, 1)largest, max(a.cnt)fragment from(select tablespace_name, 0 total1, sum(bytes)sum1, max(bytes)MAXB, count(bytes)cnt from dba_free_space group by tablespace_name union select tablespace_name, sum(bytes)total1, 0, 0, 0 from dba_data_files group by tablespace_name)a group by a.tablespace_name 2.2 日志文件的管理
(0)日志查询
select group#,bytes from v$log;? select group#,bytes from v$logfile;
(1)实现强行的日志切换 Alter system switch logfile;(2)检测点(checkpoint)
Oracle为了在出现故障后能退回去重演原来的信息,就需要一个叫开始点。在这个开始点时刻,数据和事务是已知的。这样的开始点就叫检测点。在Oracle里,只要检查点一到(出现)。Oracle就强行将当前的SGA中的redo区的改动过的块写入重做日志文件中。这个步骤完成后,在重做日志文件中放入一个特殊的检测点标志记录。如果在下一个检测点完成前出现失败,恢复操作进程就会在日志文件和数据文件前一个检测点同步(改回去)。检测点检查完成后,对数据块的任何改动都记录在其检测点标志后写入重做日志项中。因此,恢复也就只能从最近的检测点标志记录开始。
Oracle在INITsid.ORA文件中给出LOG_CHECKPOINT_INTERVAL参数可以设置检测点的数目。比如 日志文件大小为1000块,而设置检查点间隔LOG_CHECKPOINT_INTERVAL为250,则文件写达到 1/
4、2/
4、3/4及4/4时产生检测点(250块、500块、750块和1000块处)。可用下面命令来查日志文件大小: SQL> select group#,bytes from v$log;show parameter log_checkpoint_interval(3)添加日志组
建立一个新组4,组内有两个成员 ALTER DATABASE ADD LOGFILE GROUP 4('H:/oracle/oradata/orcl/redo0401.log', 'H:/oracle/oradata/orcl/redo0402.log')size 10m;===当添加一个日志组时,可以不给出组号,有系统自动分配一个组号=== ALTER DATABASE ADD LOGFILE('H:/oracle/oradata/orcl/redo0501.log', 'H:/oracle/oradata/orcl/redo0502.log')size 10m;此时添加的组号为5
(4)为日志组增加成员 ALTER DATABASE ADD LOGFILE MEMBER 'log22.log' TO GROUP 2;===添加成员时,可以不给定成员的大小,因为oracle要求组内的所有成员的大小一律相等。
(5)如果将一个日志成员从一个硬盘移到另一个硬盘,就需要重新命名日志成员名字。需要进行下面步骤:
1. 关闭数据库,并进行完全备份;
2. 使用操作系统命令拷贝原来的日志文件到新的地方; 3. 用startup mount 启动数据库; 4. 用ALTER DATABASE RENAME FILE '
ALTER DATABASE RENAME FILE 'filename1', 'filename2' TO 'filename3', 'filename4';
(6)日志删除
a.删除日志组成员:
在下面情况下可能需要删除重做日志文件,如日志文件个数太多(超出需要);日志文件的大小不一致等。这样的情况可以删除日志组成员。b.当日志组损坏时,就删除日志组,但必须满足:
a)删除一个日志组后,系统中至少还有两个其它的日志组; b)被删除的日志组必须是不需要存档; c)不是正在使用的日志组。删除日志文件的语法:
ALTER DATABASE database_name DROP LOGFILE GROUP group_number | file_name |(file_name,file_name(,...))删除日志成员的语法:
ALTER DATABASE database_name DROP LOGFILE MEMBER file_name;c.联机重做日志的紧急替换:
当一个重做日志组偶而被损坏使数据库不能继续使用时,不能直接删除它们,而是要用一个干净的文件或一组成员去替代这个损坏的日志组。联机重做日志的紧急替换命令语法如下: ALTER DATABASE database_name CLEAR[UNARCHIVED] LOGFILE group_identifier [UNRECOVERABLE DATAFILE] 如果该文件正在等待存档(归档模式),就需要UNARCHIVED。
如果需要脱机恢复一个数据文件,就用UNRECOVERABLE DATAFILE。d.了解重做日志的当前状态: V$LOGFILE V$LOG V$THREAD V$LOG_HISTORY e.例子:
删除一个组3:
ALTER DATABASE DROP LOGFILE GROUP 3;删除一个成员:
ALTER DATABASE DROP? LOGFILE MEMBER '/orant/oradata'mydb02'redo02.log';4.了解重做日志的当前状态的视图主要有: V$LOGFILE V$LOG V$THREAD V$LOG_HISTORY 5.例子:
察看是否归档
ARCHIVE? LOG? LIST 日志归档
alter database noarchivelog;
3、控制文件的管理(1)关于控制文件
控制文件存放有数据库的结构信息,包括数据文件、日志文件。控制文件是一个二进制文件,它是在数据库建立时自动被建立。控制文件可以在当你改变文件名或移动文件时而被更新。在任何时候,你都不能编辑控制文件。控制文件的内容包括:
数据库名字(控制文件只能属于一个数据库)。 数据库建立时的邮戳。
数据文件-名字,位置及联机/脱机。 重做日志文件-名字及位置。 表空间名字。 当前日志序列号。 最近检查点信息。
恢复管理器信息(RMAN)。(2)控制文件信息
在spfile.ora的配置文件中 有:
control_files =(“/home/oracle/app/oracle/oradata/s450/control01.ctl”, “/home/oracle/app/oracle/oradata/s450/control02.ctl”, “/home/oracle/app/oracle/oradata/s450/control03.ctl”)(3)查询控制文件的信息
show parameters;select * from v$controlfile;desc V$CONTROLFILE_RECORD_SECTION v$datafile db_data_files v$logfile v$log v$controlfile show parameter control_files
其中,RECORD_SIZE NUMBER 记录字节大小 RECORDS_TOTAL NUMBER 段的记录数
RECORDS_USED NUMBER 段中已使用的记录数 FIRST_INDEX NUMBER 第一个记录索引位置 LAST_INDEX NUMBER 最后一个记录索引位置 LAST_RECID NUMBER 最后一个记录ID号
select * from V$CONTROLFILE_RECORD_SECTION;7.6.4 控制文件信息的更改
需要在spfile.ora中做出相应的更改。建立控制文件的步骤 1.建立控制文件准备。
必须有数据文件(查DBA_DATA_FILES数据字典)、日志文件(查V$LOGFILE数据字典)的详细列表。下面是创建控制文件的命令:
CREATE CONTROLFILE SET DATABASE “ORACLE” NORESETLOGS NOARACHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 32 MAXINSTANCES 1 MAXLOGHISTORY 1630 LOGFILE GROUP 1 'C:ORACLEDATABASELOG1ORCL.LOG' SIZE 200K, GROUP 2 'C:ORACLEDATABASELOG2ORCL.LOG' SIZE 200K, DATAFILE 'C:ORACLEDATABASESYS1ORCL.ORA', 'C:ORACLEDATABASEUSER1ORCL.ORA', 'C:ORACLEDATABASERBS1ORCL.ORA', 'C:ORACLEDATABASETMP1ORCL.ORA', 'C:ORACLEDATABASEAPPDATA1.ORA', 'C:ORACLEDATABASEAPPINDX1.ORA',;在例子中,参数选件与 CREATE DATABASE类似。NORESETLOGS 指定联机的日志文件不要重新设置。2. 关闭数据库。
3. 用NOMOUNT选件启动数据库,记住,安装数据库,Oracle需要打开控制文件。4. 用类似上面建立新的控制文件。并在INITsid.ORA参数文件中指定。5. 使用ALTER DATABASE OPEN命令打开数据库。6. 关闭数据库并备份数据库。
提示:如果你的数据库正常,则可以用ALTER DATABASE BACKUP CONTROLFILE TO TRACE 命令来产生一个CREATE CONTROLFILE 的命令。该命令产生后被写到跟踪文件中。请参考INITsid.OAR的USER_DUMP_DEST所指的目录找到跟踪文件,它就在跟踪文件中。
建立好控制文件后,就要确定如何来补救被丢失的数据文件,可以从V$DATAFILE视图来查到丢失的数据文件,这些数据文件的名字为MISSINGnnnn。如果你建立的控制文件带有RESETLOGS选件,则丢失的数据文件就不能加回数据库中。如果你建立的控制文件带有NORESETLOGS选件,则丢失的数据文件可以由数据库的介质恢复被加回数据库中。当数据库启动后可以 用下面命令进行备份:
ALTER DATABASE BACKUP CONTROL FILE TO '
可以从视图V$CONTROLFILE中查到控制文件的信息,status字段表示控制文件的状态,一般总是为空。如:
SQL> select * from v$controlfile;另外V$CONTROLFILE_RECORD_SECTION 视图存储控制文件所记录的信息。它的结构如下:
SQL> desc V$CONTROLFILE_RECORD_SECTION
第二篇:Oracle大型数据库 实验五 重做日志文件、表空间管理操作
集美大学计算机工程学院实验报告
课程名称:大型数据库技术 指导教师:杨艳华
班级:计算12 姓名:
实验成绩:
上机实践日期:2014.12 上机实践时间:2学时 实验项目名称:重做日志文件、表空间管理操作 学号:20 实验项目编号:实验五 组号:
一、实验目的
1、理解重做日志文件的基本概念;
2、掌握重做日志文件组及其成员的添加、移动、删除等操作;
3、掌握归档重做日志的设置;
4、理解表空间的基本概念和分类;
5、掌握永久表空间的创建和管理操作;
6、掌握还原表空间的管理。
二、实验要求
1、完成重做日志文件组及其成员文件的管理操作;
2、完成归档重做日志的设置;
3、完成永久表空间和临时表空间的管理操作;
4、完成还原表空间的管理。
三、实验内容
(1)查看数据库当前重做日志文件组及成员的设置情况,然后,为数据库添加一组重做日志,组内包含两个成员文件,分别为redo4a.log和redo4b.log,大小分别为5MB。
1(2)为上面新添加的那组重做添加一个日志成员,命名为“redo4c-姓名简拼.log”,实现重做日志的多路存储。
(3)把数据库从非归档模式修改为归档模式,之后创造条件让数据库立即归档,并检查归档是否成功
(4)创建永久表空间
创建一个表空间名为“TB+学号后三位+姓名简拼” 空间的大小为50M 表空间包括两个数据文件:表空间名_01.dbf(30M)和表空间名_02.dbf(20M),大小均不能自动扩展 数据文件均存放在Oracle的安装根目录
(5)改变上述永久表空间的可用性
先将表空间脱机 再进行联机
(6)创建一个4K的非标准块表空间,命名为“tbf+学号后三位+姓名简拼”,数据文件存储在”
(7)创建一个临时表空间
名为“TTB+学号后三位+姓名简拼”
包含一个数据文件:表空间名_01.dbf,大小为(学号后三位*2)M,存储在”
(8)查看数据库内各个表空间及其类型,以及区管理方式、分配类型和段空间管理方法、表空间的状态。
(9)删除前面创建的非标准块表空间,同时删除表空间的内容和对应的操作系统文件。
(10)创建一个还原表空间,命名为“UNDO+学号后三位+姓名简拼”,其中包含一个数据文件(存储在”
(11)为前面创建的永久表空间添加一个数据文件,命名为“表空间名_03.dbf”,该文件初始大小为50M,允许自动扩展,存储在”
(12)将永久表空间中初始的两个文件移动到”
(13)同时将前面创建的永久表空间和UNDO表空间内的文件进行重命名,把文件名中的“_”去掉。
三、实验小结
1、通过本次实验,我对重做日志文件组及其成员的添加、移动、删除等操作、归档重做日志的设置、表空间的基本概念和分类、永久表空间的创建和管理操作、还原表空间的管理都有了更为深入的了解和掌握;
2、切换数据库状态前,必须关闭数据库,由于没有关闭数据库,导致在数据库状态切换过程中遇到了很多问题;
3、通过本次实验,我能够完成重做日志文件组及其成员文件的管理操作、完成归档重做日志的设置、完成永久表空间和临时表空间的管理操作。
第三篇:oracle 管理表空间和数据文件
oracle 管理表空间和数据文件
介绍ν
表空间是数据库的逻辑组成部分。从物理上讲,数据库数据存放在数据文件中;
从逻辑上讲,数据库则是存放在表空间中,表空间由一个或多个数据文件组成。
数据库的逻辑结构
介绍ν
oracle 中逻辑结构包括表空间、段、区和块。
说明一下数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而
区又是由 oracle块构成的这样的一种结构,可以提高数据库的效率。
为了让大家明白,我们画图说明逻辑关系:看图:
表空间
介绍ν
表空间用于从逻辑上组织数据库的数据。数据库逻辑上是由一个或是多个表空间
组成的。通过表空间可以达到以下作用:
1.控制数据库占用的磁盘空间
2.dba 可以将不同数据类型部署到不同的位置,这样 利于提高 i/o性能,同
时利于备份和恢复等管理操作。(可以把索引,触发器单独放一个表空间中)。
建立表空间ν
建立表空间是使用 crate tablespace 命令完成的,需要注意的是,一般情况下,建立表空间是特权用户或是 dba 来执行的,如果用其它用户来创建表空间,则用
户必须要具 create tablespace 的系统权限。
建立数据表空间ν
在建立数据库后,为便于管理表,最好建立 自己的表空间 create tablespace data01 datafile 'd:testdada01.dbf' size 20m uniform size 128k;
说明:执行完上述命令后,会建立名称为 data01 的表空间,并为该表空间建立
名称为 data01.dbf 的数据文件,区的大小为 128k
ν 使用数据表空间(把表关联到表空间,如果没指定表空间,则默认在sys表空间里)create table mypart(deptno number(4), dname varchar2(14), loc varchar2(13))tablespace data01;
改变表空间的状态ν
当建立表空间时,表空间处于联机的(online)状态,此时该表空间是可以访问的,并且该表空间是可以读写的,即可以查询该表空间的数据,而且还可以在表
空间执行各种语句。但是在进行系统维护或是数据维护时,可能需要改变表空间的状态。一般情况下,由特权用户或是 dba 来操作。安全性考虑
1.使表空间脱机
alter tablespace 表空间名 offline;2.使表空间联机
alter tablespace 表空间名 online;3.只读表空间
当建立表空间时,表空间可以读写,如果不希望在该表空间上执行update,delete,insert 操作,那么可以将表空间修改为只读
alter tablespace 表空间名 read only;
(修改为可写是 alter tablespace 表空间名 read write;)
改变表空间的状态ν
我们给大家举一个实例,说明只读特性:
1.知道表空间名,显示该表空间包括的所有表
select * from all_tables where tablespace_name=’表空间名’;
2.知道表名,查看该表属于那个表空间 select tablespace_name, table_name from user_tables where table_name=’emp’;
通过 2.我们可以知道 scott.emp 是在 system 这个表空间上,现在我们可以将
system 改为只读的但是我们不会成功,因为 system 是系统表空间,如果是普通
表空间,那么我们就可以将其设为只读的,给大家做一个演示,可以加
理解。
3.4.使表空间可读写
alter tablespace 表空间名 read write;
ν 删除表空间
一般情况下,由特权用户或是 dba 来操作,如果是其它用户操作,那么要求用户
具 drop tablespace 系统权限。
drop tablespace ‘表空间’ including contents and datafiles;
说明:including contents 表示删除表空间时,删除该空间的所有数据库对象,而 datafiles 表示将数据库文件也删除。
扩展表空间ν
表空间是由数据文件组成的,表空间的大小实际上就是数据文件相加后的大小。
那么我们可以想象,假定表employee 存放到data01 表空间上,初始大小就是
2M,当数据满 2M 空间后,如果在向 employee 表插入数据,这样就会显示空间不
足的错误。
案例说明:
1.建立一个表空间 sp01
2.在该表空间上建立一个普通表 mydment 其结构和 dept 一样
3.向该表中加入数据 insert into mydment select * from dept;4.当一定时候就会出现无法扩展的问题,怎么办?
5.就扩展该表空间,为其增加更多的存储空间。三种方法:
1.增加数据文件
SQL> alter tablespace sp01 add datafile ‘d:testsp01.dbf’ size 20m;
-----------------------Page 51-----------------------2.增加数据文件的大小
SQL> alter tablespace 表空间名 ‘d:testsp01.dbf’ resize 20m;
这里需要注意的是数据文件的大小不要超过 500m。
3.设置文件的自动增长。
SQL> alter tablespace 表空间名 ‘d:testsp01.dbf’ autoextend on next
10m maxsize 500m;
移动数据文件ν
有时,如果你的数据文件所在的磁盘损坏时,该数据文件将不能再使用,为了能
够重新使用,需要将这些文件的副本移动到其它的磁盘,然后恢复。
下面以移动数据文件 sp01.dbf为例来说明:
1.确定数据文件所在的表空间
select tablespace_name from dba_data_files where file_name=’d:testsp01.dbf’;
2.使表空间脱机
确保数据文件的一致性,将表空间转变为 offline 的状态。
alter tablespace sp01(表空间名)offline;3.使用命令移动数据文件到指定的目标位置
host move d:testsp01.dbf c:testsp01.dbf 4.执行 alter tablespace 命令
在物理上移动了数据后,还必须执行alter tablespace 命令对数据库文件进行
逻辑修改: alter tablespace sp01 rename datafile ‘d:testsp01.dbf’ to
‘c:testsp01.dbf’;
5.使得表空间联机
在移动了数据文件后,为了使用户可以访问该表空间,必须将其转变为 online 状态。
alter tablespace sp01(表空间名)online;
显示表空间信息ν
查询数据字典视图 dba_tablespaces,显示表空间的信息:
select tablespace_name from dba_tablespaces;
显示表空间所包含的数据文件ν
查询数据字典视图 dba_data_files,可显示表空间所包含的数据文件,如下:
select file_name, bytes from dba_data_files where tablespce_name=’表
空间’;
表空间小结ν
1.了解表空间和数据文件的作用
2.掌握常用表空间,undo 表空间和临时表空间的建立方法
3.了解表空间的各个状态(online, offline, read write, read only)的作用,及如何改变表空间的状态的方法。
4.了解移动数据文件的原因,及使用alter tablespace 和 alter datatable 命令移动数据文件的方法。
-----------------------Page 52-----------------------
其它表空间ν
除了最常用的数据表空间外,还有其它类型表空间:
1.索引表空间 2.undo 表空间
3.临时表空间
4.非标准块的表空间
这几种表空间,大家伙可以自己参考书籍研究,这里我就不讲。
其它说明ν
关于表空间的组成部分 段/区/块,我们在后面给大家讲解。
第四篇:oracle表空间和数据文件的管理实验
表空间和数据文件的管理实验
试验目的:全面掌握表空间和数据文件的创建、管理过程 试验内容:
1、创建表空间、增加数据文件
2、管理表空间和数据文件的的各种操作 试验步骤:
1、掌握表空间和数据文件相关的概念
1)oracle默认的表空间
系统默认的表空间:SYSTEM、SYSAUX、UNDOTBS1、EMP、EXAMPLE、USERS 2)系统表空间
SYSTEM、SYSAUX是系统表空间,SYSTEM用于存放oracle数据字典的结构和内部元数据。
SYSAUX是SYSTEM的辅助表空间用于存放个模式(用户)的对象元数据。
3)非系统表空间
由DBA根据需要创建,存放用户自己的数据,也可以包含临时数据以及UNDO数据。
2、创建表空间
1)创建表空间的语法
CREATE [smallfile|bigfile] TABLESPACE tablespace_name DATAFILE ‘/path/filename’ SIZE [k|m] REUSE
[‘/path/filename’ SIZE [k|m] REUSE]
[AUTOEXTEND [ON|OFF] NEXT [k|m] MAXSIZE [UNLIMITED|[K|M]]] [ONLINE|OFFLINE] [LOGGING|NOLOGGING] [PERMANENT|TEMPORARY] [DICTIONARY|LOCAL]
2)定义表空间名字及属性
创建两个表空间ts_test1、ts_test2,本地化管理(Local,默认)、永久表空间(permantent,默认)
3)定义数据文件名字、路径、初始大小、自动扩展等属性
数据文件data_test1、data_test2 路径:c:disk1data_test1.dbf c:disk2data_test2
4)创建脚本:
a、创建本地永久表空间
//创建本地永久表空间ts_test1和ts_test2,默认为永久和本地
SQL>create tablespace ts_test1 datafile ‘c:disk1data_file1.dbf’ size=50m reuse autoextend on next 10m;
SQL>create tablespace ts_test2 datafile ‘c:disk2data_file2.dbf’ size=50m reuse autoextend on next 10m maxsize unlimited;查看一下创建完成的结果
//查看dba_tablespaces结构
SQL>desc dba_tablespaces;
//查看字典中的所有表空间情况,extent_management值为local时为本地表空间 SQL>select tablespace_name,status,extent_management,content from dba_tablespaces;//查看创建表空间时创建的数据文件,首先查看dba_data_files字典结构 SQL>desc dba_data_files;//查看数据文件情况 SQL>set linesize 120 SQL>col file_name for a20 SQL>col file_id for a20 SQL>col tablespace_name a30 SQL>col online_status for a20 SQL>select file_name,file_id,tablespace_name,online_status from dba_data_files;
b、创建还原表空间和临时表空间
//创建还原表空间
SQL>create undo tablespace test_undo datafile ‘c:disk3test_undo’ size 20m;
//查看创建结果,contents为表空间内容类型,如undo
SQL>select tablespace_name,contents from dba_tablespaces;
c、创建临时表空间
//创建临时表空间
SQL>create temporary tablespace test_temp
tempfile ‘c:disk4test_temp.dbf’ size 20m extent management local;
//查询创建结果
SQL>select tablespace_name,extent_management,contents from dba_tablespaces;d、增加数据文件
//增加数据文件
SQL>alter tablespace ts_test1 add datafile ‘c:disk1ts_test11.dbf’ size 10m;
//查看增加数据文件的结果
SQL>col file_name for a30
SQL>col tablespace_name for a30 SQL>select file_name,tablespace_name from dba_data_files;
3、管理表空间的各种操作
1)改变表空间的读写状态
//将表空间设为只读
//这时表空间应为online状态,表空间不能包含回滚段,不能是归档模式
//查看数据库日志模式
SQL>archive log list;//查看表空间contents
SQL>select tablespace_name,contents from dba_tablespaces where tablespace_name like‘TS_%’;
//修改为只读
SQL>alter tablespace ts_test1 read only;2)表空间脱机离线、在线连接
SQL>alter tablespace ts_test1 offline;
SQL>alter tablespace ts_test1 online;
//查看表空间状态
SQL>select tablespace_name,status from dba_tablespaces;3)修改表空间名称 //查询当前表空间名称和所包含的数据文件
SQL>select file_name,tablespace_name from dba_data_files;//确认表空间处在online状态
SQL>select tablespace_name,status from dba_tablespaces;//表空间改名
SQL>alter tablespace ts_test2 rename to ts_test22;//查询修改结果
SQL>Col file_name for a30;SQL>col tablespace_name for a30;SQL>select file_name,tablespace_name from dba_data_files;4)设置默认表空间
SQL>alter database default tablespace users //设置默认临时表空间
SQL>alter database default temporary tablespace temp;5)删除表空间
SQL>drop tablespace ts_test2;//仅删除表空间信息不删除表空间数据文件 SQL>drop tablespace ts_test2 includng contents;//包括数据文件全部删除 查看删除后的结果情况
SQL>select file_name,tablespace_name from dba_data_files;6)切换undo表空间
SQL>alter system set undo_tablespace =undotbs02;7)删除undo表空间
要删除正在使用的undo表空间,首先切换undo表空间后在进行删除 例如删除undost01 SQL>alter system set undo_tablespace=undost02;SQL>drop tablespace undost01;8)查询undo表空间信息
SQL>show parameter undo_tablespace;
4、管理数据文件的各种操作 1)在表空间中新增一个数据文件
SQL>alter tablespace ts_test1 add datafile ‘c:dsk1ta_test111.dbf’ size 50m;2)删除表空间中无数据的数据文件 第一种语法
SQL>alter database datafile ‘c:disk1ts_test1.dbf’ offline;//数据文件脱机 SQL>alter tablespace ts_test1 drop datafile ‘c:disk1ts_test111.dbf’;第二种语法:
SQL>alter database datafile ‘mytb.dbf’ offline drop;3)数据文件自动扩展设置
SQL>alter tablespace ts_test1 datafile ‘c:disk1ts_test1.dbf’ autoextend on next 10m maxsize 500m;4)重置数据文件大小,收回或扩数据文件空间
SQL>alter tablespace ts_test1 datafile ‘c:disk1ts_test1.dbf’ resize 45m;
查询重置数据文件大小后的结果
SQL>col file_name for a30;
SQL>col tablespace_name for a30;
SQL>select file_name,tablespace_name,bytes/(1024*1024)from dba_data_files;5)移动数据文件
有两条语句可以实现对数据文件的移动:
a、alter tablespace tablespace_name rename datafile ‘/path/file_name1’
to ‘/path/file_name_new’;
a这条语句主要适合用户表空间,在执行这条语句时表空间必须脱机才能执行。SQL>alter tablesapace ts_test2 offline;//使表空间ts_test2脱机
SQL>host copy c:disk2ts_test2.dbf c:disk1 //将数据文件拷贝到新的位置
SQL>alter tablespace rename datafile ‘c:disk2ts_test2.dbf’ to ‘c:disk1ts_test1.dbf’;b、alter database db_name rename file ‘/path/file_name1’ to ‘/path/file_name_new’;
这条语句使用于系统表空间及不能置为脱机的表空间中的数据文件。在使用该语句时,数据库必须在加载(mount)的状态且目标数据文件必须存在,因为该语句只是修改文件中指向数据文件的指针(地址)。SQL>shutdown immediate;SQL>host copy c:oracleproduct10.2.0oradatasystem01.dbf c:disk1 SQL>startup mount;SQL>alter database rename file ‘c:oracleproduct10.2.0oradataorclsystem01.dbf’ to ‘c:disk1system01.dbf’;SQL>alter database open;查询移动后的结果
SQL>select file_name,tablespace_name from dba_data_files;
第五篇:Oracle表空间和数据文件的关系
数据库的物理结构是由数据库的操作系统文件所决定,每一个Oracle数据库是由三种类型的文件组成: 数据文件和控制文件。数据库的文件为数据库提供真正的物理存储。
每一个Oracle数据库有一个或多个物理的数据文件(data file)。一个数据库的数据文件包含全部数据库数据。逻辑数据库结构(如表,索引等)的数据物理地存储在数据库地数据文件中。数据文件通常为*.dbf格式,例如: userCIMS.dbf.数据文件有一下特征:①、一个数据文件仅与一个数据库联系;②、一旦建立, 数据文件只增不减;③、一个表空间(数据库存储地逻辑单位)由一个或多个数据文件组成。
其次, 我们再来叙述一下Oracle的逻辑结构: Oracle的逻辑结构包括表空间(tablespace), 段(segment), 数据块(data block)以及模式对象(schema object)。
Oracle数据库在逻辑上是由多个表空间组成的, 表空间在物理上包含一个或者多个数据文件。而数据文件大小是块大小的整数倍;表空间中存储的对象叫段, 比如数据段, 索引段和回退段。段由区组成, 区是磁盘分配的最小单位。段的增大是通过增加区的个数来实现的。每个区的大小是数据块大小的整数倍,取得大小可以不同;数据块是数据库中的最小的I/O单位,同时也是内存数据缓冲区的单位,及数据文件存储空间单位。块的大小由参数DB_BLOCK_SIZE设置,其值影设置为操作系统块大小的整数倍。
⑴ 表空间(TABLESPACE)表空间是数据库中最大的逻辑单位,每一个表空间由一个或多个数据文件组成,一个数据文件只能与一个表空间相联系。每一个数据库都有一个SYSTEM表空间,该表空间是在数据库创建或数据库安装时自动创建的,用于存储系统的数据字典表,程序系统单元,过程函数,包和触发器等,也可用于存储用户数据表,索引对象。表空间具有在线(online)和离线(offline)属性,可以将除SYSTEM以外的任何表空间置为离线。⑵ 段(SEGMENT)数据库的段可以分为4类:数据段,索引段,回退段和临时段。⑶ 区
区是磁盘空间分配的最小单位。磁盘按区划分,每次至少分配一个区。区存储在段中,它由连续的数据块组成。⑷ 数据块
数据块是数据库中最小的数据组织单位与管理单位,是数据库文件磁盘存储空间单位,也是数据库I/O的最小单位,数据块大小由DB_BLOCK_SIZE参数决定,不同的ORACLE版本BD_BLOCK_SIZE的默认值是不同的。查询DB_BLOCK_SIZE可以使用sql:
select name, value from v$parameter where name = 'db_block_size';⑸ 模式对象
模式对象是一种应用,包括:表、聚簇、试图、索引序列生成器、同义词、哈希、程序单元、数据库链的等。
最后说一下ORACLE的用户、表空间和数据文件的关系:
一个用户可以使用一个或多个表空间,一个表空间也可以提供多个用户使用。用户和表空间没有隶属关系,表空间是一个用来管理数据存储的逻辑概念,表空间只是和数据文件发生关系,数据文件是物理的。一个表空间可以包含多个数据文件,而一个数据文件只能隶属于一个表空间。
总结一下:解释数据库、表空间、数据文件、表、数据的最好办法就是想象一个装满东西的柜子。数据库其实就是柜子,柜中的抽屉是表空间,抽屉中的文件夹是数据文件,数据夹中的纸是表,写在纸上的信息就是数据。