加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

maxsize与autoextend on

(2007-12-17 15:22:04)
标签:

it/科技

分类: oracle
 总结:maxbytes是与autoextend on 相关的
SQL> create tablespace test_1
  datafile 'f:\test1.ora' size 10m
  segment space management auto;

SQL> select file_name,bytes,maxbytes
  from dba_data_files
  where tablespace_name='TEST_1';

FILE_NAME                                   BYTES   MAXBYTES
-------------------------------------- ---------- ----------
F:\TEST1.ORA                             10485760          0

SQL> select file_name,bytes,maxbytes,autoextensible
  from dba_data_files
  where tablespace_name='TEST_1';

FILE_NAME                                   BYTES   MAXBYTES AUT
-------------------------------------- ---------- ---------- ---
F:\TEST1.ORA                             10485760          0 NO

当缺省autoextend on(off)参数的时候默认值为 no,即不自动扩展

SQL> drop tablespace test_1 including contents and datafiles;

我们再在create tablespace里指定autoextend off

SQL> create tablespace test_1
  datafile 'f:\test1.ora' size 5m
  autoextend off
  segment space management auto;

表空间已创建。

SQL> select file_name,bytes,maxbytes,autoextensible
  from dba_data_files
  where tablespace_name='TEST_1';

FILE_NAME                                   BYTES   MAXBYTES AUT
-------------------------------------- ---------- ---------- ---
F:\TEST1.ORA                              5242880          0 NO

此时数据文件也不自动扩展,同样也没有最大值maxbytes

我们将datafile resize下看autoextend及maxbytes

SQL> alter database datafile 'f:\test1.ora' resize 6m;

数据库已更改。

SQL> select file_name,bytes,maxbytes,autoextensible
  from dba_data_files
  where tablespace_name='TEST_1';

FILE_NAME                                   BYTES   MAXBYTES AUT
-------------------------------------- ---------- ---------- ---
F:\TEST1.ORA                              6291456          0 NO

然后我们改变autoextend为on,但是不指定具体的maxbytes

SQL> alter database datafile 'f:\test1.ora' autoextend on;

数据库已更改。

SQL> select file_name,bytes,maxbytes,autoextensible
  from dba_data_files
  where tablespace_name='TEST_1';

FILE_NAME                                   BYTES   MAXBYTES AUT
-------------------------------------- ---------- ---------- ---
F:\TEST1.ORA                              6291456 3.4360E+10 YES

可见目前maxbytes已经有了值,但是因为没有指定值,因而系统给了一个默认值

我们再来给maxbytes指定一个值

SQL> alter database datafile 'f:\test1.ora' autoextend on maxsize 10m;

数据库已更改。

SQL> select file_name,bytes,maxbytes,autoextensible
  from dba_data_files
  where tablespace_name='TEST_1';

FILE_NAME                                   BYTES   MAXBYTES AUT
-------------------------------------- ---------- ---------- ---
F:\TEST1.ORA                              6291456   10485760 YES

可以看到maxbytes已经为我们指定的值,这就说明maxbytes是与autoextend on 相关的

SQL> alter database datafile 'f:\test1.ora' autoextend off maxsize 10m;
alter database datafile 'f:\test1.ora' autoextend off maxsize 10m
                                                      *
ERROR 位于第 1 行:
ORA-00900: 无效 SQL 语句

当同时指定autoextend off与maxsize 的时候就会出错

我们再来试一下

SQL> alter database datafile 'f:\test1.ora' autoextend off;

数据库已更改。

SQL> select file_name,bytes,maxbytes,autoextensible
  from dba_data_files
  where tablespace_name='TEST_1';

FILE_NAME                                   BYTES   MAXBYTES AUT
-------------------------------------- ---------- ---------- ---
F:\TEST1.ORA                              6291456          0 NO

当改变autoextend值为off的时候maxsize的值又归为0

再看resize与maxsize

SQL> create tablespace test1
  datafile 'f:\test1.ora' size 2m
  autoextend on maxsize 4m
  segment space management auto;

SQL> select file_name,bytes,maxbytes,autoextensible
  from dba_data_files
  where tablespace_name='TEST1';

FILE_NAME                                   BYTES   MAXBYTES AUT
-------------------------------------- ---------- ---------- ---
F:\TEST1.ORA                              2097152    4194304 YES

SQL> alter database datafile 'f:\test1.ora' resize 6m;

数据库已更改。

这说明我们可以手动更改datafile的大小在maxbytes的范围外,只有自动扩展的时候maxbytes起作用,手动修改了size的大小,在存储数据时可以超过maxbytes的限制

SQL> select file_name,maxbytes/1024/1024 max_m,bytes/1024/1024 byte_m
     from dba_data_files
     where  tablespace_name='TEST1';

FILE_NAME                                   MAX_M     BYTE_M
-------------------------------------- ---------- ----------
F:\TEST1.ORA                                            6

这个size的大小已经超出了maxsize限定的范围,我们再来看看在表空间test1里唯一的表的大小

SQL> select segment_name ,sum(bytes)/1024/1024 byte_m
  from user_extents
  where segment_name='TEST1_1'
  group by segment_name;

SEGMENT_NAME           BYTE_M
------------------ ----------
TEST1_1                     5

表的大小已经是5M,说明数据文件的容量是6M,但是超过6M的数据是不能被存储的

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有