ITPub博客

首页 > 数据库 > 数据库开发技术 > Database Storage

Database Storage

原创 数据库开发技术 作者:OmarChina 时间:2007-10-21 12:57:27 0 删除 编辑
Oracle8i Server and SQL*PlusèOracle8i Administrator's GuideèPart III Database Storage[@more@]

Oracle8i Server and SQL*PlusèOracle8i Administrator's GuideèPart III Database Storage

介绍数据库结构,数据库对象和保护事务的完整性,包括以下三个章节:

09章: 管理tablespace

10章: 管理datafile

11章: 管理rollback segment

09章: 管理tablespace

管理tablespace指导

创建tablespace

管理tablespace的分配

改变tablespace的可用性

Read-Only Tablespace

Drop tablespace

使用dbms_space_admin

Transporting tablespace between databases

访问和tablespace相关的信息

A:管理tablespace指导:

为了创建一个tablespace可以使用create tablespace create temporary tablesapce 。但是你必须拥有create tablespace 的系统权限。

其后,可以使用alter tablespace alter database子句去改变一个tablespace。但必须拥有alter tablespacealter database系统权限。

8I之前是dictionary-managed tablespace,从8I开始支持local managed stablespace8I默认还是字典。官方推荐使用local managed

temporary tablespace可以使用字典管理也可以使用local管理.

Alter tablespace字句的作用:

1, 改变默认的storage 参数

2, coalescing Free 表空间的空间

3, 改变online/offline/read-only/read-write

4, 添加,rename,打开关闭auto extension,改变大小等等

创建一个本地管理的表空间

2个选择,1是使用autoallocate选项,ORACLE自动管理分区的分配;

2是使用unifor size的方式。如果指定uniform不指定大小,默认是1Mextent

可以通过v$sort_segmentv$sort_usage视图去查看目前在排序的用户

创建一个字典管理的temporary Tablespace :

create tablespace temp dafile ‘/u01/temp01.dbf’ size 5m temporary ;

改变一个字典管理的temporary tablespace到一个local temporary tablespace

alter tablespace temp temporary;

10G中已经不允许创建字典管理的tablespace.

查看temp的信息要去v$tempfiledba_temp_files 这和v$datafile dba_data_files是很相似的

coalesce free space

local管理的表空间中是不会出现碎片的。如果在字典管理的表空间中,所有的的分区大小都是一样的话,也是不会出现分区碎片

监控自由空间。DBA_FREE_SPACEdba_free_space_coalesced

tablespace offline的几种方式:

1,Normal:一个没有错误的datafiles表空间中,可以Normal Offline,这样的情况下会产生一个checkpoint在所有 数据文件中。

2,Temporary:即使在datafiles中有出现问题的时候,还是可以用temporary的方式offline.ONLINE上来的时候不需要meidia recovery

如过是因为write erroes temporary 的方式Offline后,再online回来的时候是要media recovery

3,Immediate:可以使用这样的方式offline后,online的时候是需要media recovery的。而且在noarchvielog的模式下面是不可以offline immediate的。

4,For Recover:为了做recover的方式可以这样OFFLINE

readonly的模式表空间中.是可以进行数据字典修改。所以alter table add alter table modify等语句是可以执行的。

drop tablespace example including contents and datafiles cascade constraints

在控制文件中,有MAXDATAFILES参数指定最大的数据文件的数量。但是是小于db_files初始参数文件的。当数据文件的数量达到控制文件中的限制,但没有超过db_files的时候,控制文件会自动扩张

要查看某个表空间的数据文件是否是处于autoetented on/OFF的模式,要访问dba_data_files字典。

ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/users03.dbf' 
    AUTOEXTEND OFF;
ALTER TABLESPACE users
    RENAME DATAFILE '/u02/oracle/rbdb1/user1.dbf',
                    '/u02/oracle/rbdb1/user2.dbf'
                 TO '/u02/oracle/rbdb1/users01.dbf', 
                    '/u02/oracle/rbdb1/users02.dbf';

ALTER DATABASE...RENAME FILE

ALTER DATABASE
    RENAME FILE '/u02/oracle/rbdb1/sort01.dbf',
                '/u02/oracle/rbdb1/user3.dbf'
             TO '/u02/oracle/rbdb1/temp01.dbf',
                '/u02/oracle/rbdb1/users03.dbf;
 

如果想使用checksum去验证数据块,要把参数db_block_checksum设置为true

DBWN进程产生这个checksum值为每一个快,并且存在块头中。在direct loader中。也会去checksums,

下一次ORACLE读这个块的时候,它使用checksum去发现块是否损坏。如果有坏块发现.ORACLE返回ora-01578

rollback_segments参数可以指定私有的回滚段,或者手工去指定一个回滚段。

总公初始分配回滚段的大小(byte)/初始分配的分区的数目=计算初始每个分区分配的大小(byte)

设置optimal的值在回滚段中。如果长事物的话,这个要设置的很大,避免1555号错误

create rollback segment rbs_01 tablespace test;

alter system set rollback_segments=rbs_01

sys@ORCL> create public rollback segment rbs_02

2 tablespace test

3 storage(

4 initial 100k

5 next 100k

6 optimal 1m

7 minextents 20

8 maxextents 100);

Oracle推荐:

1, 设置initial next一样的大小

2, 创建一个大的数目,初始分配的分区的大小,避免动态扩张,说是minextents=20是个不错的值

3, 避免设置maxextents=unlimited

sys@ORCL> alter rollback segment rbs_02

2 storage(maxextents 120);

ALTER ROLLBACK SEGMENT rbs1 SHRINK TO 100K;

sys@ORCL> select segment_name,owner,tablespace_name ,status from dba_rollback_segs;

SEGMENT_NAME OWNER TABLESPACE_NAME STATUS

------------------------------ ------ ------------------------------ ----------------

SYSTEM SYS SYSTEM ONLINE

_SYSSMU1$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU2$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU3$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU4$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU5$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU6$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU7$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU8$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU9$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU10$ PUBLIC UNDOTBS1 ONLINE

SET TRANSACTION USE ROLLBACK SEGMENT large_rs1;

显示一个ROLLBACK SEGMENT 是否已经OFFLINE

如果OFFLINE一个表空间。他里面还有事务的话,这个状态会显示pending offline。新的事务而且是没有办法使用这个回滚段的

=到旧的事务全部结束。回滚段就OFFLINE

SELECT name, xacts "ACTIVE TRANSACTIONS"
      FROM v$rollname, v$rollstat
      WHERE status = 'PENDING OFFLINE'
        AND v$rollname.usn = v$rollstat.usn;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9925929/viewspace-977923/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 面试
请登录后发表评论 登录
全部评论
  • 博文量
    68
  • 访问量
    1001381