7.读书笔记收获不止Oracle之 逻辑体系二 深入与调整

前端之家收集整理的这篇文章主要介绍了7.读书笔记收获不止Oracle之 逻辑体系二 深入与调整前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

7.读书笔记收获不止Oracle之 逻辑体系二 深入与调整

上篇了解了ORACLE的逻辑体系结构及一些基本查看命令。接下深入看看如何调整。

1. BLOCK调整

9i以后的版本中,ORACLE支持用户在新建用户表空间时指定块的大小。这样在多个表空间时,各自的BLOCK大小可能各不相同。

只能是新建自己的用户表空间,不能更改已建好的,更不能更改或调整系统表空间。

查看一个参数:

sql>show parameter cache_size;

NAME TYPE VALUE

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

client_result_cache_size big integer 0

db_16k_cache_size big integer0

db_2k_cache_size biginteger 0

db_32k_cache_size big integer0

db_4k_cache_size biginteger 0

db_8k_cache_size biginteger 0

db_cache_size big integer 0

db_flash_cache_size big integer 0

db_keep_cache_size biginteger 0

db_recycle_cache_size big integer 0

创建一个16KBBLOCK_SIZE的表空间,需要先将db_16k_cache_size 取值设置为非空:

sql>alter system setdb_16k_cache_size=100m;

sql>show parameter 16k;

NAME TYPE VALUE

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

db_16k_cache_size big integer112M

sql>create tablespace tbs_toad_16k blocksize 16k datafile'+DATA/ORCL/DATAFILE/tbs_toad_16k_01.dbf' size 100m

autoextend on

extent management local

segment space managementauto;

create tablespace tbs_toad_16k blocksize 16k datafile'+DATA/ORCL/DATAFILE/tbs_toad_16k_01.dbf' size 100m

查看:

sql> select tablespace_name,block_size from dba_tablespaceswhere tablespace_name in('TBS_TOAD','TBS_TOAD_16K');

TABLESPACE_NAME BLOCK_SIZE

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

TBS_TOAD 8192

TBS_TOAD_16K 16384

2. PCTFREE参数与调整

在只读数据库或者只有插入删除很少更新的数据库环境中,才合适将PCTFREE设置为0。

ORACLE有一个默认的属性,PCTFREE=10,这个参数在数据库层面生效,建表时如果指定PCTFREE为别的值,那这个T表或者说SEGMENT T的所有块的属性就是其他了。

3. EXTENT 尺寸与调整

创建一个每次扩展10M的表空间,如下:

sql> create tablespace TBS_TOAD_2datafile '+DATA/ORCL/DATAFILE/tbs_toad_2.dbf' size 100m extent management local

uniform size 10m

segment space management auto;

在TBS_TOAD_2上创建一个T2

后执行查询

sql> create table t2 (id int) tablespace tbs_toad_2;

sql> select segment_name,extent_id,tablespace_name,bytes/1024/1024,blocksfrom user_extents where segment_name='T2';

no rows selected

为空。

然后进行插入,然后查看如下:

sql> insert into t2 select rownum fromdual connect by level<=1000000;

sql> selectsegment_name,blocks from user_extentswhere segment_name='T2';

SEGMENT_NAME EXTENT_ID TABLESPACE_NAME BYTES/1024/1024 BLOCKS

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

T2 0 TBS_TOAD_2 10 1280

T2 1 TBS_TOAD_2 10 1280

4. 已用和未用的表空间

查看剩余的空间。

sql> select sum(bytes)/1024/1024 from dba_free_space wheretablespace_name = 'TBS_TOAD';

SUM(BYTES)/1024/1024

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

68

查看总共表空间大小:

sql> select sum(bytes)/1024/1024 from dba_data_files wheretablespace_name = 'TBS_TOAD';

SUM(BYTES)/1024/1024

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

100

4.1表空间大小与自动扩展

如果表空间不能自动扩展,用光后,继续插入会引起报错。

可以给表空间增加文件

sql> alter tablespace tbs_toad adddatafile '+DATA/ORCL/DATAFILE/tbs_toad02.dbf' size 10m;

Tablespace altered.

再次用光就又没了,查看表空间是否支持自动扩展如下:

sql> select file_name,autoextensible,bytes/1024/1024from dba_data_files where tablespace_name='TBS_TOAD';

FILE_NAME

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

TABLESPACE_NAME AUT BYTES/1024/1024

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

+DATA/ORCL/DATAFILE/tbs_toad01.dbf

TBS_TOAD NO 100

+DATA/ORCL/DATAFILE/tbs_toad02.dbf

TBS_TOAD NO 10

NO表示不自动扩展。

可以设置自动扩展如下:

sql> alter database datafile'+DATA/ORCL/DATAFILE/tbs_toad02.dbf' autoextend on;

Database altered.

sql> select file_name,bytes/1024/1024from dba_data_files where tablespace_name='TBS_TOAD';

FILE_NAME

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

TABLESPACE_NAME AUT BYTES/1024/1024

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

+DATA/ORCL/DATAFILE/tbs_toad01.dbf

TBS_TOAD NO 100

+DATA/ORCL/DATAFILE/tbs_toad02.dbf

TBS_TOAD YES 10

表空间会自动扩展,当然要小心磁盘空间的使用哦!

也可以在创建表空间的时候,加上autoextend on即可。

删除表空间命令

sql>drop tablespace TBS_TOAD includingcontents and datafiles;

(PS:windows的数据文件需要自己手动删除)

表空间扩展的大小可以设定参数为next 64k 或者其他,类似扩展区的 uniform 64k。

还可以限定最大尺寸,参数为 maxsize 5G或者其他.

Extent management local 和 segmentspace management auto

10g以后不需要这两行命令了其实。系统默认是区的本地管理和段的自动管理。

以前区管理是依据数据字典的,导致系统产生大量的递归调用,后来改为通过区上的位图标记来管理区的扩展,性能得以极大提升。10g 以上完全取消了字典管理功能

5. 回滚表空间

查看,系统自带的回滚表空间,当前使用的回滚表空间

sql> show parameter undo;

NAME TYPE VALUE

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

temp_undo_enabled boolean FALSE

undo_management string AUTO

undo_retention integer 900

undo_tablespace string UNDOTBS1

自己也可以创建一个回滚表空间的,查看我们之前创建的如下:

sql> select tablespace_name,status fromdba_tablespaces where contents='UNDO';

TABLESPACE_NAME STATUS

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

UNDOTBS1 ONLINE

UNDOTBS2 ONLINE

查看回滚表空间的大小:

sql> select tablespace_name,sum(bytes)/1024/1024 fromdba_data_files where tablespace_name in ('UNDOTBS1','UNDOTBS2') group bytablespace_name;

TABLESPACE_NAME SUM(BYTES)/1024/1024

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

UNDOTBS1 95

UNDOTBS2 100

切换回滚表空间可以,如下:

sql>alter system set undo_tablespace=undotbs2 ;

sql> show parameter undo

NAME TYPE VALUE

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

temp_undo_enabled boolean FALSE

undo_management string AUTO

undo_retention integer 900

undo_tablespace string UNDOTBS2

数据库的回滚表空间可以有多个,并且自由切换,但是数据库当前使用的回滚表空间只能有一个(RAC会有多个)。

6. 临时表空间新建与切换

临时表空间在数据库中也可以有多个,但是可以被同时使用。

sql> select tablespace_name,sum(bytes)/1024/1024 fromdba_temp_files group by tablespace_name;

TABLESPACE_NAME SUM(BYTES)/1024/1024

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

TEMP 60

TEMP_ZOU 100

当前TOAD用户使用的临时表空间时 TEMP_ZOU这个。

sql> select DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_userswhere username='TOAD';

DEFAULT_TABLESPACE TEMPORARY_TABLESPACE

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

TBS_TOAD TEMP_ZOU

sql> select DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_userswhere username='SYSTEM';

DEFAULT_TABLESPACE TEMPORARY_TABLESPACE

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

SYSTEM TEMP

切换使用的临时表空间

sql> alter user toad temporarytablespace temp;

User altered.

sql> select DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_userswhere username='TOAD';

DEFAULT_TABLESPACE TEMPORARY_TABLESPACE

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

TBS_TOAD TEMP

发生了切换。

多少用户在使用多少临时表空间

sql> selecttemporary_tablespace,count(*) from dba_users group by temporary_tablespace;

TEMPORARY_TABLESPACE COUNT(*)

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

TEMP 43

切换全部临时表空间

sql>alter database default temporarytablespace temp_toad;

6.1临时表空间组

临时表空间组可以通过观察数据字典dba_tablespace_groups得到,可以为同一用户的不同SESSION设置不同的临时表空间。

sql> select *from dba_tablespace_groups;

no rows selected

创建临时表空间组:

sql> create temporary tablespace temp1_1tempfile '+DATA/ORCL/DATAFILE/temp1_1.dbf' size 10m tablespace grouptemp_group1;

Tablespace created.

sql>create temporary tablespace temp1_2 tempfile'+DATA/ORCL/DATAFILE/temp1_2.dbf' size 10m tablespace group temp_group1;

Tablespace created.

查看:

sql> select * from dba_tablespace_groups;

GROUP_NAME TABLESPACE_NAME

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

TEMP_GROUP1 TEMP1_1

TEMP_GROUP1 TEMP1_2

移动临时表空间

sql> alter tablespace temp_zou tablespace group temp_group1;

Tablespace altered.

sql> select * fromdba_tablespace_groups;

GROUP_NAME TABLESPACE_NAME

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

TEMP_GROUP1 TEMP_ZOU

TEMP_GROUP1 TEMP1_1

TEMP_GROUP1 TEMP1_2

修改TOAD用户的默认临时表空间改为临时表空间组

sql> alter user toad temporarytablespace temp_group1;

User altered.

查看如下:

sql> select temporary_tablespace fromdba_users where username='TOAD';

TEMPORARY_TABLESPACE

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

TEMP_GROUP1

然后使用多个TOAD用户登录进行试验:

每个SESSION都执行如下:

sql> select a.table_name,b.table_name from all_tablesa,all_tables b order by a.table_name;

不同的SESSION都自动分配到了不同的临时表空间。

查看:

Select username,session_num,tablespace fromv$sort_usage;

可以具体尝试。

临时表空间组可以设置多个。

数据库在运行时自动从临时表空间组中选择各个临时表空间。在SESSION层面进行IO均衡负载,极大地提升了数据库性能

猜你在找的Oracle相关文章