Tablespace

Tablespace нь файлуудыг бүлэглэн хадгалах зориулалт бүхий баазын мэдээллийг агуулах хийсвэр (Logical) нэгж юм. Бид датафайлуудыг дискний хаана байгааг харж болох хэдий ч tablespace -ийг харж чадахгүй.

Дараах хоёр төрлийн tablespace байна

Товчхондоо bigfile tablespace нь цорын ганц том хэмжээний датафайлыг агуулж буй tablespace юм. Харин эсрэгээрээ smallfile tablespace нь нэг болон түүнээс их датафайл агуулах боломжтой.

Олон tablespace ашигласнаар дараах давуу талууд боломжтой болно.

  • Дата файлуудыг өөр өөр диск дээр байрлуулснаар нэг дискинд ногдох уншилтыг багасгах боломжтой. (i/o)
  • Хэрэв tablespace -ийг offline горим шилжүүлэх шаардлага гарвал зөвхөн тухайн tablespace-д хамааралтай зүйлсэд нөлөөлнө.
  • Баазын мэдээллийг хуваарилан байршуулснаар мөн i/o уншилтыг багасгана.
  • Их шинэчилэгддэг, зөвхөн унших горимд ажилладаг, түр зуурын хүснэгтүүнийг хуваарилалт хийх боломж олгоно
  • Tablespace тус бүрээр нөөцлөх боломжтой.

Хэрэглэгчдийн баазын мэдээллийг аль хэрэглэгч хаана хадгалахыг мөн хуваарилан өгч болно.

Бүх баазын хувьд үндсэн tablespace нь data dictionary, system rollback segment зэрэг баазтай холбоотой мэдээллүүдийг хадгалж байдаг SYSTEM tablespace байдаг бөгөөд баазыг үүсгэхэд хамгийн эхэнд үүсдэг tablespace юм. Үүнээс гадна SYSAUX tablespace гэж байх бөгөөд товчхондоо бол энэ нь SYSTEM tablespace-ийн өргөтгөл гэж ойлгож болно. SYSTEM tablespace-ийн ачааллыг багасгах зорилготой бөгөөд уг tablespace-ийн нэрийг солих буюу устгаж болохгүй. Үүнээс харахад бид tablespace үүсгэхэд түүнтэй холбоотой мэдээллүүд SYSTEM tablespace-д хадгалагдаж байдаг гэсэн үг юм.

Дараах төрлийн tablespace-үүд байна.

  • Locally Managed Tablespaces
  • Bigfile Tablespaces
  • Compressed Tablespaces
  • Encrypted Tablespaces
  • Temporary Tablespaces
  • Multi Temporary Tablespaces (Tablespace Groups)

Locally Managed Tablespaces


Oracle8i -с өмнөх хувилбаруудад Dictionary Managed Tablespaces ашигладаг байсан. Энэ нь тухайн tablespace-тэй холбоотой segment болон бусад хамааралтай мэдээллийг system dictionary-д хадгалах бөгөөд SYSTEM tablespace-ийн хэмжээ төдий хэрээр их байна гэсэн үг юм. 10g хувилбараас хойш deprecated (хасагдсан) болсон бөгөөд зөвхөн хуучин хувилбаруудыг дэмжих зорилгоор хэрэглэгдэж байгаа болно.

Locally Managed Tablespace нь тухайн tablespace-ийн хамгийн эхний extent-ийн хамгийн эхний блок нь extent map буюу тухайн tablespace-ийн бүтцийн мэдээллийг хадгалж байдаг. Жишээ нь та дискээ NTFS-р форматлалаа гэж бодоход эхний хэдэн секторт тухайн дискийн бүтцийн мэдээлэл хадгалагддагтай ижил юм. Extent мета мэдээлэл tablespace-т хадгалагдах бөгөөд тухайн мэдээллүүд цаашлаад SYSTEM tablespace-д хадгалагддаг гэсэн үг юм.

Tablespace хэрхэн үүсгэх вэ:

AUTOALLOCATE тохиргоо нь Oracle database тухайн extent-ийн хэмжээг зохицуулж удирдана. Энэ нь хамгийн зөв сонголт юм.

CREATE TABLESPACE oracloud DATAFILE '/u01/oracle/oradata/ORCL/oracloud01.dbf' SIZE 50M
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

Хэрэв extent хэмжээг оноож өгөх бол UNIFORM ашиглах бөгөөд хэмжээ оноогдоогүй бол автоматаар 1МБ утгыг онооно. Дараах жишээнд 128К хэмжээтэй extent үүд ашиглагдахаар тохируулсан байна.

CREATE TABLESPACE oracloud DATAFILE '/u01/oracle/oradata/ORCL/oracloud01.dbf' SIZE 50M
    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

2КБ хэмжээ блок бүхий баазад extent бүх 64 баазын блокыг агуулж байдаг.

Specifying Segment Space Management in Locally Managed Tablespaces


Locally Managed Tablespace-т сегментийг Automatic эсвэл Manual тохиргоогоор удирддаг. Manual нь сегментийн сул зайг зохицуулахын тулд FREELIST гэх зүйл ашигладаг бол Automatic тохиргоо нь bitmap ашигладаг. Автоматаар тохируулах нь илүү сайн бөгөөд self-tuning хийгдэж байдаг. Дараах коммандаар идэвхжүүлнэ.

CREATE TABLESPACE oracloud DATAFILE '/u01/oracle/oradata/oracloud01.dbf' SIZE 50M
    EXTENT MANAGEMENT LOCAL 
    SEGMENT SPACE MANAGEMENT AUTO;

Аль тохиргоо ашиглахыг зааж өгөөгүй бол автомат тохиргоог авна.

Bigfile Tablespace


Нэг Tablespace нэг том файл агуулсан Tablespace юм. Дараах коммандаар үүсгэнэ.

CREATE BIGFILE TABLESPACE bigtbs 
    DATAFILE '/u01/oracle/data/bigtbs01.dbf' SIZE 50G;

Bigfile tablespace-ийн талаар энд дарж дэлгэрэнгүй танилцана уу.

Compressed Tablespaces


Tablespaces-т үүсч буй хүснэгтүүд шахаж хадгалагдаж байдаг. DEFAULT түлхүүр үгийг ашиглан ямар төрлөөр шахаж хадгалахыг оноож өгч болно. Дараах жишээг харна уу…

CREATE TABLESPACE oracloud DATAFILE '/u01/oracle/oradata/oracloud01.dbf' 
    DEFAULT COMPRESS FOR OLTP ... ;

Encrypted Tablespaces


Нууц мэдээллүүдийг мөн шифрлэн хадгалж болно. Уг үйлдлийг application мэдэхгүй учраас application талд ямар ч өөрчлөлт хийх шаардлагагүй. Баазыг нөөцлөх, датафайлыг хуулж авах зэрэг үйлдлүүд хийгдэхэд шифрлэсэн мэдээлэл хэвээр үлдэх бөгөөд уг мэдээллийг тайлж уншихын тулд нууц үг эсвэл түлхүүр код хэрэгтэй болно. Tablespace -ийг шифрлэх үед бүх блокууд шифрлэгдэнэ. Segment төрлийн table,cluster, indexes, LOBs, index parition бүгд шифрлэлтийг дэмжинэ.
Шифрлэгдсэн tablespace дотор LOB шифрлэлтийг ашиглах шаардлагагүй. Шифрлэгдсэн tablespace-с мэдээлэл дуудахад харгалзах undo tablespace, redo log, temporary tablespace дэх мэдээллүүд автоматаар шифрлэгдэх тул эдгээрийг тусад нь үүсгэх шаардлагагүй.

Шифрлэлтийг ашиглахын тулд Oracle wallet үүсгэх шаардлагатай бөгөөд шифрлэх tablespace үүсгэхийн өмнө wallet нээлттэй байх шаардлагатай.
Түүнчлэн 11.1.0 болон түүнээс хойшхи хувилбаруудад баазыг COMPATIBLE идэвхжүүлж нээх бөгөөд Oracle 11g Realse 2 -с эхэлэн бааз асахдаа уг тохиргоог идэвхжүүлэн нээдэг болсон.
Ямар ч хэрэглэгч шифрлэсэн tablespace үүсгэх боломжтой.

Жишээ:

CREATE TABLESPACE securespace
DATAFILE '/u01/app/oracle/oradata/orcl/secure01.dbf' SIZE 100M
ENCRYPTION
DEFAULT STORAGE(ENCRYPT);

Алгоритмыг заан өгч үүсгэх:

CREATE TABLESPACE securespace
DATAFILE '/u01/app/oracle/oradata/orcl/secure01.dbf' SIZE 100M
ENCRYPTION USING 'AES256'
DEFAULT STORAGE(ENCRYPT);

Шифрлэсэн tablespace ашиглаж байгаа тохиолдолд дараах зүйлсийг анхаарах.

  • ALTER TABLESPACE, CREATE TABLE AS SELECT , ALTER TABLE MOVE зэрэг үйлдлүүд боломжгүй
  • Recover шаардлагайт үед баазыг нээхээс өмнө wallet -ийг нээх хэрэгтэй. Ингэснээр redo log -д буй шифрийг тайлан ажиллах боломжтой болно.

Дараах коммандаар шифрлэлтийн талаарх мэдээллийг харах боломжтой.

SELECT t.name, e.encryptionalg algorithm 
FROM  v$tablespace t, v$encrypted_tablespaces e
WHERE t.ts# = e.ts#;
 
NAME                           ALGORITHM 
------------------------------ --------- 
SECURESPACE                    AES256  

Мөн DBA_TABLESPACES, USER_TABLESPACES -т ENCRYPTED баганыг харж болно.

Temporary Tablespaces


Temporary Tablespaces нь тухайн холболтуудад хамаарагдах түр зуурын мэдээллүүдийг агуулж байдаг. Их хэмжээний мэдээллийг жагсаах үйлдэлд ялангуяа хэрэглэгдэх бөгөөд уг үйлдэл хийж буй холболтуудад зориулсан swap space гэж ойлгож болно.
Дараах төрлийн мэдээллүүдийг хадгална.

  • Жагсаалтын үр дүн
  • Temporary tables
  • Temporary Index
  • Temporary LOBs
  • Temporary B-trees

Анх баазыг үүсэхэд TEMP нэртэй цорын ганц tablespace үүсдэг бөгөөд та нэмж үүсгэх боломжтой.

Үндсэн temporary tablespace-г харах

SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE
   PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';

PROPERTY_NAME              PROPERTY_VALUE
-------------------------- ------------------------------
DEFAULT_TEMP_TABLESPACE    TEMP

Үндсэн Temporary Tablespace-г дараах коммандаар өөрчлөх боломжтой.

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name;

Хэрэглээтэй холбоотой мэдээллүүдийг дараах table болон view-үүдээс харах боломжтой.

  • V$TEMPFILE
  • DBA_TEMP_FILES
  • V$SORT_SEGMENT
  • V$TEMPSEG_USAGE
  • DBA_TEMP_FREE_SPACE

Үүсгэхдээ дараах жишээг ашиглана.

CREATE TEMPORARY TABLESPACE oracloud TEMPFILE '/u01/oracle/oradata/oracloud01.dbf' 
     SIZE 20M REUSE
     EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;

Bigfile Temporary Tablespace үүсгэхдээ CREATE BIGFILE TEMPORARY TABLESPACE … коммандыг ашиглана.

Ашиглалтыг харах комманд.

SELECT * from DBA_TEMP_FREE_SPACE;
 
TABLESPACE_NAME                     TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
----------------------------------- --------------- --------------- ----------
TEMP                                250609664       250609664       249561088

Multiple Temporary Tablespaces: Tablespace Group

Tablespace үүдийг груплэж болох ба груп нь багадаа нэг tablespace агуулна.

Жишээ:

CREATE TEMPORARY TABLESPACE oracloud2 TEMPFILE '/u01/oracle/oradata/oracloud201.dbf'
     SIZE 50M
     TABLESPACE GROUP group1;

-- груп солих
ALTER TABLESPACE oracloud2 TABLESPACE GROUP group2;

CREATE TEMPORARY TABLESPACE oracloud3  TEMPFILE '/u01/oracle/oradata/oracloud301.dbf'
     SIZE 25M
     TABLESPACE GROUP group1;

-- групээс хасах
ALTER TABLESPACE oracloud3 TABLESPACE GROUP '';

-- үндсэн групыг зааж өгөх
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE group2;

Tablespace-т стандарт бус блок хэмжээ өгөх

Tablespace үүсгэхэд үндсэн тохиргоон нь DB_BLOCK_SIZE хэмжээг авч блок үүсгэх бөгөөд өөр хэмжээ бүхий блоктой tablespace үүсгэх болно. Мөн DB_BLOCK_SIZE болон багадаа нэг DB_nK_CACHE_SIZE параметрийг тохируулсан байх шаардлагатай.

Жишээ:

CREATE TABLESPACE oracloud DATAFILE '/u01/oracle/oradata/oracloud01.dbf' SIZE 50M
    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K
    BLOCKSIZE 8K;

Dictionary Managed Tablespace vs Locally Managed Tablespace


Oracle8i хувилбараас эхэлэн Oracle extent management аргачлалыг танилцуулжээ. Энэ аргын нэр нь Locally Managed Tablespace юм. Тиймээс tablespace үүсгэхдээ Dictionary юу Local уу гэдгийг админууд бодох шаардлагатай болсон байна.

Dictionary Managed Tablespaces


DICTIONARY төрлийн tablespace нь extent -ийн удирдлагад дараах dictionary table-үүд ашиглагдана.

  • sys.fet$ : segment ийн хэсэг болох extent бүрийн мэдээллийг нэг мөр болгож sys.fet$-д хадгална
  • sys.uet$ : Ашиглагдсан extent-үүдийн мэдээллүүдийг хадгална

Oracle дээрх хүснэгтүүдийг extent хуваарилагдах, дахин ашиглагдах боломжтой болж сулрах бүрт шинэчилж байдаг.

Oracle8i дээр DICTIONARY төрөл үндсэн байдаг байсан бол Oracle9i-с эхэлэн LOCAL төрөл нь үндсэн болж өөрчлөгджээ.

LMT <==> DMT хөрвүүлэх


Хооронд хөрвүүлэхийн тулд dbms_space_admin багцыг ашиглана.

SQL> exec dbms_space_admin.Tablespace_Migrate_TO_Local('ts1');
PL/SQL procedure successfully completed.

SQL> exec dbms_space_admin.Tablespace_Migrate_FROM_Local('ts2');
PL/SQL procedure successfully completed.