文档库 最新最全的文档下载
当前位置:文档库 › Oracle用户管理、表空间、临时表空间、索引学习

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

Oracle用户管理、表空间、临时表空间、索引学习
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为了兼容以前的版本,提供了三种标准的角色(role):CONNECT、RESOURCE和DBA。

1. CONNECT Role(连接角色)

临时用户,特别是那些不需要建表的用户,通常只赋予他们CONNECTrole。CONNECT是使用Oracle的简单权限,这种权限只有在对其他用户的表有访问权时,包括select、insert、update 和delete等,才会变得有意义。拥有CONNECT role的用户还能够创建表、视图、序列(sequence)、簇(cluster)、同义词(synonym )、会话(session)和与其他数据库的链(link)。

2. RESOURCE Role(资源角色)

更可靠和正式的数据库用户可以授予RESOURCE role。RESOURCE提供给用户另外的权限以创建他们自己的表、序列、过程(procedure)、触发器(trigger)、索引(index)和簇(cluster)。

3. DBA Role(数据库管理员角色)

DBA role拥有所有的系统权限----包括无限制的空间限额和给其他用户授予各种权限的能力。SYSTEM由DBA用户拥有。下面介绍一些DBA经常使用的典型权限。

(1)grant(授权)命令

下面对刚才创建的用户user01授权,命令如下:

grant connect, resource to user01;

(2)revoke(撤消)权限

已授予的权限可以撤消。例如撤消(1)中的授权,命令如下:

revoke connect, resource from user01;

(3)常用的数据对象权限有以下五个:

ALL ON 数据对象名,SELECT ON 数据对象名,UPDATE ON 数据对象名,DELETE ON 数据对象名, INSERT ON 数据对象名,ALTER ON 数据对象名

GRANT SELECT ON 表名 TO 用户名;

GRANT SELECT, INSERT, DELETE ON 表名 TO 用户名1,用户名2;

一个具有DBA角色的用户可以撤消任何别的用户甚至别的DBA的CONNECT、RESOURCE 和DBA的其他权限。当然,这样是很危险的,因此,除非真正需要,DBA权限不应随便授予那些不是很重要的一般用户。

撤消一个用户的所有权限,并不意味着从Oracle中删除了这个用户,也不会破坏用户创建的任何表;只是简单禁止其对这些表的访问。其他要访问这些表的用户可以象以前那样地访问这些表。

4、创建角色

除了前面讲到的三种系统角色----CONNECT、RESOURCE和DBA,用户还可以在Oracle创建自己的role。用户创建的role可以由表或系统权限或两者的组合构成。为了创建role,用户必须具有CREATE ROLE系统权限。下面给出一个create role命令的实例:

create role STUDENT;

这条命令创建了一个名为STUDENT的role。

一旦创建了一个role,用户就可以给他授权。给role授权的grant命令的语法与对对用户的语法相同。在给role授权时,在grant命令的to子句中要使用role的名称,如下所示:grant select on CLASS to STUDENT;

现在,拥有STUDENT 角色的所有用户都具有对CLASS 表的select权限。

5、删除角色

要删除角色,可以使用drop role命令,如下所示:

drop role STUDENT;

指定的role连同与之相关的权限将从数据库中全部删除。

二、数据文件和表空间的介绍

一个ORACLE数据库是数据的集合,被处理成一个单位。一个ORACLE数据库有一个物理结构和一个逻辑结构。

物理数据库结构是由构成数据库的操作系统文件所决定。每一个ORACLE数据库是由三种类型的文件组成:数据文件、日志文件和控制文件。数据库的文件为数据库信息提供真正的物理存储。逻辑数据库结构是用户所涉及的数据库结构。一个ORACLE数据库的逻辑结构由下列因素决定:

一个或多个表空间

数据库模式对象(即表、视图、索引、聚集、序列、存储过程)

逻辑存储结构如表空间(dataspace)、段(segment)和范围将支配一个数据库的物理空间如何使用。模式对象(schema object)用它们之间的联系组成了一个数据库的关系设计。

1)物理结构

(1)数据文件

每一个ORACLE数据库有一个或多个物理的数据文件(data file)。一个数据库的数据文件包含全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地存储在数据库的数据文件中。数据文件有下列特征:

一个数据文件仅与一个数据库联系。

一旦建立,数据文件不能改变大小

一个表空间(数据库存储的逻辑单位)由一个或多个数据文件组成。

数据文件中的数据在需要时可以读取并存储在ORACLE内存储区中。例如:用户要存取数据库一表的某些数据,如果请求信息不在数据库的内存存储区内,则从相应的数据文件中读取并存储在内存。当修改和插入新数据时,不必立刻写入数据文件。为了减少磁盘输出的总数,提高性能,数据存储在内存,然后由ORACLE后台进程DBWR决定如何将其写入到相应的数据文件。

2)逻辑结构

数据库逻辑结构包含表空间、段、范围(extent)、数据块和模式对象。

(1)表空间

一个数据库划分为一个或多个逻辑单位,该逻辑单位称为表空间(TABLESPACE)。一个表空间可将相关的逻辑结构组合在一起。DBA可利用表空间作下列工作:

控制数据库数据的磁盘分配。

将确定的空间份额分配给数据库用户。

通过使单个表空间在线或离线,控制数据的可用性。

执行部分数据库后备或恢复操作。

为提高性能,跨越设备分配数据存储。

每个数据库可逻辑划分为一个或多个表空间

每一个表空间是由一个或多个数据文件组成,该表空间物理地存储表空间中全部逻辑结构的数据。DBA可以建立新的表空间,可为表空间增加数据文件或可删除数据文件,设置或更改缺省的段存储位置。

每一个ORACLE数据库包含有一个名为SYSTEM的表空间,在数据库建立是自动建立。在该表空间中总包含有整个数据库的数据字典表。最小的数据库可只需要SYSTEM表空间。该表空间必须总是在线。表和存储的PL/SQL程序单元(过程、函数、包和触发器)的全部存储数据是存储在SYSTEM表空间中。如果这些PL/SQL对象是为数据库建的,DBA在SYSTEM表空间中需要规划这些对象所需要的空间。

表空间利用增加数据文件扩大表空间,表空间的大小为组成该表空间的数据文件大小的和。表空间实质是组织数据文件的一种途径,Oracle就是通过表空间这个数据库对象完成对数据的组织的。在将数据插入Oracle数据库之前,必须首先建立表空间,然后将数据插入表空

间的一个对象中。解释数据库、表空间、数据文件、表、数据文件的最好办法就是想象一个装满东西的柜子。数据库其实就是柜子,柜中的抽屉是表空间,抽屉中的文件夹是数据文件,文件夹中的纸是表,写在纸上的信息就是数据。

根据表空间的用途可分为五类:

1、目录表空间

每个数据库只有一个目录表空间,它是在发出CREATE DATABASE 命令时创建的。目录表空间被DB2 命名为SYSCATSPACE,它保存了系统目录表。总是在创建数据库时创建该表空间。(CAT:目录)

-常规表空间

常规表空间:保存表数据和索引。它还可以保存诸如大对象(Large Object,LOB)之类的长数据,除非这些数据显式地存储在长表空间中。如果某些表空间是数据库管理的空间(Database Managed Space,DMS),则可以将表及其索引分别放到单独的常规表空间中。我们将在本文后面定义DMS 和系统管理的空间(System Managed Space,SMS)之间的区别。每个数据库中必须至少有一个常规表空间。创建数据库时指定该表空间的缺省名为USERSPACE1。

2、长表空间

长表空间:用于存储长型或LOB 表列,它们必须驻留在DMS 表空间中。它们还可以存储结构化类型的列或索引数据。如果没有定义长表空间,那么将把LOB 存储在常规表空间中。长表空间是可选的,缺省情况下一个都不创建。

3、系统临时表空间

系统临时表空间:用于存储SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据。每个数据库必须至少有一个系统临时表空间。随数据库创建的系统临时表空间的缺省名为TEMPSPACE1。

4、用户临时表空间

用户临时表空间:存储已声明的全局临时表。创建数据库时不存在用户临时表空间。至少应当创建一个用户临时表空间以允许定义已声明的临时表。用户临时表空间是可选的,缺省情况下一个都不创建。

用户临时表空间用来存储:已说明全局临时表(已说明全局临时表:存储的是应用程序临时数据)。

创建用户临时表空间的语法:

CODE:

CREATE USER TEMPORARY TABLESPACE usr_tbsp

MANAGED BY DATABASE

USING (FILE 'd:\db2data\user_tbsp' 5000,

FILE 'e:\db2data\user_tbsp' 5000)

与常规表空间一样,用户临时表空间可以在除IBMTEMPGROUP之外的任何节点组中创建。创建用户临时表空间使用的默认节点组是IBMDEFAULTGROUP。DECLARE GLOBAL TEMPORARY TABLE语句定义供在用户临时表空间中使用的已说明临时表。

5、数据表空间

表空间的作用能帮助DBA用户完成以下工作:

1.决定数据库实体的空间分配;

2.设置数据库用户的空间份额;

3.控制数据库部分数据的可用性;

4.分布数据于不同的设备之间以改善性能;

5.备份和恢复数据。

用户创建其数据库实体时其必须于给定的表空间中具有相应的权力,所以对一个用户来说,其要操纵一个ORACLE数据库中的数据,应该:

1.被授予关于一个或多个表空间中的RESOURCE特权;

2.被指定缺省表空间;

3.被分配指定表空间的存储空间使用份额;

4.被指定缺省临时段表空间。

表空间的操作与维护

表空间的维护是由ORACLE数据库系统管理员DBA通过SQL*PLUS语句实现的,其中表空间创建与修改中的文件名是不能带路径的,因此DBA必须在ORACLE/DBS目录中操作。

oracle表空间(C:\oraclexe\oradata\XE\*.dbf)

一个表空间就是一片磁盘区域,他又一个或者多个磁盘文件组成,一个表空间可以容纳许多表、索引或者簇等。

每个表空间又一个预制的打一磁盘区域称为初始区间用完这个区间厚在用下一个,知道用完表空间,这时候需要对表空间进行扩展,增加数据文件或者扩大已经存在的数据文件

创建立表空间

CREATE TABLESPACE cheng DATAFILE 'C:\oraclexe\oradata\XE\cheng.dbf' SIZE 500M UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k

删除表空间

DROP TABLESPACE cheng INCLUDING CONTENTS AND DATAFILES

修改表空间大小

alter database datafile 'c:\oraclexe\oradata\XE\cheng.dbf' resize 50M

移动表至另一表空间

alter table move tablespace room1;

二、建立UNDO表空间

CREATE UNDO TABLESPACE UNDOTBS02

DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M

#注意:在OPEN状态下某些时刻只能用一个UNDO表空间,如果要用新建的表空间,必须切换到该表空间:

ALTER SYSTEM SET undo_tablespace=UNDOTBS02;

UNDO表空间的管理

1.概念

回滚段概述

回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。

回滚段的作用

1。事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

2。事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件中,ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。

3。读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。而且,当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)。当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)来保证任何当前SCN的未提交的改变不被该语句处理。可以想象:

当一个长时间的查询正在执行时,若其他会话改变了该查询要查询的某个数据块,ORACLE 将利用回滚段的数据前影像来构造一个读一致性视图。

三、建立临时表空间

CREATE TEMPORARY TABLESPACE temp_data

TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M

四、改变表空间状态

1.使表空间脱机

ALTER TABLESPACE game OFFLINE;

如果是意外删除了数据文件,则必须带有RECOVER选项

ALTER TABLESPACE game OFFLINE FOR RECOVER;

2.使表空间联机

ALTER TABLESPACE game ONLINE;

3.使数据文件脱机

ALTER DATABASE DATAFILE 3 OFFLINE;

4.使数据文件联机

ALTER DATABASE DATAFILE 3 ONLINE;

5.使表空间只读

ALTER TABLESPACE game READ ONLY;

6.使表空间可读写

ALTER TABLESPACE game READ WRITE;

五、删除表空间

DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;

六、扩展表空间

首先查看表空间的名字和所属文件

select tablespace_name, file_id, file_name,

round(bytes/(1024*1024),0) total_space

from dba_data_files

order by tablespace_name;

1.增加数据文件

ALTER TABLESPACE game

ADD DATAFILE '/oracle/oradata/db/GAME02.dbf' SIZE 1000M;

2.手动增加数据文件尺寸

ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf'

RESIZE 4000M;

3.设定数据文件自动扩展

ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf

AUTOEXTEND ON NEXT 100M

MAXSIZE 10000M;

设定后查看表空间信息

SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,

(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"

FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C

WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME

AND A.TABLESPACE_NAME = C.TABLESPACE_NAME

三、临时文件及表空间的介绍

临时文件(Tempfiles)

临时文件并不是指临时存在的文件,而是临时表空间对应的数据文件,从实际表现上来看,该文件也不是说用完就会被删除,而是指该文件中存储的对象属于临时存在对象。

这是一类特殊的数据文件,该文件也是用来保存数据。通常,Oracle在执行大规模排序操作时,如果PGA内存区中无法存放,就会将数据存储到临时表空间中作为中转,但是这部分空间并不是永久占用,当操作执行完毕后,这部分空间又可以随时再被其他操作临时使用,因此你可以把这类文件理解成需要时临时拿来用用的文件。不过,临时表空间的数据文件确实与普通表空间数据文件有不同之外:

因为临时表空间必须处于Nologging模式,因此临时表空间数据文件也处于Nologging模式。临时表空间数据文件不能被置为只读。

不能通过ALTER DATABASE语句创建临时表空间数据文件。

通过RMAN备份时不会备份临时表空间数据文件,恢复时自然也不会对其进行恢复。不过10g 环境下,通过RMAN执行数据库恢复后,当打开数据库时,会自动创建临时表空间数据文件。临时表空间数据文件在分配存储空间时也与普通表空间数据文件不同。普通表空间数据文件

分配空间时,需要等待操作系统格式化相应空间。临时表空间数据文件是一种稀疏(Sparse)类型的文件,初始创建时只是看起来占用了指定大小的空间,但实际上此时空间并未真正占用,这类文件的空间将会在实际使用时进行分配。

可以通过DBA_TEMP_FILES或V$TEMPFILE视图查询当前数据库中临时表空间的数据文件信息,例如:

SQL> SELECT NAME FROM V$TEMPFILE;

临时表空间主要用途是在数据库进行排序运算[如创建索引、order by及group by、distinct、union/intersect/minus/、sort-merge及join、analyze命令]、管理索引[如创建索引、IMP进行数据导入]、访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理。

当临时表空间不足时,表现为运算速度异常的慢,并且临时表空间迅速增长到最大空间(扩展的极限),并且一般不会自动清理了。

如果临时表空间没有设置为自动扩展,则临时表空间不够时事务执行将会报ora-01652无法扩展临时段的错误,当然解决方法也很简单:1、设置临时数据文件自动扩展,或者2、增大临时表空间。

临时表空间的相关操作:

查询默认临时表空间:

select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';

查询临时表空间状态:

select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;

扩展临时表空间:

方法一、增大临时文件大小:

alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ resize 100m;

方法二、将临时数据文件设为自动扩展:

alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ autoextend on next 5m maxsize unlimited;

方法三、向临时表空间中添加数据文件:

alter tablespace temp add tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ size 100m;

删除临时表空间的一个数据文件:

alter database tempfile '/u01/app/oracle/oradata/orcl/temp02.dbf' drop;

删除临时表空间(彻底删除):

drop tablespace temp1 including contents and datafiles cascade constraints;

创建临时表空间:

create temporary tablespace temp1 tempfile

'/u01/app/oracle/oradata/orcl/temp11.dbf' size 10M;

更改系统的默认临时表空间:

alter database default temporary tablespace temp1;

所有用户的默认临时表空间都将切换为新的临时表空间:

select username,temporary_tablespace,default_ from dba_users;

更改某一用户的临时表空间:

alter user scott temporary tablespace temp;

select username,temporary_tablespace from dba_users;

创建新的临时表空间:

create temporary tablespace temp02

tempfile '/oracle/oms/oradata/undo/temp02.dbf' size 512M;

把新建的临时表空间却换成数据库的默认临时表空间

alter database default temporary tablespace temp02;

确认目前数据库的默认临时表空间

select * from database_properties

where property_name='DEFAULT_TEMP_TABLESPACE';

在删除temp临时表空间之前,先把运行在temp临时表空间的sql语句kill掉,这样的sql语句多为排序的语句

SQL>Select

https://www.wendangku.net/doc/3b10919310.html,ername,se.sid,se.serial#,su.extents,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.wendangku.net/doc/3b10919310.html,='db_block_size' and su.session_addr=se.saddr and

s.hashvalue=su.sqlhash

and s.address=su.sqladdr

order by https://www.wendangku.net/doc/3b10919310.html,ername,se.sid;

查询出来之后,kill掉这些sql语句:

alter system kill session '524,778'; (假如某一条运行的sql语句的SID为524,serial#为778)

删除temp临时表空间

drop tablespace temp including contents and datafiles;

现在temp02临时表空间占据了别人的磁盘空间,需要重新把临时表空间建立在原来的位置,重新建立temp临时表空间

create temporary tablespace temp

tempfile '/oracle/oms/oradata/temp/temp01.dbf'size 512M autoextend on maxsize 15G; 新建一个512M的自动扩展临时表空间,最大的扩展为15G。

查看新建的temp临时表空间是否正确:

select

file_name,tablespace_name,bytes/1024/1024,maxbytes/1024/1024,autoextensible from dba_temp_files;

把新建的temp临时表空间却换成数据库的默认临时表空间

alter database default temporary tablespace temp;

确认目前数据库的默认临时表空间

select * from database_properties

where property_name='DEFAULT_TEMP_TABLESPACE';

目前把原来的temp临时表空间变成了512M,把剩余的磁盘空间空了出来,temp02临时表空间就没有用了,删除temp02临时表空间

drop tablespace temp02 including contents and datafiles;

四、索引的介绍

数据库索引好比是一本书前面的目录,能加快数据库的查询速度。例如这样一个查询:select * from table1 where id=44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),直接在索引里面

找44(也就是在ID这一列找),就可以得知这一行的位置,也就是找到了这一行。可见,索引是用来定位的。索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

创建索引可以大大提高系统的性能。第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?因为,增加索引也有许多不利的方面。第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引:在经常需要搜索的列上,可以加快搜索的速度;

在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;

在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;

在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;

在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点:

第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。

第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值

很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。

第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少,不利于使用索引。

第四,当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改操作远远多于检索操作时,不应该创建索引。表记录太少

第五,如果一个表只有5条记录,采用索引去访问记录的话,那首先需访问索引表,再通过索引表访问数据表,一般索引表与数据表不在同一个数据块,这种情况下ORACLE至少要往返读取数据块两次。而不用索引的情况下ORACLE会将所有的数据一次读出,处理速度显然会比用索引快。

第六,经常插入、删除、修改的表。对一些经常处理的业务表应在查询允许的情况下尽量减少索引。数据重复且分布平均的表字段

根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。有关数据库所支持的索引功能的详细信息,请参见数据库文档。

提示:尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键或唯一约束。

唯一索引唯一索引是不允许其中任何两行具有相同索引值的索引。

当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。

主键索引数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

聚集索引在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。

要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索

引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。

查看系统表中的用户索引

在Oracle中,SYSTEM表是安装数据库时自动建立的,它包含数据库的全部数据字典,存储过程、包、函数和触发器的定义以及系统回滚段。

一般来说,应该尽量避免在SYSTEM表中存储非SYSTEM用户的对象。因为这样会带来数据库维护和管理的很多问题。一旦SYSTEM表损坏了,只能重新生成数据库。我们可以用下面的语句来检查在SYSTEM表内有没有其他用户的索引存在。

select* from dba_indexes where tablespace_name = 'SYSTEM'and owner not in ('SYS','SYSTEM')

索引按功能分类

唯一索引

唯一索引有两个作用,一个是数据约束,一个是数据索引,其中数据约束主要用来保证数据的完整性,唯一索引产生的索引记录中每一条记录都对应一个唯一的ROWID。

主关键字索引

主关键字索引产生的索引同唯一索引,只不过它是在数据库建立主关键字时系统自动建立的。一般索引

一般索引不产生数据约束作用,其功能主要是对字段建立索引表,以提高数据查询速度。

索引按索引对象分类

单列索引(表单个字段的索引)

多列索引(表多个字段的索引)

函数索引(对字段进行函数运算的索引)

如何快速新建大数据量表的索引

如果一个表的记录达到100万以上的话,要对其中一个字段建索引可能要花很长的时间,甚至导致服务器数据库死机,因为在建索引的时候ORACLE要将索引字段所有的内容取出并进行全面排序,数据量大的话可能导致服务器排序内存不足而引用磁盘交换空间进行,这将严重影响服务器数据库的工作。解决方法是增大数据库启动初始化中的排序内存参数,如果要进行大量的索引修改可以设置10M以上的排序内存(ORACLE缺省大小为64K),在索引建立完成后应将参数修改回来,因为在实际OLTP数据库应用中一般不会用到这么大的排序内存。用索引提高效率

索引是表的一个概念部分,用来提高检索数据的效率. 实际上,ORACLE使用了一个复杂的自平衡B-tree结构. 通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引. 同样在联结多个表时使用索引也可以提高效率. 另一个使用索引的好处是,它提供了主键(primary key)的唯一性验证.

除了那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 通常, 在大型表中使用索引特别有效. 当然,你也会发现, 在扫描小表时,使用索引同样能提高效率.

虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价. 索引需要空间来

存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本身也会被修改. 这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O . 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.

定期的重构索引是有必要的.

ALTER INDEX REBUILD

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表空间操作详解

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如何创建表空间-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表空间和数据文件的管理

第六章表空间和数据文件的管理 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 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用户管理、表空间、临时表空间、索引学习

一、用户的创建和管理 创建和删除用户是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创建表空间命令

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步:创建数据表空间*/

ORACLE的逻辑存储管理

ORACLE的逻辑存储管理 Oracle在逻辑存储上分4个粒度:表空间Tablespace、段Segment、盘区Extent、块Block。 Oracle数据库在逻辑上是由多个表间组成的,表空间中存储的对象叫段,段由区组成,区是磁盘分配的最小单位。 每个区的大小是数据块大小的整数倍,区的大小可以不相同。 数据块是数据库中最小的I/O单位,同时也是内存数据缓冲区的单位,及数据文件存储空间单位。 一、数据库由一个或多个表空间组成; 二、表空间由一个或多个数据文件组成,一个表空间包含多个段; 三、段由一个或多个区组成(Oracle的分区表可以包括多个分区,每个分区都是一个独立的段);一个段对应唯一的表空间。 四、区是数据文件中一个连续的分配空间,由一个或多个块组成; 五、块是数据库中最小、最基本的单位,是数据库使用的最小的I/O单元。 一、块(Block) 数据块Block是Oracle存储数据信息的最小单位。 Oracle就是通过数据块来屏蔽不同操作系统存储结构的差异。无论是Windows环境,还是Unix/Linux环境,他们的操作系统存储结构和方式、甚至字符排列的方式都是不同的。Oracle利用数据块将这些差异加以屏蔽,全部数据操作采用对Block的操作,相当于是一

个层次的抽象。 Oracle所有对数据的操作和空间分配,实际上都是针对数据块Block的操作。我们从数据表中搜索出一行,实际中Oracle就会从内存缓冲区(或者硬盘)中读取到该行所在的数据块,再返回该数据块上的指定数据行。 数据块是有大小的,在一个数据库建立的时候,通过参数进行设置。(注意:Oracle数据库参数中,数据块大小的参数db_block_size 是建库之后不能进行修改的)。 数据库中每个块的大小都是相同的,而且所有的块都有相同的格式,由“块头+表目录+行目录+空闲空间+数据空间”组成。块头包含着块类型(比如是表块、还是索引块)的信息、磁盘上块的位置等信息。表目录(table directory),如果有的话,包含着此块中存储各行的表的信息(如果一个块中存有多个表中的数据)。行目录(row directory)包含着数据行的描述信息,它是一个指针数组,指示了每一行在数据块中的物理位置。块头、表目录、行目录统称为块开销(block overhead),是oracle原来统计、管理块本身的。剩下的两部分很简单,已经存有数据的就是数据空间,暂时没存的就是空闲空间。 数据块的大小是通过KB字节个数来指定的,默认为8KB。相关参数为db_block_size。 查看参数设置:show parameter db_block_size; 设置数据块的大小是依据不同类型的系统的。如果数据块设置比

Oracle12C用户创建与表空间分配

Oracle 12C用户创建与表空间分配 数据库安装完成后,首先用系统用户链接数据库容器(CDB), 在数据库容器(CDB)中创建表空间‘imei’ SQL>create tablespace iemi datafile'E:\Oracle_DB\ cdb_iemi.dbf'size 10240m autoextend on next 200m; 表空间已创建。 接下来在Oracle 12C数据库中创建用户时会报ORA-65096错误。SQL> create user imei identified by imei default tablespace imei temporary tablespace imei_temp; * ERROR at line 1: ORA-65096: invalid common user or role name ORA-65096:公用用户名或角色名无效 以前没见过这个错误,通用用户(common user)是什么?之前的版本可是没这概念啊,上网搜索看到了下面的图片,原来和common user 对应的还有local user。

这个common user 和local user是和oracle 12c的新特性pluggable database(PDB)有关。在PDB中创建的用户就是local user。从上图可以看出,common user必须以大写或小写的c##开头,尝试建立以c##开头的common user。 SQL> create user c##imei identified by imei default tablespace imei temporary tablespace imei_temp;; User created. SQL> grant dba to c##imei; Grant succeeded. 每个PDB都是独立的单元,有自己的用户(local user)、表空间、数据文件,每个local user只能访问自己的PDB,而common user只要权限足够,可以访问任意PDB。

ORACLE_UNDO表空间的管理总结

undo表空间的管理: 1、undo作用 2、undo管理模式 3、undo参数 4、undo表空间的建立删除 作用: 事务回退、事务恢复、读一致性、闪回数据 读一致性:用户看到的所有数据都是别人已经提交的或者是自己操作过但还没提交的 事务恢复、前滚:oracle重启时会恢复到没有commit的状态,系统监控进程读取undo表空间段头查找已提交事务,在日志文件中找到记录,然后实例恢复。 事务回退:用户可以用roolback回滚没有commit的数据 闪回(flash back):任何操作都会把数据的操作保存到undo,运用undo表空间的记录,来恢复近期的数据。9i以后版本才支持 管理模式: 现在版本一般用自动管理

新手最好自动管理 show parameter undo_m 参数中的undo_management 定义了是否自动管理。 show parameter undo_t 查看undo_tablespace参数指定用的是哪个表空间 undo表空间中的段分三种: 系统段----------系统表空间镜像数据 非系统段-----------非系统表空间的镜像数据 deferred段---------临时段---任何表空间脱机后,所有变化的数据存入undo临时段,当再次联机时在从undo写入 查看段: SQL> select * from v$rollname; USN NAME ---------- ------------------------------ 0 SYSTEM 1 _SYSSMU1$ 2 _SYSSMU2$ 3 _SYSSMU3$ 4 _SYSSMU4$ 5 _SYSSMU5$ 6 _SYSSMU6$ 7 _SYSSMU7$ 8 _SYSSMU8$ 9 _SYSSMU9$ 10 _SYSSMU10$ 其中0为系统段,其他为非系统段,分公有还是私有默认都是公有,oracle中至少要有一个非系统段。 查看文件状态 SQL> select status,enabled from v$datafile; 查看deferred段 select segment_name,segment_type from dba_segments where segment_type like '%defe%' 只有某个表空间脱机时,就会产生deferred段,一旦online后deferred段消失 参数: SQL> show parameter undo_ NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDOTBS1

Oracle_如何创建表空间

SYS用户在CMD下以DBA身份登陆: 在CMD中打sqlplus /nolog 然后再 conn / as sysdba //创建临时表空间 create temporary tablespace user_temp tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; //创建数据表空间 create tablespace test_data logging datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; //创建用户并指定表空间 create user username identified by password

default tablespace user_data temporary tablespace user_temp; //给用户授予权限 grant connect,resource to username; //以后以该用户登录,创建的任何数据库对象都属于user_temp 和user_data表空间,这就不用在每创建一个对象给其指定表空间了 撤权: revoke 权限... from 用户名; 删除用户命令 drop user user_name cascade; 建立表空间 CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k 删除表空间 DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES; 一、建立表空间 CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k 二、建立UNDO表空间 CREATE UNDO TABLESPACE UNDOTBS02

创建Oracle表空间的步骤

1、先查询空闲空间 1.select tablespace_name,file_id,block_id,bytes,blocks from dba_free_space; 2、增加Oracle表空间 先查询数据文件名称、大小和路径的信息,语句如下: 1.select tablespace_name,file_id,bytes,file_name from dba_data_files; 3、修改文件大小语句如下 1.alter database datafile 2.'需要增加的数据文件路径,即上面查询出来的路径 3.'resize 800M; 4、创建Oracle表空间 1.create tablespace test 2.datafile '/home/app/oracle/oradata/oracle8i/test01.dbf' size 8M 3.autoextend on 4.next 5M 5.maxsize 10M; 6. 7.create tablespace sales 8.datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M 9.autoextend on 10.next 50M 11.maxsize unlimited 12.maxsize unlimited 是大小不受限制 13. 14.create tablespace sales 15.datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M 16.autoextend on 17.next 50M 18.maxsize 1000M 19.extent management local uniform; 20.unform表示区的大小相同,默认为1M 21. 22.create tablespace sales 23.datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M 24.autoextend on 25.next 50M 26.maxsize 1000M 27.extent management local uniform size 500K; 28.unform size 500K表示区的大小相同,为500K

Oracle表空间与权限管理

表空间都狠重要,我在尝试的时候就遇到2个错误,但是后来解决了,在网上各位大虾的指导下。问题:1.表建在哪个表空间2.表是哪个用户创建的。 解决: 1.建表的create 语句后面加上tablespace FROEST,其中FROEST是表空间的名字s 2.建一个froest的用户,权限分配为connect,resource,用pl/sql登录的时候Connect as Normal,这样登录后创建的表是froest用户的,如果用Connect as SYSDBA那么创建的表是SYS用户的。 oracle 建表需要建立在表空间上,所以需先建立一个表空间 建立表空间语句: 1)。create tablespace "FROEST" datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\froest.dbf' size 10M autoextend on next 500k 2)。create tablespace FROEST datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\froest.dbf' size 10M default storage(initial 500k next 500k minextents 1 maxextents unlimited pctincrease 0 ) 注释: pctincrease 的零设置,使管理空间的任务更为容易,因为使用非零pctincrease 设置可能导致表空间空闲空间碎片问题。 2.MINIMUM EXTENT 50M 表示在这个表空间中创建对象时对对象的extent 的约束,最小要50M;

Oracle建表空间、用户操作详解-入门基础

Oracle建表空间、用户操作详解-入门基础 2009/03/10 14:36 建立表空间 CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k 删除表空间 DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES; 修改表空间大小 alter database datafile '/path/NADDate05.dbf' resize 100M 移动表至另一表空间 alter table move tablespace room1; 一、建立表空间 CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k 二、建立UNDO表空间 CREATE UNDO TABLESPACE UNDOTBS02 DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M #注意:在OPEN状态下某些时刻只能用一个UNDO表空间,如果要用新建的表空间,必须切换到该表空间: ALTER SYSTEM SET undo_tablespace=UNDOTBS02;

三、建立临时表空间 CREATE TEMPORARY TABLESPACE temp_data TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M 四、改变表空间状态 1.使表空间脱机 ALTER TABLESPACE game OFFLINE; 如果是意外删除了数据文件,则必须带有RECOVER选项 ALTER TABLESPACE game OFFLINE FOR RECOVER; 2.使表空间联机 ALTER TABLESPACE game ONLINE; 3.使数据文件脱机 ALTER DATABASE DATAFILE 3 OFFLINE; 4.使数据文件联机 ALTER DATABASE DATAFILE 3 ONLINE; 5.使表空间只读 ALTER TABLESPACE game READ ONLY; 6.使表空间可读写 ALTER TABLESPACE game READ WRITE; 五、删除表空间 DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES; 六、扩展表空间

相关文档
相关文档 最新文档