
按磁盘剩余空间的10%自动增长,这个实现不了。 如果表空间设置为自动增长,在空间不足的情况下Oracle系统会自动增长表空间的,但是也不会超过磁盘的总空间大小。 创建表空间的语法如下:create tablespace jydbdatafile 'XXX\XXX\xxdbf' --这里数据文件的路径你自己视情况定size 5120Mautoextend onnext 1024Mextent management local --这里设置表空间为本地管理
以下的文章主要是介绍Oracle空间管理的技巧 我们大家都知道在Oracle数据库中 DBA是可以通过相应的表或是视图来了解当前的空间具体使用的状况观测 从而作出可能的调整决定
一 表空间的自由空间
通过对表空间的自由空间的观察 可用来判断分配给某个表空间的空间是太多还是不够 请看下列的语句
SQL > select a file_id FileNo a tablespace_name
Tablespace_name
a bytes Bytes a bytes sum(nvl(b bytes )) Used
sum(nvl(b bytes )) Free
sum(nvl(b bytes ))/a bytes %free
from dba_data_files a dba_free_space b
where a file_id=b file_id(+)
group by a tablespace_name
a file_id a bytes order by a tablespace_name;
File Tablespace
No _nameBytes Used Free %free
IDX_JF E+ E+
JFSJTS E+ E+
JFSJTS E+ E+
RBS
RBS E+ E+
RBSJF E+ E+
SFGLTS E+ E+
SFSJTS E+ E+
SYSTEM
TEMP
TOOLS
USERS
rows selected
可以看出 在FileNo为 的表空间RBS中 只有 %的分配空间未被使用 这个比例太小了 而在SYSTEM及TEMP等表空间中 高达 %以上的空间未被利用 对于生产型数据库 这个表空间的设置有些偏高
关于自由Oracle空间管理 有下面的一些建议
利用Export及Import命令卸出和装入表空间可以释放大量的空间 从而缓解增加另外的数据文件的要求
如果包含具有高插入(insert)和更新(update)活动的表的表空间中自由空间的比重下降到了 %以下 要为此表空间增加更多的空间
对于一个基本是静态表数据的表空间 如果有多于 %的自由空间 则可以考虑减少分配给它的文件空间量
减少SYSTEM表空间的空间量比较困难 因为那要重建数据库
二 表及索引的扩展
A 为了防止表或索引被过分扩展 及时实现对数据库的调整 用户应当经常对有关对象进行观察
我们可以认为 扩展区域大于 个的表或索引为过分扩展(overextended) 请看下面的语句
SQL > select substr(segment_name )
Segment_name segment_type
substr(tablespace_name )
Tablepace_name extents Max_extents
from dba_segments
where extents > and owner= JFCL
order by segment_name;
SEGMENT_NAMESEGMENT TABLEPACE_
EXTENTS MAX_EXTENTS
_TYPE
CHHDFYB TABLE JFSJTS
CHHDFYB_DHHMINDEX JFSJTS
DJHZFYB_BF TABLE JFSJTS
DJHZFYB_DJHMINDEX IDX_JF
DJHZFYB_JZHMINDEX IDX_JF
GSMFYB TABLE JFSJTS
JFDHTABLE JFSJTS
JFDH_DHHM INDEX IDX_JF
JFDH_JZHM INDEX IDX_JF
XYKFYB TABLE JFSJTS
YHDATABLE JFSJTS
YHDA_BAKTABLE JFSJTS
YHHZFYB_ TABLE JFSJTS
rows selected
通过观察 DBA可以及时发现问题并进行相应的处理
我们可以利用export卸出表 然后删除表 再利用import命令将表装入 这样 可以将不连续的区域合并成一个连续的空间
B 如果用户希望对表的空间设置进行优化 例如 需要改变表EMP的initial参数 可以采用下面的方法
在将EMP表卸出并删除后执行imp命令时使用indexfile参数
imp userid=scott/tiger file=emp dmp indexfile=emp sql Oracle把表和索引的创建信息写到指定的文件 而不是把数据写回
打开emp sql文件
REM CREATE TABLE SCOTT EMP ( EMPNO
NUMBER( ) ENAME
REM VARCHAR ( ) JOB VARCHAR ( )
MGR NUMBER( ) HIREDATE DATE
REM SAL NUMBER( ) M NUMBER
( ) DEPTNO NUMBER( ))
REM PCTFREE PCTUSED INITRANS
MAXTRANS LOGGING STORAGE(INITIAL
REM NEXT MINEXTENTS MAXEXTENTS
PCTINCREASE FREELISTS
REM FREELIST GROUPS BUFFER_POOL DEFAULT)
TABLESPACE USER_DATA ;
REM rows
对它进行编辑 去除 REM 等信息 找到Initial参数 根据需要改变它
在SQLplus中执行emp sql
装入数据
mp userid=scott/tiger ignore=y file=emp dmp
需要注意的是 ignore参数必须设为Y
C 可以用下面的语句来观察表或索引距离达到最大扩展的状况 UNUSE 为距离达到最大扩展的值 在User_extents表中 extent_id是从 开始记述数的
SQL >select a table_name TABLE_NAME max
(a max_extents) MAXEXTENTS
max(b extent_id)+ IN USE MAX
(a max_extents) (max(b extent_id)+ ) UNUSE
from user_tables a user_extents b
where a table_name=b segment_name
group by a table_name ORDER BY ;
TABLE_NAME MAXEXTENTS IN USEUNUSE
YZPHB
SHJYB
SHFYB
RCHDB
SJTXDZB
SJTXDAB
CHYHB
JFDH
rows selected
如果 UNUSE 小到一定的程度 我们就应该加以关注 进行适当的调整处理
三 关于连续空间
可以用下面的语句来查看数据库中的自由空间
SQL > select from dba_free_space
where tablespace_name= SFSJTS
order by block_id;
TABLESPACE FILE_ID BLOCK_ID BYTESBLOCKS
_NAME
SFSJTS
SFSJTS
SFSJTS
SFSJTS
SFSJTS
SFSJTS
SFSJTS
SFSJTS
SFSJTS
SFSJTS
rows selected
我们可以通过命令的结果来估计相邻自由空间的真正数量 对每一行 用起始快的id(BLOCK_ID)加上自由块(BLOCKS)的数量 如果其和与下一行的块id(BLOCK_ID)相等 则此两行是连续的 如上例第二行和第三行 + = 而 + != 所以从block_id为 开始 有 + = 个block的连续空间
在Oracle数据库的后台 系统监视器(SMON)周期性地合并自由空间相邻的块 以得到更大的连续块 而DBA可以用SQL命令来完成这个工作
alter tablespace tablespace_name coalesce;
lishixinzhi/Article/program/Oracle/201311/17790
不知道你的初衷是什么。你还没有理解数据库的一个深层次含义:
例如: update 更新一张新的空值Table,
update table set vlaue='0'
那你说这是不是增加TABLESPACE 呢?
如果在新有的表进行更新也很用可能会增加表空间,如你的存储类型是什么,如大文件,,等等。
如果避免是TABLESPACE 增加,那你只能定时清洗数据也就是每天DBA 工作职责一部分,巡检。
还有,你所提问的问题已经详细,谢谢
建立表空间和用户的步骤:
用户建立: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,
);
完整例子:
--表空间
CREATE TABLESPACE sdt
DATAFILE 'F:\tablespace\demo' size 800M
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
--索引表空间
CREATE TABLESPACE sdt_Index
DATAFILE 'F:\tablespace\demo' size 512M
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
--2建用户
create user demo identified by demo
default tablespace std;
--3赋权
grant connect,resource to demo;
grant create any sequence to demo;
grant create any table to demo;
grant delete any table to demo;
grant insert any table to demo;
grant select any table to demo;
grant unlimited tablespace to demo;
grant execute any procedure to demo;
grant update any table to demo;
grant create any view to demo;
开始~程序~Oracle~Enterprise Manager Console
这个软件就是给你准备的~
如果你的Oracle有这个功能~
进去登陆,直接创建表空间~或者临时表空间~
1连接数据库
2存储~表空间~查看
3存储~数据文件~创建
4存储~表空间~添加数据文件~
最好用这个创建~方便~
或者没有的话就用sql创建表空间~
一、建立表空间
CREATE TABLESPACE data01
DATAFILE '/oracle/oradata/db/DATA01dbf' SIZE 500M
UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k
三、建立临时表空间
CREATE TEMPORARY TABLESPACE temp_data
TEMPFILE '/oracle/oradata/db/TEMP_DATAdbf' SIZE 50M
六、扩展表空间
首先查看表空间的名字和所属文件
select tablespace_name, file_id, file_name,
round(bytes/(10241024),0) total_space
from dba_data_files
order by tablespace_name;
1增加数据文件
ALTER TABLESPACE game
ADD DATAFILE '/oracle/oradata/db/GAME02dbf' SIZE 1000M;
2手动增加数据文件尺寸
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAMEdbf'
RESIZE 4000M;
3设定数据文件自动扩展
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAMEdbf
AUTOEXTEND ON NEXT 100M
MAXSIZE 10000M;
设定后查看表空间信息
SELECT ATABLESPACE_NAME,ABYTES TOTAL,BBYTES USED, CBYTES FREE,
(BBYTES100)/ABYTES "% USED",(CBYTES100)/ABYTES "% FREE"
FROM SYSSM$TS_AVAIL A,SYSSM$TS_USED B,SYSSM$TS_FREE C
WHERE ATABLESPACE_NAME=BTABLESPACE_NAME AND ATABLESPACE_NAME=CTABLESPACE
以上就是关于oracle数据库创建自动增长的表空间语句怎么写全部的内容,包括:oracle数据库创建自动增长的表空间语句怎么写、Oracle空间管理的3技巧、oracle update 语句会使表空间增加吗 如果会如何避免呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)