创建表空间.docx
- 文档编号:4610670
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:17
- 大小:22.21KB
创建表空间.docx
《创建表空间.docx》由会员分享,可在线阅读,更多相关《创建表空间.docx(17页珍藏版)》请在冰豆网上搜索。
创建表空间
Createtablespace表空间名
[datafile子句]
[minimumextent正整数[K|M]
[blocksize正整数[K]]
[logging|nologging]
[default存储子句]
[online|offline]
[permanent|temporary]
[区段管理子句]
[段管理子句]
表空间名:
所要创建的表空间名.
Datafileb子句:
组成所要创建的表空间的文件说明.
Minimumextent:
表空间中所使用的每个EXTENT都必须是该参数所指定数的整数倍.
Blocksize:
为该表空间说明非标准决的大小.在使用这一子句之前,必须先设置DB_CACHE_SIZE和DB_nK_CACHE_SIZE参数,而且该子句中所说明的正整数一定与DB_nK_CACHE_SIZE参数的设定相对应.
Logging:
说明在该表空间中所有数据的变化都将写入重做日志文件中,这也是默认方式.
Nologging:
说明在该表空间中所有数据的变化不都写入重做日志文件中,nologging只影响一些DML和DDL命令.
Default存储子句:
说明所有在该表空间中所创建的对象的默认存储参数.
Offline:
说明该表空间在创建后立即被置为脱机,即不能使用.
在数据字典管理的表空间中所有的EXTENTS的管理都是在数据字典中进行的,而且每一个存储在同一个表空间中的段可以具有不同的存储子句。
在这种表空间的管理方法中可以按您的需要修改存储参数,所以存储管理比较灵活但系统的效率较低。
如果使用这种表空间的管理方法,有时需要合并碎片。
本地管理的表空间其空闲EXTENTS是在表空间中管理的,它是使用位图来记录空闲EXTENTS,位图中的每一位对应于一块或一组块,而每位的值批示空闲或分配。
当一个EXTENT被分配或释放时,ORACLE服务器就会修改位图中相应位的值以反映该EXTENT的新的状态。
位图存放在表空间所对应的数据文件的文件头中。
使用本地管理的表空间减少了数据字典表的竞争,而且当磁盘空间分配或收回时也不会产生回滚(还原),它也不需要合并碎片。
在本地管理的表空间中无法按实际需要来随意修改存储参数,所以存储管理不像数据字典(系统)管理的表空间那样灵活,但系统的效率很高。
在这里为了给大家演示表空间的创建及其管理,我们假设我们在做一个探月工程的项目需要为这个项目创建自己的表空间和其他相应的辅助表空间,以及模拟如何管理我们这个项目这涉及到的表空间和它的相关结构。
好,让我们开始吧,大家跟着我,我带你们去探月。
一.创建数据字典管理的表空间:
SQL>connect/assysdba
已连接。
SQL>createtablespacemoon
2datafile'e:
\disk2\moon\moon01.dbf'size50m,
3'e:
\disk4\moon\moon02.dbf'size50m
4minimumextent50kextentmanagementdictionary
5defaultstorage(initial50knext50kmaxextents100pctincrease0);
createtablespacemoon
*
第1行出现错误:
ORA-12913:
无法创建字典管理的表空间
二.创建本地管理的表空间
让我们为探月工程创建一个存储工程所需要数据的表空间MOON。
SQL>createtablespacemoon
2datafile'e:
\disk2\moon\moon01.dbf'size50m,
3'e:
\disk4\moon\moon02.dbf'size50m
4extentmanagementlocal
5uniformsize1m;
表空间已创建。
接下来还要为这个项目创建一个名为MOON_INDEX的索引表空间。
该表空间只基于一个数据文件,其文件名为e:
\disk6\moon\moon_index.dbf,其大小为50M(在实际当中可能是几百M)。
为了方便磁盘存储的管理,我们研究决定使用本地管理的表空间(EXTENTMANAGEMENTLOCAL)。
让我们来创建这个表空间
SQL>createtablespacemoon_index
2datafile'e:
\disk6\moon\moon_index.dbf'
3size50M
4extentmanagementlocal
5uniformsize1M;
表空间已创建。
我们在创建完表空间后要养成良好习惯利用dba_tablespaces视图去查看一下自己创建的表空间是否满足要求:
SQL>selecttablespace_name,block_size,extent_management,segment_space_management
2fromdba_tablespaces
3wheretablespace_namelike'moon%';
未选定行//这里没有信息并非是我们的表空间没创建成功而是表空间名以大写存储
SQL>selecttablespace_name,block_size,extent_management,segment_space_management
2fromdba_tablespaces
3wheretablespace_namelike'MOON%';
TABLESPACE_NAMEBLOCK_SIZEEXTENT_MANSEGMEN
--------------------------------------------------------
MOON8192LOCALMANUAL
MOON_INDEX8192LOCALMANUAL
接着,再让我们查看一下表空间的参数配置:
SQL>selecttablespace_name,initial_extent,next_extent,
2max_extents,pct_increase,min_extlen
3fromdba_tablespaces
4wheretablespace_namelike'MOON%';
TABLESPACE_NAMEINITIAL_EXTENTNEXT_EXTENTMAX_EXTENTSPCT_INCREASEMIN_EXTLEN
----------------------------------------------------------------------------------------
MOON10485761048576214748364501048576
MOON_INDEX10485761048576214748364501048576
再让我们查看一下表空间中的数据文件是否已经成功创建,因为表空间是由多数据文件构成如果表空间中没有数据文件那表空间也就不存在了:
SQL>selectfile_id,file_name,tablespace_name,autoextensible
2fromdba_data_files
3orderbyfile_id;
FILE_IDFILE_NAMETABLESPACE_NAMEAUT
-------------------------------------------------------------------------
1E:
\ORACLE\PRODUCT\10.1.0\ORADASYSTEMYES
TA\TEST\SYSTEM01.DBF
2E:
\ORACLE\PRODUCT\10.1.0\ORADAUNDOTBS1YES
TA\TEST\UNDOTBS01.DBF
3E:
\ORACLE\PRODUCT\10.1.0\ORADASYSAUXYES
TA\TEST\SYSAUX01.DBF
4E:
\ORACLE\PRODUCT\10.1.0\ORADAUSERSYES
TA\TEST\USERS01.DBF
FILE_IDFILE_NAMETABLESPACE_NAMEAUT
-------------------------------------------------------------------------
5E:
\DISK2\MOON\MOON01.DBFMOONNO
6E:
\DISK4\MOON\MOON02.DBFMOONNO
7E:
\DISK6\MOON\MOON_INDEX.DBFMOON_INDEXNO
已选择7行。
在为我们宏大探月项目创建完成前两个所需的表空间去,这只是我们浩大工程冰山一角,还需要我们做更多的工作,再让我们为探月工程创建一个很重要的表空间“还原表空间”:
在数据库初始创建时库中有一个叫UNDOTBS1的还原表空间,但对于我们这个项目建议大家为我们这个项目单独创建一个“moon_undo”的表空间,它也是基于操作系统本地管理的数据文件名为‘e:
\disk7\moon\moon_undo.dbf,其大小为20m:
SQL>createundotablespacemoon_undo
2datafile'e:
\disk7\moon\moon_undo.dbf'
3size20m;
表空间已创建。
在创建完成后一定要查看一下,保证你创建的表空间是满足要求的:
SQL>selecttablespace_name,block_size,extent_management,segment_space_management
2fromdba_tablespaces
3wheretablespace_namelike'MOON%';
TABLESPACE_NAMEBLOCK_SIZEEXTENT_MANSEGMEN
--------------------------------------------------------
MOON8192LOCALMANUAL
MOON_INDEX8192LOCALMANUAL
MOON_UNDO8192LOCALMANUAL
然后再确认一下,我们所创建表空间的类型:
SQL>selecttablespace_name,status,contents
2fromdba_tablespaces
3wheretablespace_namelike'MOON%';
TABLESPACE_NAMESTATUSCONTENTS
------------------------------------------------
MOONONLINEPERMANENT
MOON_INDEXONLINEPERMANENT
MOON_UNDOONLINEUNDO
好了,已经做了一些准备工作了,我们在一步一步的接近我们的目标,但是不要高兴太早,因为我们才刚刚开始,大家是否还记得临时表空间,还记得它的作用吗?
如果忘记了希望你回去注意复习,古人云:
“温故而知新”,对于我们学习oracle来说这是非常重要,毕竟它的中文名称叫“甲古文”。
在我们这个项目中一定会存储大量数据,在我们实施工程时也一定会用到这些数据,那么这么大量的数据在查看时会非常困难,那么我们可以借助orderby和groupby子句来进行查询以帮助我们把数据排序分组以便我们能够更快的分析数据。
那么基于以上项目需要,我们需要创建一个临时表空间“MOON_TEMP“,临时表空间可以由多个用户共享,在其中不能包含任何永久对象。
临时表空间中的排序段是在实例启动后当有第一个排离操作时创建的,排序段在需要时可通过分配EXTENTS来扩展,并一直可以扩展到大于或等于在该实例上所运行的所有排序活动的总和。
当创建临时表空间时,必须使用标准数据块。
建议大家用本地管理:
SQL>createtemporarytablespacemoon_temp
2tempfile'e:
\disk8\moon\moon_temp.dbf'
3size10m
4extentmanagementlocal
5uniformsize2m;
表空间已创建。
做项目态度一定要严谨,保持良好习惯我们来查看一下:
SQL>selecttablespace_name,status,contents
2fromdba_tablespaces
3wheretablespace_namelike'MOON%';
TABLESPACE_NAMESTATUSCONTENTS
------------------------------------------------
MOONONLINEPERMANENT
MOON_INDEXONLINEPERMANENT
MOON_TEMPONLINETEMPORARY
MOON_UNDOONLINEUNDO
SQL>selecttablespace_name,block_size,extent_management,
2segment_space_management,min_extlen
3fromdba_tablespaces
4wheretablespace_namelike'MOON%';
TABLESPACE_NAMEBLOCK_SIZEEXTENT_MANSEGMENMIN_EXTLEN
------------------------------------------------------------------
MOON8192LOCALMANUAL1048576
MOON_INDEX8192LOCALMANUAL1048576
MOON_TEMP8192LOCALMANUAL2097152
MOON_UNDO8192LOCALMANUAL65536
注:
本地管理的临时表空间是基于临时数据文件(TEMPFILES)的,这些文件与普通的数据文件非常相似,但它们还具有如下的特性:
1.临时数据文件的状态不能置为只读。
2.不能将临时数据文件重新命名。
3.临时数据文件总是置为NOLOGGING状态。
4.不能使用ALTERDATABASE命令创建临时数据文件。
5.以只读方式运行的数据库需要临时数据文件。
6.介质恢复是不能恢复临时数据文件的。
7.另外,为了优化某一临时表空间中排序的效率,应该将UNIFORMSIZE设为SORT_AREA_SIZE(PGA中排序区的大小)参数的整数倍。
那么还需要注意的一点是,只有我们把MOON_TEMP表空间设置为“默认临时表空间”我们的探月工程项目才能使用这个MOON_TEMP表空间作为为我们工程服务的临时表空间。
那么接下教会大家如何将普通的临时表空间改为默认临时表空间,这个过程非常简单,但它的意义非凡:
首先,让我们来查看一下当前的默认临是表空间是“谁”,
SQL>colproperty_valuefora30
SQL>coldescriptionfora50
SQL>select*fromdatabase_properties
2whereproperty_namelike'DEFAULT%';
PROPERTY_NAMEPROPERTY_VALUEDESCRIPTION
--------------------------------------------------------------------------------------------------
DEFAULT_TEMP_TABLESPACETEMPNameofdefaulttemporarytablespace
DEFAULT_PERMANENT_TABLESPACEUSERSNameofdefaultpermanenttablespace
DEFAULT_TBS_TYPESMALLFILEDefaulttablespacetype
我们看到当前数据库的默认临时表空间是TEMP,现在我们可以把默认临时表空间改为我们探月工程所需要的MOON_TEMP,为我们的工程服务。
SQL>alterdatabasedefaulttemporarytablespacemoon_temp;
数据库已更改。
再让我们来查询一下是不是修改了默认表空间:
SQL>select*fromdatabase_properties
2whereproperty_namelike'DEFAULT%';
PROPERTY_NAMEPROPERTY_VALUEDESCRIPTION
--------------------------------------------------------------------------------------------------
DEFAULT_TEMP_TABLESPACEMOON_TEMPNameofdefaulttemporarytablespace
DEFAULT_PERMANENT_TABLESPACEUSERSNameofdefaultpermanenttablespace
DEFAULT_TBS_TYPESMALLFILEDefaulttablespacetype
注:
在默认临时表空间上有一些限制:
首先,默认临时表空间不能被删除,除非有一个新的可以使用的默认临时表空间。
也就是必须先使用ALTERDATABASE将一个新的临时表空间设置为默认临时表空间,之后才能删除旧的(默认)临时表空间。
使用旧的(默认)临时表空间的用户被自动地赋予新的默认临时表空间。
因为默认临时表空间必须是临时表空间所以不能将默认临时表空间改为一个永久表空间,也不能将默认临时表空间设置为脱机。
从显示结果中我们看到确定被我们修改了,做到这大家是不是有一点小小的成就感呢,不要洋洋得意啊,后面还有很多工作要做呢,我们需要努力吧!
当表空间需要维护或其中数据需要保护时,我们该怎么办?
请大家想想!
答:
可以把表空间设置为脱机。
一个表空间的正常状态是联机状态,此时数据库用户可以访问该表空间中的数据。
然而,有时数据库管理员需要将某一表空间设置为脱机状态,以进行数据库的维护其维护工作包括:
1.在数据库处于打开状态下移动数据文件。
2.在数据库处于打开状态下恢复一个表空间或一个数据文件。
3.执行对表空间的脱机备份(虽然对表空间可以进行联机备份)。
4.使数据库的一部分不可以被访问,而其他的部分可以被正常地访问。
当一个表空间被设置为脱机状态时,该表空间上的数据是不可以访问的。
如果用户试图访问该表空间上的数据就会收到出错信息。
当一个表空间被设置为脱机状态时或重新被设置为联机状态时,oracle会把这一事件记录在数据字典和控制文件中,也会记录在报警文件中。
如果当数据库被关闭时,某一表空间为脱机状态,那么当数据库被加载(MOUNT)和重新打开时该表空间仍保持为脱机状态。
注:
并不是所有的表空间都可以被设置为脱机状态,以下的表空间不能被设置为脱机状态:
1.系统(SYSTEM)表空间
2.上面有活动的还原/回滚段的表空间。
3.默认临时表空间。
如何将表空间进行脱机/联机:
SQL>altertablespacemoonoffline;
表空间已更改。
让我们来查看一下:
SQL>selecttablespace_name,status,contents
2fromdba_tablespaces
3wheretablespace_namelike'MOON%';
TABLESPACE_NAMESTATUSCONTENTS
------------------------------------------------
MOONOFFLINEPERMANENT
MOON_INDEXONLINEPERMANENT
MOON_TEMPONLINETEMPORARY
MOON_UNDOONLINEUNDO
SQL>selectfile#,name,status
2fromv$datafile
3;
FILE#NAMESTATUS
-------------------------------------------------------------------
1E:
\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\SYSTEM01.DBFSYSTEM
2E:
\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\UNDOTBS01.DBONLINE
F
3E:
\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\SYSAUX01.DBFONLINE
4E:
\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\USERS01.DBFONLINE
5E:
\DISK2\MOON\MOON01.DBFOFFLINE
6E:
\DISK4\MOON\MOON02.DBFOFFLINE
7E:
\DISK6\MOON\MOON_INDEX.DBFONLINE
8E:
\DISK7\MOON\MOON_UNDO.DBFONLINE
已选择8行。
当需要向MOON表空间写入新的重要数据时,我们需要把这个表空间重新联机:
SQL>altertablespacemoononline;
表空间已更改。
SQL>selecttablespace_name,status,contents
2fromdba_tablespaces
3wheretablespace_namelike'MOON%';
TABLESPACE_NAMESTATUSCONTENTS
------------------------------------------------
MOONONLINEPERMANENT
MOON_INDEXONLINEPERMANENT
MOON_TEMPONLINETEMPORARY
MOON_UNDOONLINEUNDO
SQL>selectfile#,name,status
2fromv$datafile
3;
FILE#NAMESTATUS
-------------------------------------------------------------------
1E:
\ORACLE\PR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 创建 空间