[每日一题] 11gOCP 1z0-052 :2013-09-20 BIGFILE | SMALLFILE TABLESPACE.....................B43

转载请注明出处:http://blog.youkuaiyun.com/guoyjoe/article/details/11850427



正确答案:AC

  

创建表空间语法,自来官方文档:



   其中SMALLFILE是Oracle 10g新增的特性。从Oracle 10g开始,Oracle推出了大文件表空间BIGFILE TABLESPACE,简称BFT,相对地也有了小文件表空间SMALL TABLESPACE ,简称SFT。

BIGFILE| SMALLFILE

Use this clause to determine whether the tablespace is a bigfileor smallfile tablespace. This clause overrides any default tablespace typesetting for the database.

·Abigfiletablespacecontainsonly one datafile or tempfile, which can contain up to approximately 4 billion(232) blocks. The maximum size of the single datafile or tempfile is128 terabytes (TB) for a tablespace with 32K blocks and 32TB for a tablespacewith 8K blocks.

·Asmallfiletablespaceis atraditional Oracle tablespace, which can contain 1022 datafiles or tempfiles,each of which can contain up to approximately 4 million (222)blocks.

If you omit this clause,then Oracle Database uses the current default tablespace type of permanent ortemporary tablespace set for the database. If you specifyBIGFILEfor a permanent tablespace, then the database by default creates alocally managed tablespace with automatic segment-space management.

  大文件表空间只能包含一个文件,但是这个文件最大可以达到4GB个数据块大小,按照Oracle通常支持的不同数据块大小(2k/4k/8k/16k/32k),最小的大文件表空间单个文件大小可达8TB,最大可以达到128TB, 当然具体单个文件能够达到的大小还受到OS的限制。

  数据库默认的表空间类型是SFT,如下查询可知,所以默认创建的表空间都是小文件表空间。

gyj@OCM> COL PROPERTY_VALUE FOR A20
gyj@OCM> COL DESCRIPTION FOR A50
gyj@OCM> select * from database_properties where property_name='DEFAULT_TBS_TYPE';

PROPERTY_NAME                  PROPERTY_VALUE       DESCRIPTION
------------------------------ -------------------- --------------------------------------------------
DEFAULT_TBS_TYPE               SMALLFILE            Default tablespace type

   我们也可以把数据库默认表空间类型SFT改为BFT,操作命令如下:

 gyj@OCM> alter database set default bigfile tablespace;

Database altered.

gyj@OCM> select * from database_properties where property_name='DEFAULT_TBS_TYPE';

PROPERTY_NAME                  PROPERTY_VALUE       DESCRIPTION
------------------------------ -------------------- --------------------------------------------------
DEFAULT_TBS_TYPE               BIGFILE              Default tablespace type

  但是通常不建议修改这个属性,可以通过如下命令修改表空间属性为默认值:

gyj@OCM> alter database set default smallfile tablespace;

Database altered.

gyj@OCM> select * from database_properties where property_name='DEFAULT_TBS_TYPE';

PROPERTY_NAME                  PROPERTY_VALUE       DESCRIPTION
------------------------------ -------------------- --------------------------------------------------
DEFAULT_TBS_TYPE               SMALLFILE            Default tablespace type

   如果在缺省默认设置下要创建BIGFILE类型的表空间,就需要指定一个新的参数BIGFILE,其他和原有创建表空间语法类似。如上题所示,创建表空间MRKT。

gyj@OCM> CREATE BIGFILE TABLESPACE MRKT
  2  DATAFILE '/u01/app/oracle/oradata/ocm/mrkt01.dbf' size 10M LOGGING
  3   EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

Tablespace created.

   通过视图dba_tablespaces视图,可以查看表空间属性,这个视图中新增中了一个字段bigfile用于标识一个表空间是否属于bigfile表空间。

gyj@OCM> select tablespace_name,bigfile from dba_tablespaces;

TABLESPACE_NAME                BIG
------------------------------ ---
SYSTEM                         NO
SYSAUX                         NO
UNDOTBS1                       NO
TEMP                           NO
USERS                          NO
EXAMPLE                        NO
GYJ                            NO
TP1                            NO
MRKT                           YES

9 rows selected.

  由于大文件表空间只能包含一个数据文件,所以相对文件号被设为1024:

gyj@OCM> col file_name for a50
gyj@OCM> select file_name,file_id,relative_fno from dba_data_files;

FILE_NAME                                             FILE_ID RELATIVE_FNO
-------------------------------------------------- ---------- ------------
/u01/app/oracle/oradata/ocm/users01.dbf                     4            4
/u01/app/oracle/oradata/ocm/undotbs01.dbf                   3            3
/u01/app/oracle/oradata/ocm/sysaux01.dbf                    2            2
/u01/app/oracle/oradata/ocm/system01.dbf                    1            1
/u01/app/oracle/oradata/ocm/example01.dbf                   5            5
/u01/app/oracle/oradata/ocm/gyj01.dbf                       6            6
/u01/app/oracle/oradata/ocm/gyj02.dbf                       7            7
/u01/app/oracle/oradata/ocm/tp01.dbf                        8            8
/u01/app/oracle/oradata/ocm/mrkt01.dbf                      9         1024

9 rows selected.

   大文件表空间可以最小表空间文件数量,从而简化DBA管理,在大型数据库中包含几十,数百文件的表空间随处可见,随着文件数据的增加,很多数据库参数就要做出相应的调整,如db_files,这个参数设完还要重启数据库才能生效,这都给数据库的维护带来不便,而BFT的出现,可以彻底解决这些问题。由于文件数量减少,控制文件的空间使用也不可以随之减少,检查点等数据库内部操作需要同步的文件头数量也大大减少,总之,大文件表空间的出现为超大型数据库(VLDB)的管理带来了极大的便利。

   但需要注意的是:一个大文件自然会带来I/O或存储上的问题,由于BFT只能存在一个数据文件上,所以要保证分配的磁盘或磁盘组具有足够的空间;为了避免I/O的竞争,在数据库底层,磁盘的分配和规划也非常重要,通常Striping/RAID或Oracle的ASM技术等需要被采用去分散I/O,避兔磁盘上的争用。

 答案解析:

 答案A正确:大文件表空间只能包含一个文件。

 答案B不正确:SEGMENT SPACE MANAGEMENT AUTO是用三级位图来管理了,支持大并发量的插入,而SEGMENT SPACE MANAGEMENT MANUAL才是使用FreeList。

 答案C正确,mrkt被设置为数据库级的默认表空间,当创建用户时没指定默认表空间,那么这个用户就会用mrkt作为自己的默认表空间。

gyj@OCM> ALTER DATABASE DEFAULT TABLESPACE MRKT;

Database altered.

答案D不正确,用户当前正在使用表空间,另外的会话是不能删除这个表空间的。

会话1,在表空间mrkt上创建一个表t100,并插入一条记录。

gyj@OCM> create table t100 (id int,name varchar2(10))  tablespace mrkt;

Table created.

gyj@OCM> insert into t100 values(1,'gyj');

1 row created.

会话2删除表空间mrkt

sys@OCM> drop tablespace mrkt including contents and datafiles;
drop tablespace mrkt including contents and datafiles
*
ERROR at line 1:
ORA-12919: Can not drop the default permanent tablespace

那怕不是数据库级的默认表空间,也会报错误:

gyj@OCM> alter database default tablespace users;

Database altered.

sys@OCM> drop tablespace mrkt including contents and datafiles;
drop tablespace mrkt including contents and datafiles
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired


QQ:252803295

技术交流:
DSI&Core Search Ⅰ 群:127149411(2000人技术群:未满)
DSI&Core Search Ⅱ 群:177089463(1000人技术群:未满)
DSI&Core Search Ⅲ 群:284596437(500人技术群:未满)
DSI&Core Search Ⅳ 群:192136702(500人技术群:未满)
DSI&Core Search Ⅴ 群:285030382(500人闲聊群:未满)


MAIL:dbathink@hotmail.com

BLOG:http://blog.youkuaiyun.com/guoyjoe

WEIBO:http://weibo.com/guoyJoe0218

ITPUB:http://www.itpub.net/space-uid-28460966.html

OCM: http://education.oracle.com/education/otn/YGuo.HTM


<think>我们正在处理一个关于向现有Oracle表空间添加数据文件并设置自动扩展的问题。 根据用户的问题,他想要使用ALTER TABLESPACE语句来添加数据文件,并且设置自动扩展属性。 步骤: 1. 确认表空间名称:用户没有指定表空间名称,但根据问题描述,我们需要假设一个表空间名称(例如,用户可能已经有一个表空间,比如叫'USERS')。 2. 添加数据文件:使用ALTER TABLESPACE ... ADD DATAFILE语句。 3. 设置自动扩展:在添加数据文件的同时,可以设置AUTOEXTEND ON,并指定NEXT和MAXSIZE。 语法: ALTER TABLESPACE tablespace_name ADD DATAFILE 'file_path' SIZE initial_size AUTOEXTEND ON NEXT increment_size MAXSIZE max_size; 注意:如果表空间是BIGFILE类型,则只能有一个数据文件,因此不能添加新的数据文件。但用户的问题是关于普通表空间(smallfile)的,因为bigfile表空间只能有一个文件,所以不能添加。 根据引用[4]中提到了SMALLFILE TABLESPACE,我们可以推断用户可能是针对普通表空间(即smallfile)进行操作。 因此,在回答中需要先确认表空间类型。如果是bigfile表空间,则不能添加数据文件,只能调整现有数据文件的大小。 但用户的问题中并没有明确表空间类型,所以我们按照普通表空间来处理。 示例语句: 假设表空间名为EXAMPLE,添加一个初始大小为500M的数据文件,自动扩展,每次扩展50M,最大扩展到2G: ALTER TABLESPACE EXAMPLE ADD DATAFILE '/u01/app/oracle/oradata/orcl/example02.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M MAXSIZE 2G; 另外,也可以不指定MAXSIZE,而设置为UNLIMITED,表示无限制(但实际受文件系统限制)。 引用说明: 引用[1]:ALTER TABLESPACE语句用于修改表空间或其数据文件。 引用[3]:展示了如何修改单个数据文件的自动扩展属性,但这里我们是添加新的数据文件。 引用[4]:展示了创建表空间时指定数据文件,以及添加数据文件的示例(通过ALTER TABLESPACE ... ADD DATAFILE)。 因此,我们将基于引用[4]的语法来构建答案。 注意:在添加数据文件之前,确保目标路径有足够的空间,并且Oracle进程有权限在该路径创建文件。 另外,如果表空间是只读的,则不能添加数据文件,需要先将表空间改为读写模式。 完整步骤: 1. 确认表空间类型和状态: SELECT tablespace_name, contents, bigfile FROM dba_tablespaces WHERE tablespace_name = 'YOUR_TABLESPACE_NAME'; 2. 如果是普通表空间(smallfile),并且状态是可读写,则可以添加数据文件。 3. 执行添加数据文件的语句。 4. 验证:查询dba_data_files视图。 考虑到用户可能还需要监控表空间的使用情况,我们可以提供查询表空间使用情况的语句(如引用[5]中的查询)。 因此,回答将包括: - 添加数据文件的语法示例 - 注意事项(表空间类型、状态、路径权限等) - 验证方法 - 表空间使用情况查询 生成相关问题: - 如何查看Oracle表空间的使用情况? - 如何调整现有数据文件的大小? - 当表空间不足时,除了添加数据文件还有哪些方法? 注意:用户的问题中提到了“autoextend”,所以我们在添加数据文件时设置了自动扩展。</think>### 向 Oracle 表空间添加数据文件并设置自动扩展 以下是使用 `ALTER TABLESPACE` 添加数据文件并配置自动扩展的完整步骤和语法: #### 基本语法 ```sql ALTER TABLESPACE tablespace_name ADD DATAFILE 'file_path.dbf' SIZE initial_size AUTOEXTEND ON NEXT increment_size MAXSIZE max_size; ``` #### 实际示例 ```sql -- 添加新的数据文件并设置自动扩展 ALTER TABLESPACE users ADD DATAFILE '/u01/app/oracle/oradata/orcl/users02.dbf' SIZE 1G AUTOEXTEND ON NEXT 500M MAXSIZE 20G; ``` #### 关键参数说明 1. **`tablespace_name`** 要扩展的表空间名称(如 `USERS`, `EXAMPLE` 等) 2. **`DATAFILE`** 新数据文件的完整路径(确保 Oracle 进程有写入权限)[^2] 3. **`SIZE`** 初始分配空间大小(支持单位:`K`, `M`, `G`) 4. **`AUTOEXTEND ON NEXT`** 空间不足时自动扩展的增量大小(示例:`NEXT 500M`) 5. **`MAXSIZE`** 文件最大容量限制: - `MAXSIZE 20G`:限制为 20GB - `MAXSIZE UNLIMITED`:无上限(受文件系统限制)[^3] #### 验证操作结果 ```sql SELECT file_name, bytes/1024/1024/1024 AS size_gb, autoextensible, increment_by*(bytes/blocks)/1024/1024 AS increment_mb, maxbytes/1024/1024/1024 AS max_gb FROM dba_data_files WHERE tablespace_name = 'USERS'; ``` #### 重要注意事项 1. **表空间类型限制** - **Bigfile 表空间**:只能包含一个数据文件,无法添加新文件[^4] - **Smallfile 表空间**:最多可添加 1022 个数据文件 2. **表空间状态要求** - 表空间必须为 `ONLINE` 状态 - 只读表空间需先改为读写模式: ```sql ALTER TABLESPACE users READ WRITE; ``` 3. **文件系统准备** ```sql -- 检查目标路径可用空间 SELECT * FROM v$filesystem_usage WHERE mount_point = '/u01/app/oracle/oradata'; ``` 4. **扩展现有文件** 如需修改已有数据文件的扩展属性: ```sql ALTER DATABASE DATAFILE '/path/file.dbf' AUTOEXTEND ON NEXT 1G MAXSIZE 50G; [^3] ``` [^1]: Oracle ALTER TABLESPACE 官方文档 [^2]: 数据文件路径安全规范 [^3]: 自动扩展参数配置最佳实践 [^4]: Bigfile 表空间架构限制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值