oracle10g数据库的表空间查看和修改
表空间(TableSpace)
表空间(TableSpace)我们知道Oracle数据库真正存放数据的是数据⽂件(Data File),oracle表空间(tablespace)实际上是⼀个逻辑的概念,在物理上是并不存在的,那么把⼀组data files捻在⼀起就成为⼀个表空间。
表空间属性:⼀个数据库可以包含多个表空间,⼀个表空间只能属于⼀个数据库⼀个表空间包含多个数据⽂件,⼀个数据⽂件只能属于⼀个表空间表空间可以划分成更细的逻辑存储单元:Oracle数据库的存储空间结构:从逻辑的⾓度来看,⼀个数据库(database)下⾯可以分多个表空间(tablespace);⼀个表空间下⾯有可以分多个段(segment);⼀个数据表要占⼀个段(segment),⼀个索引也要占⼀个段(segment)。
⼀个段(segment)由多个区间(extent)组成,那么⼀个区间⼜由⼀组连续的数据块(data block)组成,这连续的数据块是在逻辑上是连续的,有可能是物理逻辑上是分散那么从物理的⾓度上看,⼀个表空间由多个数据⽂件组成,数据⽂件是实实在在存在的磁盘⽂件,这些⽂件是由oracle数据库操作系统的block组成的Segment(段):段是指占⽤数据⽂件空间的通称,或数据库对象使⽤的空间的稽核;段可以由表段、索引段、回滚段、临时段、和⾼速缓存段等。
Extent(区间):分配给对象的任何连续块就叫区间;区间也叫扩展,因为当它⽤完已经分配的区间后,再有新的记录插⼊就必须在分配新的区间(即扩展⼀些块);⼀旦区间分配某个对象(表,索引或簇),则该区间就不能再分配给其它的对象1,查看表空间的名称及⼤⼩select t.tablespace_name, round(sum(bytes / (1024 * 1024)), 0) ts_sizefrom dba_tablespaces t, dba_data_files dwhere t.tablespace_name = d.tablespace_namegroup by t.tablespace_name2、查看表空间物理⽂件的名称及⼤⼩select tablespace_name,file_id,file_name,round(bytes / (1024*1024), 0) total_spacefrom dba_data_filesorder by tablespace_name;select tablespace_name,file_id,file_name,round(bytes / (1024*1024), 0) total_spacefrom dba_temp_filesorder by tablespace_name;3、查看表空间的使⽤情况select sum(bytes) / (1024 * 1024) as free_space, tablespace_namefrom dba_free_spacegroup by tablespace_name;SELECT * from DBA_TEMP_FREE_SPACE;SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间⼤⼩(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使⽤空间(M)",TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') "使⽤⽐",F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最⼤块(M)"FROM (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTESFROM SYS.DBA_FREE_SPACEGROUP BY TABLESPACE_NAME) F,(SELECT DD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MBFROM SYS.DBA_DATA_FILES DDGROUP BY DD.TABLESPACE_NAME) DWHERE D.TABLESPACE_NAME = F.TABLESPACE_NAMEORDER BY 4 DESC;4、查看/修改Database的Default Temporary TablespaceSELECT PROPERTY_NAME, PROPERTY_VALUEFROM DATABASE_PROPERTIESWHEREPROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name;5,--查看表空间是否具有⾃动扩展的能⼒SELECT T.TABLESPACE_NAME,D.FILE_NAMED.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUSFROM DBA_TABLESPACES T, DBA_DATA_FILES DWHERE T.TABLESPACE_NAME = D.TABLESPACE_NAMEORDER BY TABLESPACE_NAME, FILE_NAME;当数据库刚建⽴起来,系统会建⽴⼀个叫做SYSTEM的系统的TableSpace,存放SYS,SYSTEM等User重要的系统数据(ex:数据字典与预存储程序等)建⽴oracle User时,不指定预设的TableSpace,则此User则会以System TableSpace 作为预设的TableSpace,这造成管理上的混乱与严重的效能问题,这是必须注意的TableSpace的类型:Permanent、Undo、TemporaryPermanent TableSpace:创建给AP使⽤的都是。
oracle修改表空间大小的方法
oracle修改表空间大小的方法一、引言Oracle数据库是广泛应用于企业级应用系统的数据库管理系统,表空间是Oracle数据库中最基本的数据存储单位。
为了满足业务需求或应对数据增长,常常需要对表空间的大小进行调整。
本篇文章将详细介绍如何修改Oracle数据库中的表空间大小。
二、准备工作1. 确认具有足够的权限:修改表空间大小需要具有足够的权限,通常需要具有DBA(数据库管理员)角色或与之相关的权限。
2. 了解表空间状态:在修改表空间大小之前,需要确保表空间处于正确的状态,例如是否打开了,是否是只读状态等。
3. 备份数据:修改表空间大小可能会对数据库中的数据产生影响,因此在执行此操作之前,强烈建议进行数据备份。
1. 使用ALTER TABLESPACE命令:使用ALTER TABLESPACE命令可以动态地增加或减少表空间中的存储空间。
以下是基本语法:```sqlALTER TABLESPACE tablespace_name ADD SPACE[ ( space_number ) ] [ DATAFILE 'file_path' [ SIZE{ file_size | next_autoextend } ] ] ;```* `tablespace_name`:要修改的表空间名称。
* `space_number`:要添加的空间编号(可选)。
* `file_path`:新数据文件的路径和文件名。
* `file_size`:新数据文件的大小(可选)。
* `next_autoextend`:自动扩展的最小大小(可选)。
2. 使用ALTER TABLE命令:通过修改表的数据块大小来间接调整表空间的大小。
这种方法适用于调整单个表的大小。
以下是基本语法:```sqlALTER TABLE table_name MODIFY (data_block_size =new_size);```* `table_name`:要修改的表的名称。
OracleDatabase10g数据库安装及配置教程
OracleDatabase10g数据库安装及配置教程Oracle安装配置教程分享给⼤家供⼤家参考,具体内容如下1、安装Oracle 版本:Oracle Database 10g Release 2 (10.2.0.1)下载地址:安装设置:1)这⾥的全局数据库名即为你创建的数据库名,以后在访问数据,创建“本地Net服务名”时⽤到;2)数据库⼝令在登录和创建“本地Net服务名”等地⽅会⽤到。
2、创建“本地Net服务名”1)通过【程序】-》【Oracle - OraDb10g_home1】-》【配置和移植⼯具】-》【Net Configuration Assistant】,运⾏“⽹络配置助⼿”⼯具:2)选择“本地 Net 服务名配置”:3)这⾥的“Net 服务名”我们输⼊安装数据库时的“全局数据库名”:4)主机名我们输⼊本机的IP地址:5)测试数据库连接,⽤户名/密码为:System/数据库⼝令(安装时输⼊的“数据库⼝令”):默认的⽤户名/密码错误:更改登录,输⼊正确的⽤户名/密码:测试成功:3、PLSQL Developer 连接测试输⼊正确的⽤户名/⼝令:成功登陆:数据库4、创建表空间打开sqlplus⼯具:sqlplus /nolog连接数据库:conn /as sysdba创建表空间:create tablespace camds datafile 'D:\oracle\product\10.2.\oradata\camds\camds.dbf' size 200m autoextend on next 10m maxsize unlimited;5、创建新⽤户运⾏“P/L SQL Developer”⼯具,以DBA(⽤户名:System)的⾝份登录:1)新建“User(⽤户):2)设置⽤户名、⼝令、默认表空间(使⽤上⾯新建的表空间)和临时表空间:3)设置⾓⾊权限:4)设置”系统权限“:5)点击应⽤后,【应⽤】按钮变灰,新⽤户创建成功:6)新⽤户登录测试:输⼊新⽤户的“⽤户名/⼝令”:新⽤户“testcamds”成功登陆:6、导⼊导出数据库先运⾏cmd命令,进⼊命令⾏模式,转到下⾯的⽬录:D:\oracle\product\10.2.0\db_1\BIN【该⽬录下有exp.exe⽂件】1)导⼊命令语法:imp userid/pwd@sid file=path/file fromuser=testcamds touser=userid命令实例:imp testcamds/123@camds file=c:\testcamds fromuser=testcamds touser=testcamds导⼊结果:2)导出:命令语法:exp userid/pwd@sid file=path/file owner=userid命令实例:exp testcamds/123@camdsora file=c:\testcamds owner=testcamds 导⼊结果://创建临时表空间create temporary tablespace zfmi_temptempfile 'D:\oracle\oradata\zfmi\zfmi_temp.dbf'size 32mautoextend onnext 32m maxsize 2048mextent management local;//tempfile参数必须有//创建数据表空间create tablespace zfmiloggingdatafile 'D:\oracle\oradata\zfmi\zfmi.dbf'size 100mautoextend onnext 32m maxsize 2048mextent management local;//datafile参数必须有//删除⽤户以及⽤户所有的对象drop user zfmi cascade;//cascade参数是级联删除该⽤户所有对象,经常遇到如⽤户有对象⽽未加此参数则⽤户删不了的问题,所以习惯性的加此参数//删除表空间前提:删除表空间之前要确认该表空间没有被其他⽤户使⽤之后再做删除drop tablespace zfmi including contents and datafiles cascade onstraints;//including contents 删除表空间中的内容,如果删除表空间之前表空间中有内容,⽽未加此参数,表空间删不掉,所以习惯性的加此参数//including datafiles 删除表空间中的数据⽂件//cascade constraints 同时删除tablespace中表的外键参照如果删除表空间之前删除了表空间⽂件,解决办法: 如果在清除表空间之前,先删除了表空间对应的数据⽂件,会造成数据库⽆法正常启动和关闭。
PLSQL Developer 10g 创建、删除表空间、更名
EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT MANUAL FLASHBACK ON;
7) DROP TABLESPACE db_name_ INCLUDING CONTENTS AND DATAFILES; //删除表空间
--测试创建表空间
create tablespace IMSTEST
datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\HNORCL\IMTEST.def' size 200M
TEMPORARY TABLESPACE "TEMP" ;
grant connect to PROJECTNAME ;
grant dba to PROJECTNAME ;
grant sysdba to PROJECTNAME ;
--创建无限表空间 SQL代码
CREATE TABLESPACE test DATAFILE 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORACLE\TEST1.DBF' SIZE 20000M
extent management local autoallocate
segment space management auto;
CREATE USER PROJECTNAME
IDENTIFIED BY "PROJECTNAME"
DEFAULT TABLESPACE "TBS_PROJECTNAMETEST"
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 mytbs01datafile 'D:\oracledata\mytbs01_1.dbf' size 2Mautoallocate;示例 2:使用 UNIFORM 区分配方式。
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 表空间名datafile '文件标识符' 存储参数[...]|[minimum extent n] --设置表空间中创建的最小范围大小|[logging|nologging]|[default storage(存储配置参数)]|[online|offline]; --表空间联机\脱机|[permanent|temporary] --指定该表空间是用于保存永久的对象还是只保存临时对象 |[...]--其中:文件标识符=’文件名’[size整数[k\m][reuse]--实例create tablespace data01datafile '/oracle/oradata/db/data01.dbf' size 500muniform size 128k; --指定区尺寸为128k,如不指定,区尺寸默认为64kcreate tablespace "test"loggingdatafile 'd:\oracle\oradata\oracle\sample.ora' size 5m,'d:\oracle\oradata\oracle\dd.ora' size 5mextent management localuniform segment space managementauto;--详解/*第一: create tablespace "sample"创建一个名为"sample" 的表空间.对表空间的命名,遵守oracle 的命名规范就可了. 第二: logging 有nologging 和logging 两个选项,nologging: 创建表空间时,不创建重做日志.logging 和nologging正好相反, 就是在创建表空间时生成重做日志.用nologging时,好处在于创建时不用生成日志,这样表空间的创建较快,但是没能日志,数据丢失后,不能恢复;但是一般我们在创建表空间时,是没有数据的,按通常的做法,是建完表空间,并导入数据后,是要对数据做备份的;所以通常不需要表空间的创建日志,因此,在创建表空间时,选择nologging,以加快表空间的创建速度.第三: datafile 用于指定数据文件的具体位置和大小.datafile 的文件是建立表空间后创建的,不过文件路径必须存在才是合法的datafile设置如: datafile 'd:\oracle\oradata\ora92\luntan.ora' size 5m说明文件的存放位置是'd:\oracle\oradata\ora92\luntan.ora' , 文件的大小为5m.如果有多个文件,可以用逗号隔开:如:datafile 'd:\oracle\oradata\ora92\luntan.ora' size 5m, 'd:\oracle\oradata\ora92\ dd.ora' size 5m但是每个文件都需要指明大小.单位以指定的单位为准如5m 或500k.对具体的文件,可以根据不同的需要,存放大不同的介质上,如磁盘阵列,以减少io竟争. 指定文件名时,必须为绝对地址,不能使用相对地址.第四: extent management local 存储区管理方法在字典中管理(dictionary):将数据文件中的每一个存储单元做为一条记录,所以在做dm操作时,就会产生大量的对这个管理表的delete和update操作.做大量数据管理时,将会产生很多的dm操作,严得的影响性能,同时,长时间对表数据的操作,会产生很多的磁盘碎片.本地管理(local):用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘.同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作。
完美解决Oracle改变表空间的问题
完美解决Oracle改变表空间的问题一、使用imp/exp。
先导出源库,再创建新库把表空间创建好,然后再导入。
(据说这样可以,前提是新的库里面不能有与源库相同名字的表空间。
有待验证!)二、使用脚本进行修改。
据目前所了解,正常情况下需要修改表的空间和表的索引的空间,如果涉及到BOLB字段的表,修改的方式又不一样了!正常情况下的修改脚本:1.修改表的空间alter table TABLE_NAME move tablespace TABLESPACENAME查询当前用户下的所有表select 'alter table '|| table_name ||' move tablespace tablespacename;' from user_all_tables;2.修改表的索引的空间alter index INDEX_NAME rebuild tablespace TABLESPACENAME查询当前用户下的所有索引SELECT 'alter index '||index_name||' rebuild tablespace tablespacename storage(initial '||t.initial_extent||' minextents '||t.min_extents||' maxextents '||t.max_extents||');' from user_indexes;可以使用脚本执行查询的结果,这样就可以批量处理!3.不正常情况即含有BLOB字段的表在移植看注意研究了下ORACLE ALTER TABLE MOVE 的语法:ALTER TABLE table_name MOVE [ONLINE] tablespace_name;通过上面的语句可以移植表到新表空间,如果要移植LOB字典需要参考以下语法:ALTER TABLE table_name LOB (lob_item) STORE AS [lob_segment](TABLESPACE tablespace_name(STORAGE.....)ENABLE|DISABLE STORAGE IN ROWCHUNK integerPCTVERSION integerRETENTIONFREEPOOLS integerCACHE|NOCACHE|CACHE READSINDEX lobindexname(TABLESPACE tablesapce_name((STORAGE.....)))....注解:LOB (lob_item):表中的lob字段STORE AS [lob_segment]:每个lob字段在表创建后系统都会自动单独创建一个段,可以通过这个参数手动指定一个段名tablespace_name:LOB字段新的存储表空间(STORAGE.....):指定tablespace_name的存储属性ENABLE STORAGE IN ROW:如果设置了enable storage in row 那么oracle会自动将小于4000bytes的数据存储在行内, 这是ORACLE的默认值,对于大于4000字节的lob字段保存在lob段(同disable storage in row),在表段将保留36-84字节的控制信息。
linux下查看数据库表空间
1.在Linux下进入SQLPlus,# su – oracle$ sqlplus / as sysdbaSQL>2.查看一个表空间所对应的数据文件SQL>select file_name from dba_data_fileswhere tablespace_name=’BING’;FILE_NAME————————————————————————————————————-/u01/app/oracle/oradata/ora10g/bing001.dbf/u01/app/oracle/oradata/ora10g/bing002.dbf3.查看一个表空间数据文件的大小SQL>select tablespace_name, sum(bytes)/1024/1024―SIZE_M‖,sum(maxbytes)/1024/1024 ―MAX_SIZE‖from dba_data_fileswhere tablespace_name=’BING’group by tablespace_name;TABLESPACE_NAME SIZE_M MAX_SIZE—————————————- ———-BING 200 33791.98444.查看一个表空间空闲的大小,SQL>select tablespace_name, sum(bytes)/1024/1024 ―Free_M‖from dba_free_spacewhere tablespace_name=’BING’group by tablespace_name;TABLESPACE_NAME Free_M—————————————-BING 199.875说明:size_M说明BING这个表空间对应的数据文件现在的大小是200MB,Free_M说明现在这个表空间还剩余199.874MB。
由于这个表空间设置了自动扩展,MAX_SIZE 说明这个表空间最大可以增大到33791.9844 MB5.其他方法查看a. 在Oracle10g新增加了视图dba_tablespace_usage_metrics,以block为单位显示使用率。
oracle临时表空间的增删改查操作
操作oracle 临时表空间的增删改查1、查看临时表空间dba_temp_files视图v_$tempfile视图select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;select status,enabled, name, bytes/1024/1024 file_size from v_$tempfile;--sys用户查看2、缩小临时表空间大小alter database tempfile 'D:\ORACLE\PRODUCT\' resize 100M;3、扩展临时表空间:方法一、增大临时文件大小:SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/’ resize 100m;方法二、将临时数据文件设为自动扩展:SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/’ autoextend on next 5m maxsize unlimited;方法三、向临时表空间中添加数据文件:SQL> alter tablespace temp add tempfile ‘/u01/app/oracle/oradata/orcl/’ size100m;4、创建临时表空间:SQL> create temporary tablespace temp1 tempfile ‘/u01/app/oracle/oradata/orcl/’ size 10M;5、更改系统的默认临时表空间:--查询默认临时表空间select from database_properties whereproperty_name='DEFAULT_TEMP_TABLESPACE';--修改默认临时表空间alter database default temporary tablespace temp1;所有用户的默认临时表空间都将切换为新的临时表空间:select username,temporary_tablespace,default_ from dba_users;--更改某一用户的临时表空间:alter user scott temporary tablespace temp;6、删除临时表空间删除临时表空间的一个数据文件:SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/’ drop;删除临时表空间彻底删除:SQL> drop tablespace temp1 including contents and datafiles cascade constraints;7、查看临时表空间的使用情况GV_$TEMP_SPACE_HEADER视图必须在sys用户下才能查询GV_$TEMP_SPACE_HEADER视图记录了临时表空间的使用大小与未使用的大小dba_temp_files视图的bytes字段记录的是临时表空间的总大小SELECT ,total - used as "Free",total as "Total",roundnvltotal - used, 0 100 / total, 3 "Free percent"FROM SELECT tablespace_name, SUMbytes_used / 1024 / 1024 usedFROM GV_$TEMP_SPACE_HEADERGROUP BY tablespace_name temp_used,SELECT tablespace_name, SUMbytes / 1024 / 1024 totalFROM dba_temp_filesGROUP BY tablespace_name temp_totalWHERE =8、查找消耗资源比较的sql语句Select ,,,to_numberrtrim as Space,tablespace,segtype,sql_textfrom v$sort_usage su, v$parameter p, v$session se, v$sql swhere = 'db_block_size'and =and =and =order by ,9、查看当前临时表空间使用大小与正在占用临时表空间的sql语句select , segtype, blocks 8 / 1000 "MB", sql_textfrom v$sort_usage sort, v$session sess, v$sql sqlwhere =and =order by blocks desc;10、临时表空间组介绍1创建临时表空间组:create temporary tablespace tempts1 tempfile '/home/oracle/' size 2M tablespace group group1;create temporary tablespace tempts2 tempfile '/home/oracle/' size 2M tablespace group group2;2查询临时表空间组:dba_tablespace_groups视图select from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------GROUP1 TEMPTS1GROUP2 TEMPTS23将表空间从一个临时表空间组移动到另外一个临时表空间组:alter tablespace tempts1 tablespace group GROUP2 ;select from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------GROUP2 TEMPTS1GROUP2 TEMPTS24把临时表空间组指定给用户alter user scott temporary tablespace GROUP2;5在数据库级设置临时表空间alter database <db_name> default temporary tablespace GROUP2;6删除临时表空间组删除组成临时表空间组的所有临时表空间drop tablespace tempts1 including contents and datafiles;select from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------GROUP2 TEMPTS2drop tablespace tempts2 including contents and datafiles;select from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME11、对临时表空间进行shrink11g新增的功能--将temp表空间收缩为20Malter tablespace temp shrink space keep 20M;--自动将表空间的临时文件缩小到最小可能的大小ALTER TABLESPACE temp SHRINK TEMPFILE ’/u02/oracle/data/’;临时表空间作用Oracle临时表空间主要用来做查询和存放一些缓冲区数据;临时表空间消耗的主要原因是需要对查询的中间结果进行排序;重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长;直到耗尽硬盘空间;网上有人猜测在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB;也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小;临时表空间的主要作用:索引create或rebuild;Order by 或group by;Distinct 操作;Union 或intersect 或minus;Sort-merge joins;analyze.。
Oracle 10g数据库连接及增删改查
import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class JdbcConnection {public static void main(String[] args) {//getCon();// insertTbUser();updateUser();//query();//delTbUser();}public static void insertTbUser() {String url = "jdbc:oracle:thin:@localhost:1521:orcl";String driverClass = "oracle.jdbc.driver.OracleDriver";try {Class.forName(driverClass);Connection con = java.sql.DriverManager.getConnection(url, "mm","mm");// statement开辟一个通道java.sql.Statement st = con.createStatement();String insertSql = "insert intotb_user(userid,username,password)" +// 执行sql语句,返回操作所影响的条数。
"values(101,'zhuyu','zhuyu')";st.execute(insertSql);st.close();con.close();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}public static void delTbUser(){String url="jdbc:oracle:thin:@localhost:1521:orcl";String driverClass="oracle.jdbc.driver.OracleDriver";Class.forName(driverClass);Connection con=DriverManager.getConnection(url,"mm","mm");java.sql.Statement st=con.createStatement();String delSql="delete from tb_user where userid='23'";st.execute(delSql);st.close();con.close();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void updateUser() {String url = "jdbc:oracle:thin:@localhost:1521:orcl";String driverClass = "oracle.jdbc.driver.OracleDriver";try {Class.forName(driverClass);Connection con = DriverManager.getConnection(url,"mm","mm");String updateSql = "update tb_user set password='1223423' where userid=5";Statement st = con.createStatement();st.execute(updateSql);st.close();con.close();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}public static void query() {String url = "jdbc:oracle:thin:@localhost:1521:orcl";String driverClass = "oracle.jdbc.driver.OracleDriver";Connection con = null;Statement st = null;ResultSet rs = null;Class.forName(driverClass);con = DriverManager.getConnection(url, "mm", "mm");st = con.createStatement();String querySql = "select * from tb_user";rs = st.executeQuery(querySql);System.out.println("id\tusername\tpassword");while (rs.next()) {int id = rs.getInt("userid");String userName = rs.getString("username");String password = rs.getString("password");System.out.println(id + "\t"+ userName + "\t"+ password);}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}public static void getCon() {String url = "jdbc:oracle:thin:@localhost:1521:orcl";String driverClass = "oracle.jdbc.driver.OracleDriver";// 加载驱动try {ng.Class.forName(driverClass).newInstance();// 获得连接java.sql.Connection con =java.sql.DriverManager.getConnection(url,"mm", "mm");System.out.println(con);} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}}。
oracle查询数据文件位置,修改表空间大小并开启自动扩展
oracle查询数据文件位置,修改表空间大小并开启自动扩展1、查询数据文件位置select * from dba_data_files;2、扩大表空间大小alter database datafile '+DATA/orcl/datafile/sde.dbf' resize 2048m;3、开启自动扩展alter database datafile '+DATA/orcl/datafile/sde.dbf ' autoextend on next 300M maxsize unlimited;*****************************************#--ORACLE 表空间扩展方法--#********************************************第一步:查看表空间的名字及文件所在位置:select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_spacefrom dba_data_filesorder by tablespace_name第二步:增大所需表空间大小:alter database datafile '表空间位置'resize 新的尺寸例如:alter database datafile '\oracle\oradata\anita_2008.dbf'resize 4000m###对于oracle数据库的表空间,除了用手动增加大小外,还可以增加数据文件等方式扩展表空间大小。
###方法一:设置表空间自动扩展。
alter database datafile '数据文件位置'autoextend on next 自动扩展大小 maxsize 最大扩展大小例如:alter database datafile '\oracle\oradata\anita_2008.dbf'autoextend on next 100m maxsize 10000m方法二:增加数据文件个数alter tablespace 表空间名称add datafile '新的数据文件地址' size 数据文件大小例如:alter tablespace ESPS_2008add datafile '\oracle\oradata\anita_2010.dbf' size 1000m方法三:查询表空间使用情况:select a.tablespace_name,a.bytes/1024/1024 "sum MB",(a.bytes-b.bytes)/1024/1024 "used MB",b.bytes/1024/1024 "free MB",round (((a.bytes-b.bytes)/a.bytes)*100,2) "used%" from(select tablespace_name,sum(bytes) bytes from dba_data_files group by tablespace_name) a,(select tablespace_name,sum(bytes) bytes,max (bytes) largest from dba_free_space group by tablespace_name)bwhere a.tablespace_name=b.tablespace_nameorder by ((a.bytes-b.bytes)/a.bytes) desc;********************************####增加表空间大小的四种方法####*********************************************Meathod1:给表空间增加数据文件ALTER TABLESPACE app_data ADD DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.D BF' SIZE 50M;Meathod2:新增数据文件,并且允许数据文件自动增长ALTER TABLESPACE app_data ADD DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.D BF' SIZE 50MAUTOEXTEND ON NEXT 5M MAXSIZE 100M;Meathod3:允许已存在的数据文件自动增长ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF' AUTOEXTEND ON NEXT 5M MAXSIZE 100M;Meathod4:手工改变已存在数据文件的大小ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP02.DBF' RESIZE 100M;。
oracle数据库表空间扩容步骤
oracle数据库表空间扩容步骤扩容Oracle数据库表空间的步骤如下:1. 检查表空间的当前使用情况:使用以下查询语句可以查看表空间的当前使用情况。
```SELECTtablespace_name,round((1 - (sum(bytes) / (maxbytes))) * 100, 2)"Used_percentage"FROMdba_data_filesGROUP BYtablespace_name,maxbytes;```2. 确定需要扩容的表空间:根据查询结果,确定需要扩容的表空间。
3. 确定扩容的方式:有两种扩容方式,分别是自动扩容和手动扩容。
- 自动扩容:在表空间的数据文件达到其最大容量时,Oracle 会自动增加数据文件的大小。
如果使用自动扩容方式,需要确认表空间的自动扩容设置是否已开启。
- 手动扩容:手动扩容需要手动添加一个新的数据文件到表空间中。
4. 自动扩容:如果使用自动扩容方式,可以通过以下命令检查自动扩容设置是否已开启。
```SELECTautoextensibleFROMdba_data_filesWHEREtablespace_name = '<表空间名称>';```如果自动扩容设置为“YES”,则表示已开启自动扩容。
如果自动扩容设置为“NO”,则需要使用手动扩容方式。
5. 手动扩容:如果使用手动扩容方式,可以通过以下命令向表空间添加一个新的数据文件。
```ALTER TABLESPACE <表空间名称> ADD DATAFILE '<数据文件路径>' SIZE <新数据文件大小>;```其中,<表空间名称>是需要扩容的表空间的名称,<数据文件路径>是新的数据文件的路径,<新数据文件大小>是新的数据文件的大小。
6. 检查扩容结果:可以使用之前的查询语句再次检查表空间的使用情况,确认扩容是否成功。
查看Oracle表空间使用情况
(select tablespace_name,sum(bytes) bytes from dba_data_files group by tablespace_name) a,
(select tablespace_name,sum(bytes) bytes,max(bytes) largest from dba_free_space group by tablespace_name) b
用操作系统UNIX、Linux中的df -g命令(查看下可以使用的磁盘空间大小)
获取创建表空间的语句:
select dbms_metadata.get_ddl('TABLESPACE','MLOG_NORM_SPACE') from dual;
4.确认磁盘空间足够,增加一个数据文件
alter tablespace MLOG_NORM_SPACE
add datafile '/oracle/oms/oradata/mlog/Mlog_Norm_data001.dbf'
size 10M autoextend on maxsize 20G
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
“userd MB”表示表空间已经使用了多少
“free MB”表示表空间剩余多少
“percent_user”表示已经使用的百分比
2.比如从1中查看到MLOG_NORM_SPACE表空间已使用百分比达到90%以上,可以查看该表空间总共有几个数
Oracle10g 创建表空间&&网页访问控制台
网页访问http://localhost:1158/emOracle 创建表空间SYS用户在CMD下以DBA身份登陆:在CMD中打sqlplus /nolog然后再conn / as sysdba// 分为四步//第1步:创建临时表空间create temporary tablespace user_temptempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50mautoextend onnext 50m maxsize 20480mextent management local;//第2步:创建数据表空间create tablespace test_dataloggingdatafile 'D:\oracle\oradata\Oracle9i\user_data.dbf' size 50mautoextend onnext 50m maxsize 20480mextent management local;//第3步:创建用户并指定表空间create user username identified by passworddefault tablespace user_datatemporary tablespace user_temp;//第4步:给用户授予权限grant connect,resource to username;---------------------------------------------------------------------------------//以后以该用户登录,创建的任何数据库对象都属于user_temp 和user_data表空间,这就不用在每创建一个对象给其指定表空间了撤权:revoke 权限... from 用户名;删除用户命令drop user user_name cascade;建立表空间CREATE TABLESPACE data01DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500MUNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k删除表空间DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;一、建立表空间CREATE TABLESPACE data01DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500MUNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k二、建立UNDO表空间CREATE UNDO TABLESPACE UNDOTBS02DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M#注意:在OPEN状态下某些时刻只能用一个UNDO表空间,如果要用新建的表空间,必须切换到该表空间:ALTER SYSTEM SET undo_tablespace=UNDOTBS02;三、建立临时表空间CREATE TEMPORARY TABLESPACE temp_dataTEMPFILE '/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_spacefrom dba_data_filesorder by tablespace_name;1.增加数据文件ALTER TABLESPACE gameADD 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.dbfAUTOEXTEND ON NEXT 100MMAXSIZE 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 CWHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME ANDA.TABLESPACE_NAME=C.TABLESPACE。
Oracle---SQL语句大全—查看表空间
Oracle---SQL语句⼤全—查看表空间SQL语句⼤全—查看表空间(⼀)查看表空间的名称及⼤⼩:SQL> SELECT T.TABLESPACE_NAME, ROUND(SUM(BYTES/(1024 * 1024)), 0) TS_SIZEFROM DBA_TABLESPACES T, DBA_DATA_FILES DWHERE T.TABLESPACE_NAME = D.TABLESPACE_NAMEGROUP BY T.TABLESPACE_NAME;查看表空间物理⽂件的名称及⼤⼩:SQL> SELECT TABLESPACE_NAME,FILE_ID,FILE_NAME,ROUND(BYTES / (1024 * 1024), 0) TOTAL_SPACEFROM DBA_DATA_FILESORDER BY TABLESPACE_NAME;查看回滚段名称及⼤⼩:SQL> SELECT SEGMENT_NAME,TABLESPACE_NAME,R.STATUS,(INITIAL_EXTENT / 1024) INITIALEXTENT,(NEXT_EXTENT / 1024) NEXTEXTENT,MAX_EXTENTS,V.CUREXT CUREXTENTFROM DBA_ROLLBACK_SEGS R, V$ROLLSTAT VWHERE R.SEGMENT_ID = N(+)ORDER BY SEGMENT_NAME;如何查看某个回滚段⾥⾯,跑的什么事物或者正在执⾏什么sql语句:SQL> SELECT D.SQL_TEXT, FROM V$ROLLNAME A, V$TRANSACTION B, V$SESSION C, V$SQLTEXT DWHERE N = B.XIDUSNAND B.ADDR = C.TADDRAND C.SQL_ADDRESS = D.ADDRESSAND C.SQL_HASH_VALUE = D.HASH_VALUEAND N = 1;(备注:你要看哪个,就把usn=?写成⼏就⾏了)查看控制⽂件:SQL> SELECT * FROM V$CONTROLFILE;查看⽇志⽂件:SQL> COL MEMBER FORMAT A50SQL>SELECT * FROM V$LOGFILE;如何查看当前SQL*PLUS⽤户的sid和serial#:SQL>SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE AUDSID=USERENV('SESSIONID');如何查看当前数据库的字符集:SQL>SELECT USERENV('LANGUAGE') FROM DUAL;SQL>SELECT USERENV('LANG') FROM DUAL;怎么判断当前正在使⽤何种SQL优化⽅式:⽤EXPLAIN PLAN產⽣EXPLAIN PLAN¡檢查PLAN_TABLE中ID=0的POSITION列的值SQL>SELECT DECODE(NVL(POSITION,-1),-1,'RBO',1,'CBO') FROM PLAN_TABLE WHERE ID=0;如何查看系统当前最新的SCN号:SQL>SELECT MAX(KTUXESCNW * POWER(2,32) + KTUXESCNB) FROM X$KTUXE;在ORACLE中查找TRACE⽂件的脚本:SQL>SELECT U_DUMP.VALUE || '/' || INSTANCE.VALUE || '_ORA_' ||V$PROCESS.SPID || NVL2(V$PROCESS.TRACEID, '_' || V$PROCESS.TRACEID, NULL ) || '.TRC'"TRACE FILE" FROM V$PARAMETERU_DUMP CROSS JOIN V$PARAMETER INSTANCE CROSS JOIN V$PROCESS JOIN V$SESSION ON V$PROCESS.ADDR =V$SESSION.PADDR WHERE U_ = 'USER_DUMP_DEST' AND = 'INSTANCE_NAME' AND V$SESSION.AUDSID=SYS_CONTEXT('USERENV','SESSIONID');SQL>SELECT D.VALUE || '/ORA_' || P.SPID || '.TRC' TRACE_FILE_NAMEFROM (SELECT P.SPID FROM SYS.V_$MYSTAT M,SYS.V_$SESSION S,SYS.V_$PROCESS P WHERE M.STATISTIC# = 1 ANDS.SID = M.SID AND P.ADDR = S.PADDR) P,(SELECT VALUE FROM SYS.V_$PARAMETER WHERE NAME ='USER_DUMP_DEST') D;如何查看客户端登陆的IP地址:SQL>SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') FROM DUAL;如何在⽣产数据库中创建⼀个追踪客户端IP地址的触发器:SQL>CREATE OR REPLACE TRIGGER ON_LOGON_TRIGGER AFTER LOGON ON DATABASEBEGINDBMS_APPLICATION_INFO.SET_CLIENT_INFO(SYS_CONTEXT('USERENV', 'IP_ADDRESS'));END;REM 记录登陆信息的触发器CREATE OR REPLACE TRIGGER LOGON_HISTORYAFTER LOGON ON DATABASE --WHEN (USER='WACOS') --ONLY FOR USER 'WACOS'BEGININSERT INTO SESSION_HISTORY SELECT USERNAME,SID,SERIAL#,AUDSID,OSUSER,ACTION,SYSDATE,NULL,SYS_CONTEXT('USERENV','IP_ADDRESS'),TERMINAL,MACHINE,PROGR = USERENV('SESSIONID');END;查询当前⽇期:SQL> SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD,HH24:MI:SS') FROM DUAL;查看所有表空间对应的数据⽂件名:SQL>SELECT DISTINCT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM DBA_DATA_FILES;查看表空间的使⽤情况:SQL>SELECT SUM(BYTES)/(1024*1024) AS FREE_SPACE,TABLESPACE_NAMEFROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;SQL>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 CWHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;COLUMN TABLESPACE_NAME FORMAT A18;COLUMN SUM_M FORMAT A12;COLUMN USED_M FORMAT A12;COLUMN FREE_M FORMAT A12;COLUMN PTO_M FORMAT 9.99;SELECT S.TABLESPACE_NAME,CEIL(SUM(S.BYTES/1024/1024))||'M' SUM_M,CEIL(SUM(EDSPACE/1024/1024))||'M'USED_M,CEIL(SUM(S.FREESPACE/1024/1024))||'M' FREE_M, SUM(EDSPACE)/SUM(S.BYTES)PTUSED FROM (SELECT B.FILE_ID,B.TABLESPACE_NAME,B.BYTES, (B.BYTES-SUM(NVL(A.BYTES,0))) USEDSPACE, SUM(NVL(A.BYTES,0)) FREESPACE, (SUM(NVL(A.BYTES,0))/(B.BYTES)) * 100 FREEPERCENTRATIO FROM SYS.DBA_FREE_SPACE A,SYS.DBA_DATA_FILESB WHERE A.FILE_ID(+)=B.FILE_ID GROUP BY B.FILE_ID,B.TABLESPACE_NAME,B.BYTES ORDER BY B.TABLESPACE_NAME)S GROUP BY S.TABLESPACE_NAME ORDER BY SUM(S.FREESPACE)/SUM(S.BYTES) DESC;查看数据⽂件的hwm(可以resize的最⼩空间)和⽂件头⼤⼩:SELECT V1.FILE_NAME,V1.FILE_ID,NUM1 TOTLE_SPACE,NUM3 FREE_SPACE,NUM1-NUM3 "USED_SPACE(HWM)",NVL(NUM2,0) DATA_SPACE,NUM1-NUM3-NVL(NUM2,0) FILE_HEADFROM(SELECT FILE_NAME,FILE_ID,SUM(BYTES) NUM1 FROM DBA_DATA_FILES GROUP BY FILE_NAME,FILE_ID) V1,(SELECT FILE_ID,SUM(BYTES) NUM2 FROM DBA_EXTENTS GROUP BY FILE_ID) V2,(SELECT FILE_ID,SUM(BYTES) NUM3 FROM DBA_FREE_SPACE GROUP BY FILE_ID) V3WHERE V1.FILE_ID=V2.FILE_ID(+) AND V1.FILE_ID=V3.FILE_ID(+);数据⽂件⼤⼩及头⼤⼩:SELECT V1.FILE_NAME,V1.FILE_ID,NUM1 TOTLE_SPACE,NUM3 FREE_SPACE,NUM1-NUM3 USED_SPACE,NVL(NUM2,0) DATA_SPACE,NUM1-NUM3-NVL(NUM2,0) FILE_HEADFROM(SELECT FILE_NAME,FILE_ID,SUM(BYTES) NUM1 FROM DBA_DATA_FILES GROUP BY FILE_NAME,FILE_ID) V1,(SELECT FILE_ID,SUM(BYTES) NUM2 FROM DBA_EXTENTS GROUP BY FILE_ID) V2,(SELECT FILE_ID,SUM(BYTES) NUM3 FROM DBA_FREE_SPACE GROUP BY FILE_ID) V3WHERE V1.FILE_ID=V2.FILE_ID(+)AND V1.FILE_ID=V3.FILE_ID(+);(运⾏以上查询,我们可以如下信息:Totle_pace:该数据⽂件的总⼤⼩,字节为单位Free_space:该数据⽂件的剩于⼤⼩,字节为单位Used_space:该数据⽂件的已⽤空间,字节为单位Data_space:该数据⽂件中段数据占⽤空间,也就是数据空间,字节为单位File_Head:该数据⽂件头部占⽤空间,字节为单位)。
通过dba_free_space视图查看表空间的空间分配过程
SQL>select tablespace_name from dba_free_space;根据查询结果可发现,出现了多个相同的表空间名;为什么呢?这个问题可根据dba_free_space的说明得到解答:dba_free_space显示的是有free 空间的tablespace ,如果一个tablespace 的free 空间不连续,那每段free空间都会在dba_free_space中存在一条记录。
如果一个tablespace 有好几条记录,说明表空间存在碎片,当采用字典管理的表空间碎片超过500就需要对表空间进行碎片整理。
根据如下查询语句可发现:SQL>select * from dba_free_space;一个表空间有两个不连续的block_id,正是因为这样才会导致一个表空间在dba_free_space视图中存在两条记录;三、关于dba_free_space视图的问题看下面的例子,请高手解释一下好吗?------------------------一开始:环境:Windows xp+Oracle 10g 10.2.0;数据库:PAXDB,表空间:TEST_TABLESPACEtest_tablespace(create tablespace test_tablespace datafile 'D:/oracle/ORADATA /test_datafile.dbf' size 300M extent managerment local uniform size 40K);用户:test/manager说明:新建立的表空间test_tablespace对应的数据文件大小是300m,所在的数据库的数据块大小是8192 byte(),所以对于刚建立的表空间来说,由于数据文件头部占据了0-8共9个数据块。
从下面的查询block_id=9 我们可以看出,oracle保留了数据文件前面9个block(block 0~8),所以刚开始查询表空间的空闲空间时,数据块bloci_id 是从9开始的,总共的字节数是314490880,总共有314490880/8192=38390个数据块,共314490880/1024/1024=299.921875m.总共使用的空间数目是8192*9/1024/1024=0.0703125m.下面我们来看看这9个block的具体情况:block 0:OS headerblock 1:datafile headerblock 2:bitmapped file space headerblock 3~8:Head portion of bitmap blocks至于如何看某个block的结构,用bbed再方便不过了,那下面我们就用bbed 来看看这9个block是什么样的SQL>select * from dba_free_space where tablespace_name='TEST_TABLESPACE';得到:然后在TEST_TABLESPACE tablespace中建一表:create table cba( cba number(20) ); ---(初始为40k)SQL>select * from dba_free_space where tablespace_name='TEST_TABLESPACE';说明:在表空间初始化建立时指定了uniform参数,说明该表空间里所有的segment的extent 大小都相同为40k,所以当在该表空间里建立一个表时,该表所对应的段的扩展extent一次为40k,即40*1024/8192=5个数据块。
查询ORACLE表空间和数据文件信息
查询ORACLE表空间和数据⽂件信息表空间是oracle数据库中最⼤的逻辑单位与存储空间单位,数据库系统通过表空间为数据库对象分配空间。
表空间在物理上体现为磁盘数据⽂件,每⼀个表空间由⼀个或多个数据⽂件组成,⼀个数据⽂件只可与⼀个表空间相联系,这是逻辑与物理的统⼀。
了解表空间和数据⽂件的的属性及使⽤率,是数据库管理员的⼀项重要职责。
下⾯以oracle9i为例,详细介绍查询Oracle数据库表空间信息和数据⽂件信息的⽅法。
⼀、查看Oracle数据库中表空间信息的⽅法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数据库中表空间信息的命令⽅法:通过查询数据库系统中的数据字典表(data dictionary tables)获取表空间的相关信息,⾸先使⽤客户端⼯具连接到数据库,这些⼯具可以是SQLPLUS字符⼯具、TOAD、PL/SQL等,连接到数据库后执⾏如下的查询语句:selecta.a1 表空间名称,c.c2 类型,c.c3 区管理,b.b2/1024/1024 表空间⼤⼩M,(b.b2-a.a2)/1024/1024 已使⽤M,substr((b.b2-a.a2)/b.b2*100,1,5) 利⽤率from(select tablespace_name a1, sum(nvl(bytes,0)) a2 from dba_free_space group bytablespace_name) a,(select tablespace_name b1,sum(bytes) b2 from dba_data_files group bytablespace_name) b,(select tablespace_name c1,contents c2,extent_management c3 fromdba_tablespaces) cwhere a.a1=b.b1 and c.c1=b.b1;该语句通过查询dba_free_space,dba_data_files,dba_tablespaces这三个数据字典表,得到了表空间名称,表空间类型,区管理类型,以”兆”为单位的表空间⼤⼩,已使⽤的表空间⼤⼩及表空间利⽤率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle数据库表空间大小的查看、修改
1、通过oracle客户端连接到oracle数据库
a)安装好oracle客户端后,通过net manager工具配置本地net服务名,
依次点击开始,程序,Oracle - OraClient10g_home1,配置和移植工具,Net Manager。
b)进入Net Manager配置窗口。
c)依次点击本地,服务命名。
d)可以看到左侧的号变成绿色,此时可以点击该,弹出net服务名的
配置窗口
e)这里的网络服务名是指的oracle客户端所在机器的本地服务名,随便设
置个名字,例如sbzw,点击下一步。
f)默认设置,点击下一步。
g)在主机名后的输入框中输入oracle数据库所在的服务器的ip地址,例
如:,点击下一步。
h)在服务名后的输入框中输入oracle数据库的全局服务名,例如tjsb,
点击下一步。
i)此处不要点击完成,先点击测试查看连接是否正常。
j)在连接测试窗口中显示的应该是测试没有成功,此时请点击更改登录。
k)修改了用户名和密码后,点击确定,然后再次点击“测试”,提示连接成功后,关闭连接测试窗口,点击完成,至此本地net服务名配置完成。
2、通过oracle客户端的企业管理器修改数据库的表空间大小
a)依次点击开始,程序,Oracle - OraClient10g_home1,Enterprise
Manager Console(企业管理器)。
b)进入了oracle的企业管理器
c)依次点击数据库,sbzw,弹出登录窗口,
d)对于修改表空间而言,这里的用户名必须是sys用户,连接身份为
SYSDBA。
e)输入完成后,点击确定,可以看到左侧sbzw的菜单已经打开。
f)依次选择存储,表空间,则页面左侧会显示当前的表空间的使用情况。
g)对于需要增大的表空间,双击该表空间,例如这里的TS_FZ4_DATA,弹
出该表空间的编辑窗口。
h)对于表空间的修改,有两种办法:
i.一种是直接修改单个数据文件的大小值,也就是直接修改上图中的
大小里面的数值,单位是MB,修改完成后点击确定即可。
建议单个
数据文件大小不要超过2G,最多不超过10G,主要是为了防止数据
文件太大,万一数据文件出现错误会造成很大的损失。
ii.另一种是直接添加一个新的数据文件,例如下图中,我直接按照原有文件的序列添加了一个数据文件,然后将此数据文件放到了E盘
的ganhui文件夹下,大小为2348M。
然后点击确定即可。
说明:此处的文件名可以随便命名,后缀名系统设置为DBF即可。
文件目录就是该数据文件存放的位置,可以设置到空间比较大的盘符中去,提前创建好该文件夹,然后将文件目录指向该文件夹即可。
v1.0 可编辑可修改
i)至此,oracle数据库表空间修改完成。
11。