当前位置:文档之家› Oracle表空间管理逻辑

Oracle表空间管理逻辑

Oracle表空间管理逻辑
Oracle表空间管理逻辑

表空间(Tablespace)——为数据库提供使用空间的逻辑结构,其对应物理结构是数据文件,一个表空间可以包含多个数据文件。本地管理表空间(Locally Managed Tablespace简称LMT)——8i以后出现的一种新的表空间的管理模式,通过本地位图来管理表空间的空间使用。字典管理表空间(Dictionary-Managed Tablespace简称DMT)——8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间。

本地化管理:

就是指Oracle不再利用数据字典表来记录Oracle表空间里面的区的使用状况,而是在每个表空间的数据文件的头部加入了一个位图区,在其中记录每个区的使用状况。每当一个区被使用,或者被释放以供重新使用时,Oracle都会更新数据文件头部的这个记录,反映这个变化。

本地化管理的表空间的创建过程:

语法:CREATE TABLESPACE 表空间名字

DATAFILE ’数据文件详细信息’

[EXTENT MANAGEMENT { LOCAL

{AUTOALLOCATE | UNIFORM [SIZE INTETER [K|M] ] } } ]

关键字EXTENT MANAGEMENT LOCAL 指定这是一个本地化管理的表空间。对于系统表空间,只能在创建数据库的时候指定EXTENT MANGEMENT LOCAL,因为它是数据库创建时建立的第一个表空间。在8i中,字典管理还是默认的管理方式,当选择了LOCAL关键字,即表明这是一个本地管理的表空间。当然还可以继续选择更细的管理方式:是AUTOALLOCATE 还是UNIFORM.。若为AUTOALLOCATE,则表明让Oracle来决定区块的使用办法;若选择了UNIFORM,则还可以详细指定每个区块的大小,若不加指定,则为每个区使用1M大小。

本地管理表空间的优点:

1)减少了递归空间管理

本地管理表空间是自己管理分配,而不是象字典管理表空间需要系统来管理空间分配,本地表空间是通过在表空间的每个数据文件中维持一个位图来跟踪在此文件中块的剩余空间及使用情况。并及时做更新。这种更新只对表空间的额度情况做修改而不对其他数据字典表做任何update操作,所以不会产生任何回退信息,从而大大减少了空间管理,提高了管理效率。同时由于本地管理表空间可以采用统一大小分配方式(UNIFORM),因此也大大减小了空间管理,提高了数据库性能。

2)系统自动管理extents大小或采用统一extents大小

本地管理表空间有自动分配(AUTOALLOCATE)和统一大小分配(UNIFORM)两种空间分配方式,自动分配方式(AUTOALLOCATE)是由系统来自动决定extents大小,而统一大小分配(UNIFORM)则是由用户指定extents大小。这两种分配方式都提高了空间管理效率。

3)减少了数据字典之间的竞争

因为本地管理表空间通过维持每个数据文件的一个位图来跟踪在此文件中块的空间情况并做更新,这种更新只修改表空间的额度情况,而不涉及到其他数据字典表,从而大大减少了数据字典表之间的竞争,提高了数据库性能。

4)不产生回退信息

因为本地管理表空间的空间管理除对表空间的额度情况做更新之外不修改其它任何数据字典表,因此不产生回退信息,从而大大提高了数据库的运行速度。

5)不需合并相邻的剩余空间

因为本地管理表空间的extents空间管理会自动跟踪相邻的剩余空间并由系统自动管理,因而不需要去合并相邻的剩余空间。同时,本地管理表空间的所有extents还可以具有相同的大小,从而也减少了空间碎片。

6)减少了空间碎片

7)对临时表空间提供了更好的管理

表空间管理方式转换:

字典管理表空间每当表或其他对象需要扩大的时候都检查其数据字典以确保有可用的空间分配给对象,然后给对象分配一个新区段并更新其可用空间信息。本地管理表空间保存数据文件本身的空间管理信息,而且表空间自动跟踪每个数据文件块的可用或已用状态。在事务比较多的数据库中显然字典管理每次插入数据时都会检查数据字典,这就使得数据库性能有所损耗。

1)命令方式转移。

首先你要新建一个oracle表空间,在oracle 10g以后默认都是采用本地管理表空间的。

对于表空间的转移使用命令:ALTER TABLE temp MOVE TABLESPACE new_temp;

对于索引你需要重建:ALTER TABLE index REBUILD TABLESPACE new_index;

显然上面的方法并不适用于对system表进行转换,因为你不能建立2个同名的system 表。

2)采用oracle提供的PL/SQL数据包中的DBMS_SPACE_ADMIN.

在转换system表前,你必须把所有的其他表空间转换为本地管理。

EXECUTE dbms_space_admin.tablespace_migrate_to_local("tablespace");——转行表空间

然后同样的方法将system表空间也进行转换。

EXECUTE dbms_space_admin.tablespace_migrate_to_local("system");

使用这种方法很好,但是它建立的表空间没有automatic segment space managerment 选项,所有字典管理表空间都是用默认手动段空间管理,而且在转换为本地管理的表空间是不能进行修改。还有一个缺点,就是表空间如果存在空间碎片的话,此方法也不能解决碎片问题。

管理表空间的几个基本准则

1.使用多个表空间

使用多个表空间是有好处的,

从硬件上说:我们可以将不同应用的数据存放在不同的表空间内,并且放在不同的分区上,这样可以防止多个应用抢占磁盘的I/O资源,另外当磁盘有损坏时不会同时影响到多个应用。

从数据库上说:使用多个表空间可以将不同的用户数据从数据字典中分离,以减少一个数据文件的数据字典对象和模式对象之间的竞争。

同样的临时表空间也是需要创建多个,用来匹配表空间,保证在执行操作过程中,得到更优化的响应。

2.指定表空间的存储参数

这个主要是针对不同的特殊应用来做(比如只做查询的表空间),暂时没研究。一般的应用就让oracle自己管理吧。

3.为表空间指定限额

合理的限额对表空间的利用率是有很大帮助的,如果一个只会用到20M的空间,而你却给它分配几百M,是不是就成为一个很严重的资源浪费。

另外要提的是当表空间不够用的时候,需要做的是增加表空间所在文件的数据文件的大小,或者新建几个比较大的数据文件,而不是创建很多个比较小的数据文件,这么做理由应该是很好理解的。

值得注意的表空间存储参数:

MINIMUM:CREATE TABLESPACE的一个参数,它能影响表空间段的分配,换句话说是能影响到表空间中空闲空间碎片的一个参数,当为它指定大小后,它能确保所有空闲的或者已分配的盘区的大小一定是它的倍数,以K或者M计算,系统的默认值似乎是64K。

ALTER TABLESPACE语句的限制:ALTER TABLESPACE语句可以用来修改一个表空间的存储参数,但是它不能用来修改INITIAL和MINEXTENTS,一个表空间的默认参数的新值只能影响到将来该表空间为段分配的盘区,而已有分配的还是照创建时的设定值。因此一旦设定了默认参数,最好不要随意修改。

合并表空间中的空闲空间:

先来看看空闲空间是如何存储的:一个表空间的空闲空间是一些相邻的空闲块构成的,这些空闲块的大小不用说当然是由MINIMUM设定的,当需要创建一个新的表空间存储段的时候,系统会在这些连续的空闲块中寻找大小大于新存储段大小的区间进行创建,而当一个表空间存储段被取消时它的空间将直接被标记成空闲块,这样就会造成表空间中,连续的空闲块大小越来越小,越来越不连续,那么在之后需要创建新的表空间段时,就无法保证新的表空间段的空间是连续的块,当然oracle会自动去做合并这个事,那我们可以通过管理来减轻系统的负担。

手动合并空闲的空间:ALTER TABLESPACE ... COALESCE 这个语句用来合所有的空闲空间,起到的作用类似于WINDOWS的磁盘整理,对操作者的权限要求是有 ALTER TABLESPACE 权限(似乎是句废话,但是如果发现无法执行的时候,不妨GRANT ... ALTER TABLESPACE),不过这条语句不能用来合并一个表空间中不同盘区的所有空闲空间,如果要做到所有盘区的空闲空间的整理,除非导出空间数据再重新创建表空间再导入数据,而且最好只有一个盘区。

那么如何才能了解表空间中空闲空间的分布呢(就是如何监控空闲空间)?有几个视图帮我们记录了这些数据:DBA_FREE_SPACE 、 DBA_FREE_SPACE_COALESCE。我们要做的就是在上面做查询,得到某个表空间中空闲空间的分布:SELECT BLOCK_ID, BYTES, BLOCKS, FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME = '**' ORDER BY BLOCK_ID; 结果显而易见。

另外表空间的管理还有设置表空间是否联机。表空间可以有两种状态:脱机和联机,什么意思?脱机就是证明这表空间虽然存在但是它不能被使用,联机则相反。修改语句就是:ALTER TABLESPACE ……[ONLINE/OFFLINE]。

使用只读表空间

只读表空间:从字面意思理解就是一个只能执行查询等不影响表空间内存储的数据的事务的一个表空间。

那现在来看看它的定义:只读表空间的主要目的是消除执行数据库大量的静态部分的备份和恢复的需要。

因此只读表空间应该有如下特性:

?任何用户都不可以在表空间创建或修改数据

?没有回滚段

?可以随意拷贝,甚至刻录到光盘中

那么如何使一个表空间变成只读状态呢?我们知道任何一个表空间在创建后默认都是可读

写状态,我们就需要改变这种状态:ALTER TABLESPACE ……READ ONLY;这条命令需要用户拥有ALTER/MANAGE TABLE 权限。

要设定一个表空间成为只读表空间需要注意几点:

?表空间必须是联机的

?表空间没有包括任何的活动回滚段

?表空间不能是SYSTEM(正是因为SYSTEM总是有活动的回滚段)

?该表空间没有涉及的联机备份,因为在备份的最后会要求更新表空间中所有的头文件新特性:在使用ALTER TABLE ……READ ONLY;之前不需要等待表空间完成所有的事务,系统会自动转入过渡的只读模式,该模式将阻止一切新的事务进行,但是允许现有事务进行提交和回滚。

注意:过渡状态只在初始化参数PATIBLE(和数据库版本有关的参数)的值为8.1.0以上才会出现,如果是小于8.1.0的值,当READ ONLY语句会在有活动的事务的情况下失败。

小窍门:在执行ALTER TABLE ……READ ONLY;语句之前可以先对每个表先执行SELECT * FROM ……之类的查询语句,这样可以保证在表空间的数据块可以在随后被最有效的访问,同时也清除了oracle需要检查最近修改块的事务状态的必要,因为最后执行的是查询事务。两个有用的视图:

V$SESSION:我们可以通过利用它的SQL_TEXT字段来查询一个语句的事务的会话地址

V$TRANSACTION:它记载着当前活动事务的启动S,我们可以根据通过上面那X视图查询到

的事务会话地址来查询该事务的状态。

延迟只读表空间的打开

当一个非常大的数据库的实质性部分存储在位于低速访问设备(如光盘)的只读表空间中或分级存储时,要考虑将初始化参数READ_ONLY_OPEN_DELAYED设置为TRUE,这将加速某些操作,主要是打开数据库,其原因是在需要读取存储它的数据时,使只读表空间的数据文件只在第一次被访问。但是,这么做有缺点:表空间中只读文件不会被再访问到,除非是RECOVER TABLESPACE和ALTER TALESPACE OPEN RESETLOGS因为它们忽视初始化参数可以继续访问只读文件。

既然表空间可以改为只读状态,那么一定也有办法把只读状态的表空间转为可读写状态:ALTER TABLESPACE ……READ AND WRITE;需要的权限和改只读的一样,条件就是该只读表空间必须是联机的。

取消表空间(删除表空间)

如果不需要一个表空间及其内容,我们就需要在数据库中取消这个表空间,语句:DROP TABLESPASE ……【INCLUDING CONTENTS】;需要DROP TABLESPACE权限。如果这个表空间本来就是空的(没有表、视图及其他结构)则不需要INCLUDING CONTENTS字句。不过这个语句并不会删除与表空间关联的数据文件,如果在取消表空间时也想把和表空间有关联的数据文件一并删除就需要如下语句:DROP TABLESPACE ……INCLUDING CONTENTS AND DATAFILES;

一个重要的包DBMS_SPACE_ADMIN:

这个包为本地管理的所有表空间提供带有故障诊断和修复功能的管理程序。

包含的管理程序有:

SEGMENT_VERIFY:验证该段盘区映射的一致性

SEGMENT_CURRUPT:标注该段为损坏或有效,以便执行恰当的错误恢复

SEGMENT_DROP_CORRUPT:取消一个当前标注为损坏的段(不回收空间)

SEGMENT_DUMP:卸下一个给定段的段头部和盘区映射

TABLESPACE_VERIFY:验证该表空间中段的位图和盘区映射是否同步

TABLESPACE_REBUILD_BITMAPS:重建适当的位图

TABLESPACE_FIX_BITMAPS:在位图中标注适当的数据块地址X围为空闲或已用TABLESPACE_REBUILED_QUOTAS:为给定表空间重建限额

TABLESPACE_MIGERATE_FROM_LOCAL:将一个本地管理的表空间移植为字典管理的表空间TABLESPACE_MIGRATE_TO_LOCAL:将一个字典管理的表空间移植为本地管理的表空间TABLESPACE_RELOCATE_BITMAPES:将位图重定位到指定的目的地

TABLESPACE_FIX_SEGMENT_STATES:修改移植被放弃的表空间中数据段的状态

一些有关表空间信息的表或视图:

V$TABLESPACE:来自控制文件的所有表空间的名称和编号

DBA_TABLESPACE,USER_TABLESPACE:所有用户的表空间说明

DBA_SEGMENTS,USER_SEGMENTS:所有用户表空间种段的信息

DBA_EXTENTS,USER_EXTENTS:所有用户表空间中数据盘区的信息

DBA_FREE_SPACE,USER_FREE_SPACE:所有用户表空间中的空闲盘区的信息

V$DATAFILE:关于所有数据文件的信息,包括所属表空间和表空间号

V$TEMPFILE:关于所有临时文件的信息,包括所属表空间和表空间号

DBA_DATA_FILES:显示属于表空间的数据文件

DBA_TEMP_FILES:显示属于表空间的临时文件

V$TEMP_EXTENT_MAP:所有本地管理的临时表空间中所有盘区的信息

V$TEMP_EXTENT_POOL:由每个实例缓存和使用临时表空间(本地管理的)的状态

V$TEMP_SPACE_HEADER:显示每个临时文件的已用/空闲空间

DBA_USERS:所有用户默认的和临时表空间

DBA_TS_QUOTAS:列出所有用户表空间限额

V$SORT_SEGMENT:关于一个给定实例的每个排序段的信息,只有在表空间是TEMPOARY:类型时更新

V$SORT_USER:用户使用的临时排序空间和临时的/永久的表空间

Oracle表空间操作详解

Oracle表空间操作详解 1.创建表空间: createtablespacedatafile '' size autoextend on next maxsize eg: createtablespace sales datafile 'c:\1.txt' size 10m autoextend on next 1m maxsize 100m 2.为表空间增加数据文件: altertablespace add datafile 'filepath' size autoextend on next maxsizefilemaxsize[unlimited]; eg: altertablespace sales datafile 'c:\2.txt' size 10m autoextend on next 1m maxsize unlimited 3.调整表空间: alter database datafile 'filepath' resize ;--重置表空间的大小 eg: alter database datafile 'c:\2.txt' resize 10m 在实际使用中我们经常会遇到oracle某个表空间占用了大量的空间而其中的数据量却只占用了少量空间,此时我们可以用ALTER DATABASE DATAFILE '***.dbf' RESIZE nnM的命令来收缩表空间,但在收缩的过程中会遇到ora-03297错误,表示在所定义的空间之后有数据存在,不能收缩,此时的解决办法有: (1). 先估算该表空间内各个数据文件的空间使用情况: SQL>select file#,name from v$datafile;

Oracle临时表空间管理及清理策略

正常来说,在完成Select语句、create index等一些使用TEMP表空间的排序操作后,Oracle是会自动释放掉临时段a的。但有些有侯我们则会遇 到临时段没有被释放,TEMP表空间几乎满的状况,甚至是我们重启了数据库仍没有解决问题。这个问题在论坛中也常被网友问到,下面我总结 一下,给出几种处理方法。 法一、重启库 库重启时,Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种方法缺少了一点的 应用机会,不过这种方法还是很好用的。 法二、Metalink给出的一个方法 修改一下TEMP表空间的storage参数,让Smon进程观注一下临时段,从而达到清理和TEMP表空间的目的。 SQL>alter tablespace temp increase 1; SQL>alter tablespace temp increase 0; 法三、我常用的一个方法,具体内容如下: 1、使用如下语句a查看一下认谁在用临时段 SELECT username, sid, serial#, sql_address, machine, program, tablespace, segtype, contents

FROM v$session se, v$sort_usage su WHERE se.saddr=su.session_addr 2、那些正在使用临时段的进程 SQL>Alter system kill session 'sid,serial#'; 3、把TEMP表空间回缩一下 SQL>Alter tablespace TEMP coalesce; 法四、使用诊断事件的一种方法,也是被我认为是“杀手锏”的一种方法 1、确定TEMP表空间的ts# SQL>select ts#, name from sys.ts$ ; TS# NAME ----------------------- 0 SYSYEM 1 RBS 2 USERS 3* TEMP 4 TOOLS 5 INDX 6 DRSYS 2、执行清理操作

Oracle tablespace创建参数

Oracle tablespace创建参数 ORACLE中,表空间是数据管理的基本方法,所有用户的对象要存放在表空间中,也就是用户有空间的使用权,才能创建用户对象.否则是不充许创建对象,因为就是想创建对象,如表,索引等,也没有地方存放,Oracle会提示:没有存储配额.因此,在创建对象之前,首先要分配存储空间. 分配存储,就要创建表空间: 创建表空间示例如下: CREATE TABLESPACE "SAMPLE" LOGGING DATAFILE 'D:\ORACLE\ORADATA\ORA92\LUNTAN.ora' SIZE 5M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO 上面的语句分以下几部分: 第一: CREATE TABLESPACE "SAMPLE" 创建一个名为 "SAMPLE" 的表空间. 对表空间的命名,遵守Oracle 的命名规范就可了. ORACLE可以创建的表空间有三种类型: (1)TEMPORARY: 临时表空间,用于临时数据的存放; 创建临时表空间的语法如下: CREATE TEMPORARY TABLESPACE "SAMPLE"...... (2)UNDO : 还原表空间. 用于存入重做日志文件. 创建还原表空间的语法如下: CREATE UNDO TABLESPACE "SAMPLE"...... (3)用户表空间: 最重要,也是用于存放用户数据表空间 可以直接写成: CREATE TABLESPACE "SAMPLE" TEMPORARY 和 UNDO 表空间是ORACLE 管理的特殊的表空间.只用于存放系统相关数据. 第二: LOGGING 有 NOLOGGING 和 LOGGING 两个选项, NOLOGGING: 创建表空间时,不创建重做日志. LOGGING 和NOLOGGING正好相反, 就是在创建表空间时生成重做日志. 用NOLOGGING时,好处在于创建时不用生成日志,这样表空间的创建较快,但是没能日志,数据丢失后,不能恢复,但是一般我们在创建表空间时,是没有数据的,按通常的做法,是建完表空间,并导入数据后,是要对数据做备份的,所以通常不需要表空间的创建日志,因此,在创建表空间时,选择NOLOGGING,以加快表空间的创建速度. 第三: DATAFILE 用于指定数据文件的具体位置和大小. 如: DATAFILE 'D:\ORACLE\ORADATA\ORA92\LUNTAN.ora' SIZE 5M

ORACLE项目2:关于创建表参数的详细说明

命令格式(红字为关键字,紫字为注释) CREATE TABLE“方案名”.“表名” (字段1 数据类型(长度), 字段2 数据类型(长度), ……., 字段n 数据类型(长度), CONSTRAINT约束名1 约束类型(约束参数), CONSTRAINT约束名2 约束类型(约束参数) ……… CONSTRAINT约束名n 约束类型(约束参数)) TABLESPACE “表空间名” STORAGE (INITIAL 1M*第一个区的大小*NEXT 1.5M*第二个区的大小* MINIEXTENTS 2 *创建时已分配的区数* MAXEXTENTS 5 *可分配最大区数* PCTINCREASE10 *每个区相对于上个区增长的百分比* BUFFER_POOL DEFAULT *其参数有DEFAUT,RECYCLE和KEEP*) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255; 要点释义 PCTFREE:指定表的每一个数据块为将来更新现有表行所保留的空间百分比。其值必须在0和99之间,默认值为10。 PCTUSED:指定维持表的每个数据块已用空间的最小百分比。当块中已用空间低于PCTUSED的时候,该块就成为新行插入对象。默认值40。 注意:PCTFREE和PCTUSED之和要小于100,两者结合可以确定是把新行插入现有数据块还是新块中。 INITRANS:分配给表的每一个数据块的并发事务条目的初值。范围1-255,默认1。通常不需要改变INITRANS值。 每个更新块的事务需要该块中的一个事务条目,事务条目大小取决于操作系统,该参数保证最小数目的并发事务可以更快,有助避免动态分配事务条目的开销。 MAXTRANS:可更新分配给表的数据块的最大并发事务数。范围1-255。默认255。一般不要更改MAXTRANS的值。 如果一个块中的并发事务超过了INITRANS的值,那么ORACLE在块中动态分配事务条目,直到超过MAXTRANS值。

oracle表空间管理

实验一数据文件和表空间的管理 【开发语言及实现平台或实验环境】 Oracle10g 【实验目的】 (1)熟悉ORACLE的环境,学习使用SQL*Plus与ORACLE进行交互;(2)掌握连接数据库以及断开连接的方法; (3)掌握数据文件和控制文件的管理基本命令 (4)掌握表空间管理的基本命令 【实验原理】 1.SQL*Plus命令

2.数据文件的管理 (1)创建数据文件 数据文件依附于表空间而存在,创建数据文件就是向表空间添加文件 在创建数据文件时应该根据文件数据量的大小确定文件的大小以及文件的增长方式。 语法: ALTER TABLESPACE…ADD DA TAFILE ALTER TABLESPACE…ADD TEMPFILE 例:向ORCL数据库的USERS表空间中添加一个大小为10 MB的数据文件。 ALTER TABLESPACE USERS ADD DA TAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADA TA\ORCL\USERS02.DBF' SIZE 10M; (2)修改数据文件大小 创建后修改数据文件为自动增长: AUTOEXTEND ON NEXT …MAXSIZE…|UNLIMITED 手工改变数据文件的大小 ALTER DA TABASE DA TAFILE…RESIZE… 例:为ORCL数据库的USERS表空间添加一个自动增长的数据文件。 ALTER TABLESPACE USERS ADD DA TAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADA TA\ORCL\USERS03.DBF' SIZE 10M AUTOEXTEND ON NEXT 512K MAXSIZE 50M; 例:修改ORCL数据库USERS表空间的数据文件USERS02.DBF为自动增长方式。ALTER DA TABASE DA TAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADA TA\ORCL\USERS02.DBF ' AUTOEXTEND ON NEXT 512K MAXSIZE UNLIMITED; 例:取消ORCL数据库USERS表空间的数据文件USERS02.DBF的自动增长方式。ALTER DA TABASE DA TAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADA TA\ORCL\USERS02.DBF ' AUTOEXTEND OFF; 例:将ORCL数据库USERS表空间的数据文件USERS02.DBF大小设置为8 MB 。ALTER DA TABASE DA TAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADA TA\ORCL\USERS02.DBF' RESIZE 8M; (3)删除数据文件 删除某个表空间中的某个空数据文件 ALTER TABLESPACE…DROP DA TAFILE 例:删除USERS表空间中的数据文件USERS003.DBF。 ALTER TABLESPACE USERS DROP DA TAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADA TA\ORCL\USERS003.DBF'; 3.表空间的管理

Oracle如何创建表空间-2012年5月1日

oracle创建表空间 SYS用户在CMD下以DBA身份登陆: 打开黑窗口 在CMD中打sqlplus /no log 然后再 conn / as sysdba // 分为四步 //第1步:创建临时表空间,路径自己换 create temporary tablespace user_temp tempfile 'E:\AProgramMy\Oracle11g\tablespace\user_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; //第2步:创建数据表空间,路径自己换 create tablespace user_data logging datafile 'E:\AProgramMy\Oracle11g\tablespace\user_data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; (删除表空间: DROP TABLESPACE user_data INCLUDING CONTENTS AND DATAFILES; )

//第3步:创建用户并指定表空间 create user yzk identified by yzk default tablespace user_data temporary tablespace user_temp; (删除用户: drop user yzk cascade; ) //第4步:给用户授予权限,没有create sessio n权限就不能登录! grant connect,resource,create sessio n,create table to yzk; (撤销权限: revoke connect,resource,create session,create table from yzk; ) 查看已创建的表空间:select tablespace_name,status from dba_tablespaces; 这样就可以用此用户登录了,登录后是没有表的(如果管理员登录会有很多乱七八糟的表看着十分不爽,都不知道哪个是自己创建的)因为用户和表空间都是新的所以什么也没,此时就可以新建表了,终于解决了我的疑问,爽! --------------------------------------------------------------------------------- //以后以该用户登录,创建的任何数据库对象都属于user_temp 和user_data 表空间, 这就不用在每创建一个对象给其指定表空间了 查看创建的表空间的名称和状态: select tablespace_name,status from dba_tablespaces; 撤权: revoke 权限... from 用户名; 删除用户命令 drop user user_name cascade; 删除表空间 DROP TABLESPACE data01 INCLUDING CONTENTS AND

Oracle存储空间管理及应用方案

Oracle存储空间管理及应用 摘要:本文详细介绍了Oracle存储架构及其存储体系的管理和应用,包括表空间、回滚段、临时表等,还对其在管理和应用时常见的错误进行了分析探讨 主题词:Oracle技术表空间数据文件回滚段临时表错误 一、引言 数据库空间的有效使用和维护不仅是数据库管理的重要工作,也是大多数开发人员所关心的内容,它直接关系到数据库性能的发挥。 Oracle提供了不少方法用于数据空间的使用、监控和维护,同时也在各版本中陆续对这方面的功能进行了增强,目的在于简化这方面工作的复杂度,提高应用的运行效率。 本文希望通过系统地介绍这方面的有关概念,让大家能更好地规划使用数据空间,正确使用Oracle提供的有关功能特性,提高应用的执行效率。 二、O racle数据库的存储体系及有关概念 2.1 Oracle数据库的逻辑结构 从应用者的角度来考察数据库的组成。自下向上,数据库的逻辑结构共有6层:

2.2 Oracle数据库的存储结构 数据库的存储结构指逻辑结构在物理上的实现,共有3层 其中: 数据文件:用于存放所有的数据,以DBF为扩展名。 日志文件:记录了对数据库进行的所有操作,以LOG为扩展名。 控制文件:记录了数据库所有文件的控制信息,以CTL为扩展名。 综上,Oracle数据库的数据存储空间在逻辑上分为多个表空间,每个表空间由系统中的一个或多个物理数据文件构成;Oracle存储数据的基本单位是块,其大小在建库时由DB_BLOCK_SIZE参数确定,一个或多个连续的块构成一个区间(EXTENT),它作为数据对象存储的基本单位来使用。在Oracle中,每个基本数据对象使用的空间称为段(SEGMENT),段存放在唯一的表空间上,每个段实际上是一系列区片(更为准确地是数据块)的集合。每个简单数据对象对应一个段;对于分区对象如分区表、索引,则每个(子)

Oracle 11g表空间——创建和扩展(永久)表空间

Oracle 11g表空间——创建和扩展(永久)表空间 本文内容 创建(永久)表空间 查看表空间 扩展表空间 创建(永久)表空间 Oracle 按照区和段空间进行管理表空间。 区管理方式 - 针对区的分配方式的不同,有两种方式:字典管理方式 (dictionary-managed tablespace,DMT)和本地管理方式(local-managed tablespace,LMT)。Oracle 10g 开始强烈建议使用 LMT 方式。从 Oracle 9i 开始,创建表空间时默认使用 LMT。 其中,LMT 区的分配方式: 统一(UNIFORM)- 统一分配。指定表空间中所有区的大小都相同。默认值是 1MB。自动(AUTOALLOCATE 或 SYSTEM)- 自动分配。指定有 Oracle 系统来自动管理区的大小。这是默认设置。 段管理方式– LMT 方式,除了可以指定区的分配方式外,还可以指定段的管理方式。段空间管理方式主要是指 Oracle 用来管理段中已用数据块和空闲数据块的机制。分为两种: 手动(MANUAL)- Oracle 将使用空闲列表(free list)管理段的已用数据块和空闲数据块。这是传统的段空间管理方式,为了与以前的版本兼容。 自动(AUTO)- Oracle 将使用位图(bitmap)来管理段的已用数据块和空闲数据块。通过位图中单元的取值判断段中的数据块是否可用。 字典管理方式没有段管理。 下面示例演示用本地管理方式创建表空间。这是 Oracle 推荐的方式。 示例 1:使用 AUTOALLOCATE 区分配方式。创建表空间 mytbs01,数据文件是 D:\oracledata\mytbs01_1.dbf,大小为 2M,并指定区分配方式为 AUTOALLOCATE。create tablespace mytbs01 datafile 'D:\oracledata\mytbs01_1.dbf' size 2M

oracle创建表与增删改

-- 数据准备:创建工资等级表 CREATE TABLE salgrade_test ( grade NUMBER (2), lowsal NUMBER (7, 2), hisal NUMBER (7, 2) ); -- 查看工资等级表结构 DESC salgrade; -- 查看工资等级表数据 SELECT * FROM salgrade_test; -- 插入数据 INSERT INTO salgrade_test VALUES (1, 10001, 99999); INSERT INTO salgrade_test VALUES (2, 8001, 10000); INSERT INTO salgrade_test VALUES (3, 6001, 8000); INSERT INTO salgrade_test VALUES (4, 4001, 6000); INSERT INTO salgrade_test VALUES (5, 1, 4000); -- 计算员工的薪水等级 SELECT NAME, salary, grade FROM emp_test, salgrade_test WHERE emp_test.salary BETWEEN salgrade_test.lowsal AND salgrade_test.hisal; -- ------------------------------------------------------SELECT NAME, salary, grade FROM emp_test

FULL JOIN salgrade_test ON emp_test.salary BETWEEN salgrade_test.lowsal AND salgrade_test.hisal; -- 复制表:只复制结构 , 不复制数据 CREATE TABLE salgrade_copy AS ( SELECT * FROM salgrade_test WHERE 1 <> 1 ); SELECT * FROM salgrade_copy; -- 复制表:复制一部分数据----通过设置别名的方式 , 指定新表中的列名(year_sal) CREATE TABLE emp_test_copy AS ( SELECT emp_id, NAME, salary * 12 year_sal FROM emp_test WHERE dept_test_id = 10 ); SELECT * FROM emp_test_copy; -- 复制表:复制一部分数据 -- 新表中的列名 CREATE TABLE emp_count (did, emp_num) AS ( SELECT dept_test_id, COUNT (*) FROM emp_test GROUP BY dept_test_id ); SELECT * FROM emp_count; -- 创建一个同 emp 表结构相同的空表 , 将部门号为 10 的员工信息放入该表 -- 如果有一张表 emp 的数据量为一百万条 , 此时需要建立 1 张测试表只放入少量测试数据( 如 100条 ) , 执行步骤如下所示: -- 第 1 步创建一个空表 CREATE TABLE emp_copy AS (

Oracle表空间和数据文件的管理

第六章表空间和数据文件的管理 6.1 Oracle引入逻辑结构的目的 Oracle数据库管理系统并没有像不少其它数据库管理系统那样直接地操作数据文件,而是引入一组逻辑结构。如图6-1所示。 图6-1 图6-1的虚线左边为逻辑结构,右边为物理结构。与计算机原理或计算机操作系统中所讲的有些不同,在Oracle数据库中,逻辑结构为Oracle引入的结构,而物理结构为操作系统所拥有的结构。 曾有不少学生问过我同样的一个问题,那就是Oracle为什么要引入逻辑结构呢? 首先可能是为了增加Oracle的可移植性。Oracle公司声称它的Oracle数据库是与IT 平台无关的,即在某一厂家的某个操作系统上开发的Oracle数据库(包括应用程序等)可以几乎不加修改地移植到另一厂家的另外的操作系统上。要做到这一点就不能直接操作数据文件,因为数据文件是跟操作系统相关的。 其次可能是为了减少Oracle从业人员学习的难度。因为有了逻辑结构Oracle的从业人员就可以只对逻辑结构进行操作,而在所有的IT平台上逻辑结构的操作都几乎完全相同,至于从逻辑结构到物理结构的映射(转换)是由Oracle数据库管理系统来完成的。 6.2 Oracle数据库中存储结构之间的关系 其实图6-1类似于一个Oracle数据库的存储结构之间关系的实体-关系图。如果读者学过实体-关系模型(E-R模型)的话,从图6-1中可以很容易地得到Oracle数据库中存储结构之间的关系。为了帮助那些没有学过E-R模型的读者理解图6-1,也是为了帮助那些

学过但已经忘的差不多了的读者恢复一下记忆,在下面对E-R模型和图6-1给出一些简单的解释。 在图6-1中,园角型方框为实体,实线表示关系,单线表示一的关系,三条线(鹰爪)表示多的关系。于是可以得到: 每个数据库是由一个或多个表空间所组成(至少一个)。 每个表空间基于一个或多个操作系统的数据文件(至少一个)。 每个表空间中可以存放有零个或多个段(Segment)。 每个段是由一个或多个区段(Extent)所组成。 每个区段是由一个或多个连续的Oracle数据块所组成。 每个Oracle数据块是由一个或多个连续的操作系统数据块所组成。 每个操作系统数据文件是由一个或多个区段(Extent)所组成。 每个操作系统数据文件是由一个或多个操作系统数据块所组成。 有关段,区段,和Oracle数据块等我们在接下来的章节中要详细地介绍。 6.3 表空间和数据文件之间的关系及表空间的分类 通过前面的讨论可知:Oracle将数据逻辑地存放在表空间里,而物理地存放在数据文件里。表空间(Tablespaces)在任何一个时刻只能属于一个数据库,但是反过来并不成立,因为一个数据库一般都有多个表空间。每个表空间都是由一个或多个操作系统的数据文件所组成,但是一个操作系统的数据文件只能属于一个表空间。 表空间可以被进一步划分成一些更小的逻辑存储单位。在一个Oracle数据库中,每个数据文件(Data files)可以而且只能属于一个表空间和一个数据库。数据文件实际上是存储模式对象数据的一个容器/仓库。 在一个Oracle数据库中一般有两类表空间,他们是系统(SYSTEM)表空间和非系统(Non-SYSTEM)表空间。 系统(SYSTEM)表空间是与数据库一起建立的,在系统表空间中存有数据字典,在系统表空间中还包含了系统还原(回滚)段。虽然在系统表空间中可以存放用户数据,但考虑到Oracle系统的效率和管理上的方便,在系统表空间上不应该存放任何用户数据。非系统(Non-SYSTEM)表空间可以由数据库管理员创建,在非系统表空间中存储一些单独的段,这些段可以是用户的数据段,索引段,还原段,和临时段等。引入非系统表空间可以方便磁盘空间的管理,也可以更好地控制分配给用户磁盘空间的数量。引入非系统表空间还可以将静态数据和动态数据有效地分开,也可以按照备份的要求将数据分开存放。使用如下的命令创建一个非系统表空间:CREATE TABLESPACE表空间名 [DATAFILE子句] [MINIMUM EXTENT 正整数[K|M]] [BLOCKSIZE正整数[K]] [LOGGING|NOLOGGING] [DEFAULT 存储子句] [ONLINE|OFFLINE] [PERMANENT|TEMPORARY] [区段管理子句] [段管理子句] 在这里对以上命令中的一些子句和选项给出进一步的解释: 表空间名:所要创建的表空间名。

在Oracle中查询表的大小和表空间的大小

在Oracle中查询表的大小和表空间的大小 上一篇/ 下一篇 2011-08-28 11:59:01 / 个人分类:计算机 查看( 443 ) / 评论( 0 ) / 评分( 0 / 0 ) 原文:https://www.doczj.com/doc/4e7672112.html,/cosio/article/details/3978747 有两种含义的表大小。一种是分配给一个表的物理空间数量,而不管空间是否被使用。可以这样查询获得字节数: select segment_name, bytes from user_segments where segment_type = 'TABLE'; 或者 Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name 另一种表实际使用的空间。这样查询: analyze table emp compute statistics; select num_rows * avg_row_len from user_tables where table_name = 'EMP'; 查看每个表空间的大小 Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name 1.查看剩余表空间大小

SELECT tablespace_name 表空间,sum(blocks*8192/1000000) 剩余空间M FROM dba_free_space GROUP BY tablespace_name; 2.检查系统中所有表空间总体空间 select https://www.doczj.com/doc/4e7672112.html,,sum(a.bytes/1000000)总空间from v$datafile a,v$tablespace b where a.ts#=b.ts# group by https://www.doczj.com/doc/4e7672112.html,; 1、查看Oracle数据库中表空间信息的工具方法: 使用oracle enterprise manager console工具,这是oracle的客户端工具,当安装oracle服务器或客户端时会自动安装此工具,在windows操作系统上完成oracle安装后,通过下面的方法登录该工具:开始菜单——程序——Oracle-OraHome92——Enterprise Manager Console(单击)——oracle enterprise manager console登录——选择…独立启动?单选框——…确定? ——…oracle enterprise manager console,独立? ——选择要登录的…实例名? ——弹出…数据库连接信息? ——输入?用户名/口令? (一般使用sys用户),?连接身份?选择选择SYSDBA——…确定?,这时已经成功登录该工具,选择…存储? ——表空间,会看到如下的界面,该界面显示了表空间名称,表空间类型,区管理类型,以”兆”为单位的表空间大小,已使用的表空间大小及表空间利用率。 图1 表空间大小及使用率 2、查看Oracle数据库中表空间信息的命令方法:

Oracle tablespace (表空间)的创建、删除、修改、扩展及检查等

Oracle tablespace (表空间)的创建、删除、修改、扩展及检查等 oracle 数据库表空间的作用 1.决定数据库实体的空间分配; 2.设置数据库用户的空间份额; 3.控制数据库部分数据的可用性; 4.分布数据于不同的设备之间以改善性能; 5.备份和恢复数据。 --oracle 可以创建的表空间有三种类型: 1.temporary: 临时表空间,用于临时数据的存放; create temporary tablespace "sample"...... 2.undo : 还原表空间. 用于存入重做日志文件. create undo tablespace "sample"...... 3.用户表空间: 最重要,也是用于存放用户数据表空间 create tablespace "sample"...... --注:temporary 和undo 表空间是oracle 管理的特殊的表空间.只用于存放系统相关数据. --oracle 创建表空间应该授予的权限 1.被授予关于一个或多个表空间中的resource特权; 2.被指定缺省表空间; 3.被分配指定表空间的存储空间使用份额; 4.被指定缺省临时段表空间。 select tablespace_name "表空间名称",status "状态",extent_management "区管理方式",allocation_type "磁盘扩展管理方式",segment_space_management "段管理方式" from dba_tablespaces; --查询各个表空间的区、段管理方式 --1、建立表空间 --语法格式: create tablespace 表空间名

查看Oracle表空间SQL语句

查看Oracle表空间SQL语句 1.查看所有表空间大小 SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024tablespacesize_M FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME; 2.未使用的表空间大小 SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024TABSPACE_FREE_SIZE_M FROM DBA_FREE_SPACE group by TABLESPACE_NAME; 3.所有使用空间可以这样计算 SELECT a.tablespace_name,a.total,b.free,a.total-b.free used from (SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024TOTAL FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME)A, (SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024FREE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME)B where a.tablespace_name=b.tablespace_name; 4.下面这条语句查看所有段的大小 select segment_nam,sum(bytes)/1024/1024from USER_EXTENTS GROUP BY segment_name; 5.在命令行情况下如何将结果放到一个文件里用到了telnet SET TRIMSPOOL ON SET LINESIZE2000 SET PAGESIZE2000 SET NEWPAGE1 SET HEADING OFF SET TERM OFF SPOOL D:\EXP.TXT SELECT*FROM V$DATABASE; spool off 6.查看当前正在使用的临时表空间大小 SELECT https://www.doczj.com/doc/4e7672112.html,ERNAME,SE.SID,SU.BLOCKS*TO_NUMBER(RTRIM(P.VALUE))AS SPACE,tablespace,segtype,sql_text FROM V$SORT_USAGE SU,V$PARAMETER P,V$SESSION SE,V$SQL S WHERE https://www.doczj.com/doc/4e7672112.html,='db_block_size' AND SU.SESSION_ADDR=SE.SADDR AND S.HASH_VALUE=SU.SQLHASH AND S.ADDRESS=SU.SQLADDR

Oracle用户管理、表空间、临时表空间、索引学习

一、用户的创建和管理 创建和删除用户是Oracle用户管理中的常见操作,但这其中隐含了Oracle数据库系统的系统权限与对象权限方面的知识。掌握还Oracle用户的授权操作和原理,可以有效提升我们的工作效率。Oracle数据库的权限系统分为系统权限与对象权限。系统权限( Database System Privilege )可以让用户执行特定的命令集。例如,CREATE TABLE权限允许用户创建表,GRANT ANY PRIVILEGE 权限允许用户授予任何系统权限。对象权限( Database Object Privilege )可以让用户能够对各个对象进行某些操作。例如DELETE权限允许用户删除表或视图的行,SELECT权限允许用户通过select从表、视图、序列(sequences)或快照(snapshots)中查询信息。 每个Oracle用户都有一个名字和口令,并拥有一些由其创建的表、视图和其他资源。Oracle 角色(role)就是一组权限(privilege)(或者是每个用户根据其状态和条件所需的访问类型)。用户可以给角色授予或赋予指定的权限,然后将角色赋给相应的用户。一个用户也可以直接给其他用户授权。 1、创建用户 Oracle内部有两个建好的用户:SYSTEM和SYS。用户可直接登录到SYSTEM用户以创建其他用户,因为SYSTEM具有创建别的用户的权限。在安装Oracle时,用户或系统管理员首先可以为自己建立一个用户。例如: create user user01 identified by u01; 该命令还可以用来设置其他权限,详细情况参见自学资料。要改变一个口令,可以使用alter user命令: alter user user01 identified by usr01; 现在user01的口令已由“u01”改为“usr01”。 2、删除用户 删除用户,可以使用drop user命令,如下所示: drop user user01; 如果用户拥有对象,则不能直接删除,否则将返回一个错误值。指定关键字CASCADE,可删除用户所有的对象,然后再删除用户。下面的例子用来删除用户与其对象: drop user user01 CASCADE; 3、三种标准角色

oracle数据库建表空间语句汇总

建立表空间和用户的步骤: 用户 建立:create user 用户名identified by "密码"; 授权:grant create session to 用户名; grant create table to 用户名; grant create tablespace to 用户名; grant create view to 用户名; 表空间 建立表空间(一般建N个存数据的表空间和一个索引空间): create tablespace 表空间名 datafile ' 路径(要先建好路径)\***.dbf ' size *M tempfile ' 路径\***.dbf ' size *M autoextend on --自动增长 --还有一些定义大小的命令,看需要 default storage( initial 100K, next 100k, ); 用户权限 授予用户使用表空间的权限: alter user 用户名quota unlimited on 表空间; 或alter user 用户名quota *M on 表空间; --表空间 CREATE TABLESPACE deej DA TAFILE 'E:\database\deej.dbf' size 2G EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; --索引表空间 CREATE TABLESPACE sdt_Index DA TAFILE 'F:\tablespace\demo' size 512M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; --2.建用户 create user deej identified by deej default tablespace deej; --3.赋权

oracle创建表

CREATE TABLE DEPT(id NUMBER(7),name VARCHAR2(25)); 2、将Departments表中数据插入到DEPT表中 SELECT * FROM HR.DEPARTMENTS; INSERT INTO DEPT(ID,NAME) SELECT * FROM DEPARTMENTS; CREATE TABLE EMP (id NUMBER(7),last_name VARCHAR2(25),first_name VARCHAR2(25),dept_id NUMBER(7)); 4、修改EMP表,允许输入更长(50)员工的姓氏(LAST_NAME) ALTER table EMP modify(last_name varchar2(50)); 5、在数据字典中确认DEPT表和EMP表的创建结果 DESCRIBE dept; DESCRIBE emp; 6、根据表Employees的结构创建表Employees2表,仅包含EMPLOYEE_ID、FIRST_NAME、 LAST_NAME、SALARY和DEPARTMENT_ID。将新表中的各列分别命名为EMPLOYEE_ID、FIRST_NAME、LAST_NAME、SALARY和DEPT_ID CREATE TABLE employees2 as SELECT employee_id,first_name,last_name,salary,department_id dept_id FROM employees; 7、删除EMP表 HR> drop table emp; 8、将EMPLOYEES2表重命名为EMP HR> alter table employees2 rename to emp; 9、删除表EMP的FIRST_NAME列,并确认

oracle创建表空间命令

eclipse+webservice开发实例 spring mvc数据绑定 oracle11g 创建表空间和用户授权 2013-01-27 10:54:18| 分类:默认分类| 标签:|举报|字号大中小订阅 *分为四步*/ /*第1步:创建临时表空间*/ create temporary tablespace user_temp tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; /*第2步:创建数据表空间*/ create tablespace AKJY_DATA logging datafile 'E:\oracleDATA\akjy_data.dbf' size 50m autoextend on next 50m maxsize 2048m extent management local; eclipse+webservice开发实例 spring mvc数据绑定 create tablespace DATA datafile 'D:\Program Files\oracle11g\DATA.dbf’size 1G autoextend on next 50m maxsize 20480m oracle11g 创建表空间和用户授权 2013-01-27 10:54:18| 分类:默认分类| 标签:|举报|字号大中小订阅 *分为四步*/ /*第1步:创建临时表空间*/ create temporary tablespace user_temp tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; /*第2步:创建数据表空间*/

相关主题
文本预览
相关文档 最新文档