19 апреля 2008 г.

Табличные пространства в Oracle 10g

В Oracle 10g появились следующие новые возможности по работе с табличными пространствами:

1) Возможность переименовать табличные пространства
2) Установка постоянного табличного пространства по умолчанию (default permanent tablespace)
3) Поддержка больших файлов (bigfile tablespaces)
4) Возможность переносить табличные пространства на другие платформы (cross platform transportable tablespaces)
5) Группы временных табличных пространств (temporary tablespace groups)
6) Передача файлов (DBMS_FILE_TRANSFER)

1) Возможность переименовать табличные пространства

SQL> select tablespace_name, count(*) from dba_segments where tablespace_name like 'USERS%' group by tablespace_name;

TABLESPACE_NAME COUNT(*)
------------------------------ ----------
USERS 43

SQL> alter tablespace users rename to users_new;

Tablespace altered

SQL> select tablespace_name, count(*) from dba_segments where tablespace_name like 'USERS%' group by tablespace_name;

TABLESPACE_NAME COUNT(*)
------------------------------ ----------
USERS_NEW 43


Правда, если вы не используете OMF, то файл данных не переименуется автоматически.

SQL> select tablespace_name, file_name from dba_data_files where tablespace_name like 'USERS%';

TABLESPACE_NAME FILE_NAME
------------------------------ --------------------------------------------------------------------------------
USERS D:\ORACLE\PRODUCT\ORADATA\TESTDB\USERS01.DBF

SQL> alter tablespace users rename to users_new;

Tablespace altered

SQL> select tablespace_name, file_name from dba_data_files where tablespace_name like 'USERS%';

TABLESPACE_NAME FILE_NAME
------------------------------ --------------------------------------------------------------------------------
USERS_NEW D:\ORACLE\PRODUCT\ORADATA\TESTDB\USERS01.DBF


Табличные пространства SYSTEM и SYSAUX нельзя переименовать таким образом.

SQL> alter tablespace sysaux rename to sysaux2;

alter tablespace sysaux rename to sysaux2

ORA-13502: Cannot rename SYSAUX tablespace

SQL> alter tablespace system rename to system2;

alter tablespace system rename to system2

ORA-00712: cannot rename system tablespace

При переименовании табличного пространства UNDO, ссылка на него в файле параметров тоже автоматически меняется после перегруза, если используется spfile.
Если экземпляр был старторван с pfile, но в alert.log выводится напоминание вручную обновить pfile.

SQL> show parameter pfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string D:\ORACLE\PRODUCT\10.2.0\DATAB
ASE\SPFILETESTDB.ORA
SQL>
SQL> show parameter undo

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL>
SQL> alter tablespace undotbs1 rename to undotbs_new;

Tablespace altered.

SQL>
SQL>
SQL> show parameter undo

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL>
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 612368384 bytes
Fixed Size 1292036 bytes
Variable Size 348129532 bytes
Database Buffers 255852544 bytes
Redo Buffers 7094272 bytes
Database mounted.
Database opened.
SQL>
SQL> show parameter undo

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS_NEW
SQL>


2) Установка постоянного табличного пространства по умолчанию (default permanent tablespace)

SQL> alter database default tablespace example;

Database altered

SQL> select property_name, property_value from database_properties where property_name like 'DEFAULT_PERMANENT_TABLESPACE%';

PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------------------------------------------------------------------
DEFAULT_PERMANENT_TABLESPACE EXAMPLE

SQL> create user rahat identified by agivetova;

User created

SQL> select username, default_tablespace from dba_users where username ='RAHAT';

USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
RAHAT EXAMPLE




3) Поддержка табличных пространств состоящих из большого файла (bigfile tablespaces)

Одним из основных новинок в работе с табличными пространствами в Oracle 10g являются поддержка больших файлов.
Табличные пространства bigfile состоят только из 1 файла данных, который может расти до 128TB в зависимости от размера блока.
Например, если размер блока табличного пространства 8К, то табличное пространство может расти до 32ТВ.
Внизу таблица с максимальными размерами табличных пространств в зависимости от размера блока:

Размер блока табличного пространства Максимальный размер табличного пространства
2K 8TB
4K 16TB
8K 32TB
16K 64TB
32K 128TB

В представление dba_tablespaces добавлено поле bigfile, которое указывает, является ли табличное пространство - bigfile tablespace.

SQL> select tablespace_name, bigfile from dba_tablespaces;

TABLESPACE_NAME BIGFILE
------------------------------ -------
SYSTEM NO
UNDOTBS_NEW NO
SYSAUX NO
TEMP NO
USERS NO
EXAMPLE NO

6 rows selected

SQL> create bigfile tablespace big_users datafile 'D:\ORACLE\PRODUCT\ORADATA\TESTDB\BIG_USERS01.DBF' size 10M autoextend on next 10M;

Tablespace created

SQL> select tablespace_name, bigfile from dba_tablespaces;

TABLESPACE_NAME BIGFILE
------------------------------ -------
SYSTEM NO
UNDOTBS_NEW NO
SYSAUX NO
TEMP NO
USERS NO
BIG_USERS YES
EXAMPLE NO

7 rows selected


На практике оказывается, что многие операционные системы не поддерживают настолько большие файлы, поэтому прежде тем,
как решить использовать bigfile табличные пространства, следует узнать поддерживает ли ОС большие файлы.
В противном случае можно оказаться в ситуации, что невозможно будет увеличить табличное пространство, так как
bigfile tablespace состоит только из одного файла данных и к нему невозможно добавить дополнительные файлы данных.


SQL> alter tablespace big_users add datafile 'D:\ORACLE\PRODUCT\ORADATA\TESTDB\BIG_USERS02.DBF' size 20M;

alter tablespace big_users add datafile 'D:\ORACLE\PRODUCT\ORADATA\TESTDB\BIG_USERS02.DBF' size 20M

ORA-32771: cannot add file to bigfile tablespace


По умолчанию, все табличные пространства создаются c smallfile, но эту настройку можно изменить следующей командой:


SQL> select property_name, property_value from database_properties where property_name like 'DEFAULT_TBS_TYPE';

PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------------------------------------------------------------------
DEFAULT_TBS_TYPE SMALLFILE

SQL> alter database set default bigfile tablespace;

Database altered

SQL> select property_name, property_value from database_properties where property_name like 'DEFAULT_TBS_TYPE';

PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------------------------------------------------------------------
DEFAULT_TBS_TYPE BIGFILE


Теперь, команда create tablespace будет создавать bigfile табличные пространства.

1 коммент.:

Sergey78 комментирует...

Рахат здравствуйте ! Можно командой alter изменить bigtbs в smalltbs ?