Thứ Hai, 22 tháng 6, 2020

HỌC ORACLE DB TỪ A-Z - BÀI 9: QUẢN TRỊ TABLESPACES VÀ DATA FILES

9.1. CẤU TRÚC CỦA DATABASE

Cấu trúc database bao gồm cấu trúc logic và cấu trúc vật lý.
Cấu trúc vật lý bao gồm tập hợp các control files, online redo log files và các data files. Cấu trúc logic bao gồm các schema objects tablespaces, segments, extents và data blocks.


Hình vẽ 1.    Cấu trúc database



9.1.1.  Quan hệ giữa database với các tablespaces và data files

Về mặt logic, một database có thể phân nhỏ thành nhiều phần gọi là các tablespaces.

Tablespace
§  Một tablespace chỉ thuộc một database.
§  Mỗi tablespace có thể chứa một hay nhiều data file thuộc hệ điều hành.
§  Tablespaces có thể đặt ở trạng thái online hay offline trong lúc database đang chạy.
§  Ngoại trừ tablespace SYSTEM hay tablespace chứa rollback segments đang có trạng thái ACTIVE, các tablespaces đều có thể chuyển về trạng thái offline trong lúc database đang chạy.
§  Các tablespaces cũng có thể chuyển đổi trạng thái read-write hay read-only.

Sử dụng tablespace
§  Để điều khiển vùng không gian cấp phát và gán cho mỗi users
§  Với việc đặt chế độ online hay offline cho các tablespace, ta có thể thay đổi tính sẵn dùng (availability) của các dữ liệu trong các tablespace
§  Ta cũng có thể phân biệt các dữ liệu lưu trữ giữa các thiết bị để tăng hiệu suất sử dụng database.
§  Thực hiện sao lưu và phục hồi dữ liệu từng phần, nâng cao hiệu suất hệ thống
Hình vẽ 2.    Quan hệ giữa tablespace và datafile

Data files
Mỗi một tablespace có thể bao gồm một hay nhiều data files, là các file thuộc hệ điều hành dùng để lưu trữ dữ liệu trong tablespace. Các data files có một số tính chất chính sau:
§  Một data file chỉ thuộc về một tablespace.
§  Quản trị viên database có thể thay đổi kích thước của data file ngay cả khi nó đã được tạo lập, làm tăng tính năng động cho các đối tượng có trong tablespace.

9.1.2.  Quan hệ giữa segment với các extent và các blocks

Oracle cho phép điều chỉnh không gian đĩa thông qua việc thay đổi kích thước của các cấu trúc lưu trữ logic như: tablespaces, segments, extents và blocks.

Setgments
Một segment là vùng không gian cấp phát tương ứng với một kiểu cấu trúc logic có trong một tablespace. Ta có thể phân ra làm một số loại segment chính sau:
§  Data segments
§  Index segments
§  Temporary segments
§  Rollback segments
Một segment cụ thể là một data segment có thể được trải rộng trên nhiều datafiles thuộc một tablespace.

Extents
Extent là một cấp độ phân chia về mặt logic tiếp theo của databse. Một extent là tập hợp liên tiếp các blocks dữ liệu. Mỗi kiểu segment được quy đinh bao gồm một hay nhiều extents. Khác với segments, một extent chỉ được nằm duy nhất trên một data file.
Data Blocks
Đây là đơn vị lưu trữ (lưu ý không phải là đơn vị quản lý) dữ liệu nhỏ nhất trong database Oracle. Một block dữ liệu sẽ tương ứng với một hay nhiều blocks của hệ điều hành. (Ví dụ: hệ điều hành Windows 32, 1 block hệ điều hành = 32 kbytes = 32*1024 bytes). Kích thước của block dữ liệu được xác định bởi tham số khởi tạo DB_BLOCK_SIZE ngay khi database được tạo. Block trong database cũng là đơn vị vào ra nhỏ nhất.

9.2.PHÂN LOẠI  CÁC TABLESPACES

9.2.1.  Tablespace SYSTEM và non-SYSTEM

Một database gồm có ít nhất một tablespace là tablespace SYSTEM, là nơi lưu trữ các thông tin của hệ thống. Ngoài ra, database còn có thể thêm vào các tablespace khác, đó là các non-SYSTEM tablespaces, chứa dữ liệu của các user.

Tablespace SYSTEM
§  Có trong tất cả các database
§  Chứa thông tin về các data dictionary views, các định nghĩa của stored procedures, packages, và các database triggers dưới dạng PL/SQL program units.
§  Chứa SYSTEM rollback segment
§  Không nên chứa dữ liệu người dùng trong tablespace này mặc dù có thể.
Hình vẽ 3.    Dữ liệu người dùng nên đặt trong tablespace riêng

Non-SYSTEM Tablespace
§  Chứa các rollback segments
§  Chứa các temporary segments
§  Chứa các data segments
§  Chứa các index segments

9.2.2.  Tablespaces read-only / read-write

Tablespaces read-only
Mục đích chính của việc sử dụng các tablespaces read-only (chỉ đọc) là hạn chế các thủ tục cần thiết khi thực hiện sao lưu và phục hồi một phần lớn dữ liệu không bị thay đổi (static) của database. Oracle không thực hiện cập nhật các files nằm trong tablespace read-only, vì thế các files có thể được đặt trong thiết bị chỉ đọc như CD ROMs hay ổ đĩa WORM drives (Write Once-Read Many).
Mỗi khi tạo mới một tablespace, hệ thống sẽ tạo cho ta một tablespace có đủ cả quyền đọc và quyền ghi. Ta có thể thay đổi lại thuộc tính tablespace thành read-only thông qua mệnh đề READ ONLY trong câu lệnh ALTER TABLESPACE. Việc này sẽ dẫn tới tất cả các datafiles thuộc tablespace đó sẽ được đặt lại thuộc tính là read-only.
Câu lệnh ALTER TABLESPACE ... READ ONLY sẽ đặt tablespace vào chế độ chuyển tiếp (transitional read-only) và chờ cho tất cả các transactions trên đó kết thúc (commit hoặc roll back). Chế độ chuyển tiếp này sẽ không cho phép bất kỳ một thao tác ghi mới nào được thực hiện trên tablespace ngoại trừ việc rollback các transactions hiện thời và thay đổi dữ liệu trong các blocks trong tablespace. Do đó, chế độ chuyển tiếp của tablespace cũng hệt như tablespace read-only đối với các câu lệnh mới của người dùng ngoại trừ lệnh ROLLBACK. Sau khi tất cả các transactions hiện thời đã kết thúc thì câu lệnh ALTER TABLESPACE ... READ ONLY mới được xem là kết thúc và tablespace được đặt ở chế độ read-only.
Đặt chế độ read-only cho tablespace không làm ảnh hưởng tới trạng thái offline hay online của tablespace đó. Các Offline datafiles vẫn không thể truy xuất được. Việc đưa một datafile trong tablespace read-only vào chế độ online sẽ cho phép user có thể đọc dữ liệu trong file đó. File này vẫn không thể viết dữ liệu vào trừ phi tablespace tương ứng được đặt lại ở chế độ cho phép đọc và ghi.
Read-only tablespaces không thể bị sửa đổi. Để cập nhật dữ liệu trong một read-only tablespace, trước tiên ta cần đặt lại chế độ cho tablespace là read-write. Sau đó, thực hiện cập nhật dữ liệu trong tablespace rồi đặt lại chế độ read-only cho tablespace đó.
Do các read-only tablespaces không bị sửa đổi nên ta cũng không cần thiết phải thực hiện việc backup dữ liệu trên nó nhiều lần. Và ta cũng không cần thiết phải phục hồi lại các read-only tablespaces, do dữ liệu trong đó không bị thay đổi.
Ta không thể bổ sung các datafiles vào tablespace read-only, ngay cả khi đã đặt chế độ cho tablespace là offline. Bởi vì, khi bổ sung một datafile, Oracle sẽ phải cập nhật phần thông tin header trong khi đó thao tác ghi lên tablespace này là không được phép.

Tablespace read-write
Trái với tablespace read-only, với các tablespace read-wirte, ta có thể thực hiện các thao tác đọc và ghi trên đó.
Ta cũng có thể sử dụng mệnh đề READ WRITE trong câu lệnh ALTER TABLESPACE để thay đổi trạng thái tablespace read-only thành trạng thái read-write.

9.2.3.  Temporary tablespace / permanent tablespace

Temporary tablespaces được sử dụng để dành riêng cho các thao tác sắp xếp dữ liệu. Trong temporary tablespace không có bất cứ segments dữ liệu nào nằm trong đó.
Sort segments có thể cùng được chia sẻ sử dụng khi nhiều thao tác sắp xếp cùng được thực hiện. Một sort segment được sử dụng cho tất cả các instance có thực hiện thao tác sắp xếp trên một tablespace.
Việc sử dụng các temporary tablespaces cho phép nâng cao hiệu suất thực hiện mỗi khi có nhiều thao tác sắp xếp được thực hiện trên một vùng nhớ lớn và không phù hợp với kích thước của bộ nhớ trong của máy tính. Sort segment thuộc temporary tablespace được tạo ra vào ngay thời điểm đầu của thao tác sắp xếp. Sort segment sẽ được cấp thêm vùng nhớ và mở rộng dần cho tới khi kích thước của segment ngang bằng hoặc lớn hơn tổng số kích thước lưu trữ cần thiết cho việc thực hiện tất cả các thao tác sắp xếp của instance.
Các tablespaces không phải là temporary tablespaces được gọi là các permanent tablespaces. Các permanent tablespace được sử dụng để lưu trữ dữ liệu trong database.

9.3.QUẢN LÝ KHÔNG GIAN TRONG TABLESPACES

Tablespaces cấp phát vùng không gian theo các extents. Tablespaces sử dụng hai phương pháp khác nhau để cấp phát và giải phóng vùng không gian lưu giữ:
§  Quản lý các extents qua data dictionary (dictionary-managed tablespaces)
§  Quản lý các extents qua tablespace (locally-managed tablespaces)
Ngay khi tạo tablespace, ta cần lựa chọn luôn phương pháp quản lý vùng không gian sẽ được áp dụng cho tablespace đó. Khi đã chọn rồi, ta không thể thay đổi phương pháp quản lý không gian nữa.

9.3.1.  Dictionary-Managed Tablespaces

Trong phương pháp này tablespace sử dụng data dictionary để quản lý các extents của nó. Oracle cập nhật từng tables trong data dictionary mỗi khi cấp phát, giải phóng hay sử dụng lại một extent. Oracle cũng lưu lại các thông tin rollback của việc cập nhật các dictionary tables. 
Theo mặc định, phương pháp quản lý này sẽ được áp dụng cho các tablespaces có trong database. Trong các phiên bản Oracle 8.0 hoặc sớm hơn, chỉ có một phương pháp đó chính là phương pháp này.

9.3.2.  Locally-Managed Tablespaces

Bên cạnh đó, tablespace cũng có thể quản lý các extents của nó thông qua một bitmap (ánh xạ bit) trong từng datafile từ đó xác định được trạng thái của các blocks trong datafile là đang sử dụng hay đã được giải phóng. Mỗi một bit trong bitmap sẽ tương ứng với một block hay một nhóm các blocks. Mỗi khi có một extent được cấp phát, giải phóng hay tái sử dụng, Oracle sẽ thay đổi giá trị của bitmap theo đúng như trạng thái mới của các blocks. Việc thay đổi này sẽ không làm phát sinh các thông tin trong rollback do không có thao tác cập nhật dữ liệu nào trong các tables của data dictionary (Ngoại trừ trường hợp đặc biệt liên quan đến các thông tin hạn mức (quota) của tablespace).
Locally-managed tablespaces có một số ưu điểm hơn so với dictionary-managed tablespaces là:
§  Quản lý cục bộ các extents tránh các thao tác quản lý không gian theo kiểu đệ quy. Việc này có thể xảy ra khi sử dụng phương pháp dictionary-managed tablespaces nếu việc sử dụng hay giải phóng không gian là kết quả của các thao tác sử dụng hay giải phóng không gian trong rollback segment hay data dictionary table.
§  Quản lý cục bộ các extents một cách tự động các vùng không gian giải phóng liền kề với nhau. Điều này là cần thiết khi thực hiện công việc hợp nhất các extents rỗi.
Kích thước của các extents được quản lý cục bộ có thể được xác định tự động bởi hệ thống. Mặt khác, tất cả các extents có thể có cùng một kích cỡ như nhau trong phương pháp locally-managed tablespace.
Mệnh đề LOCAL trong phần EXTENT MANAGEMENT của câu lệnh CREATE TABLESPACE sẽ chỉ rõ phương thức quản lý không gian:
§  Với các permanent tablespaces và temporary tablespaces, ta có thể sử dụng mệnh đề EXTENT MANAGEMENT LOCAL.
§  Trong phiên bản 8i, phương pháp quản lý này vẫn chưa được áp dụng cho tablespace SYSTEM. Nếu áp dụng, hệ thống sẽ  phát sinh lỗi 809225.

9.4.THIẾT LẬP TRẠNG THÁI CHO TABLESPACES

Quản trị viên database có thể thiết lập trạng thái cho các tablespaces là online (có thể sử dụng) hay offline (không thể sử dụng) ngoại trừ tablespace SYSTEM mỗi khi mở database. Tablespace SYSTEM luôn ở trạng thái online mỗi khi database được mở bởi vì Oracle luôn phải sử dụng các dữ liệu trong dictionary.
Một tablespace thông thường ở chế độ online khi đó, các dữ liệu trong nó là sẵn sàng đối với các database users. Tuy nhiên, quản trị viên database có thể đặt chế độ offline cho tablespace:
§  Khi này một phần của database sẽ không thể truy xuất được, trong khi phần còn lại vẫn có thể truy xuất bình thường.
§  Thực hiện offline tablespace khi backup dữ liệu (mặc dù ta vẫn có thể backup dữ liệu ngay khi database đang chạy và các tablespace ở trạng thái online).
Lưu ý: ta không thể đặt chế độ offline cho tablespace nếu nó có chứa các rollback segments đang được sử dụng.

Đặt Offline cho tablespace
Khi một tablespace được đưa ra offline, Oracle sẽ không cho phép thực hiện các câu lệnh SQL có tham chiếu tới các objects lưu trữ trong tablespace này. Oracle lưu lại các dữ liệu rollback tương ứng khi thực hiện câu lệnh SQL trong một rollback segment khác có trong tablespace SYSTEM thay vì là rollback segment có trong tablespace được offline nếu có. Tablespace được đưa về online trở lại, Oracle sẽ áp lại các dữ liệu rollback đang có trong tablespace SYSTEM vào tablespace đó.
Ta chỉ có thể đưa một tablespace thành online trong chính database mà nó được tạo, không thể đặt online cho tabalespace trong một database khác được. Việc này được giám sát bởi các thông tin có trong dictionary.
Oracle tự động thực hiện chuyển chế độ từ online thành offline đối với tablespaces mỗi khi xảy ra sự cố hệ thống. Ví dụ như: tiến trình DBWgặp lỗi.

9.5.TRAO ĐỔI CÁC TABLESPACES GIỮA DATABASES

Ta có thể sử dụng chức năng transportable tablespaces để dịch chuyển một phần của một database sang một database Oracle khác. Việc trao đổi các tablespaces giữa các database là rất hữu ích cho:
§  Việc dịch chuyể dữ liệu từ hệ thống xử lý trực tuyến (OLTP – online transaction processing systems) sang thành dữ liệu của hệ thống kho dữ liệu (data warehouse staging systems).
§  Cập nhật kho dữ liệu (data warehouses) và các dữ liệu thuộc hệ thống.
§  Nạp các dữ liệu từ các kho cơ sở dữ liệu trung tâm (central data warehouses).
§  Lưu trữ các dữ liệu của hệ thống OLTP and data warehouse systems efficiently.
§  Cung cấp dữ liệu cho các khách hàng hoặc người sử dụng nội bộ.

Dịch chuyển dữ liệu thông qua việc trao đổi các tablespaces cho phép di chuyển dữ liệu nhanh chóng và hiệu quả hơn các cách dịch chuyển dữ liệu khác như export/import hay unload/load đối với cùng một dữ liệu, Do việc trao đổi các tablespace chỉ đòi hỏi phải sao chép các datafiles rồi tích hợp thông tin về cấu trúc của tablespace vào database mới. Có thể sử dụng phương pháp trao đổi các tablespaces để dịch chuyển các index data, do đó, để tránh việc tái tạo lại (rebuilds) các index, ta có thể thực hiện công việc này để nạp dữ liệu trong các bảng.

9.5.1.  Một số hạn chế trong việc trao đổi các tablespace:

§  Database nguồn và đích phải được chạy trên cùng một nền phần cứng (hardware platform). Ví dụ, có thể trao đổi các tablespaces giữa database Oracle chạy trên hệ điều hành Sun Solari, hoặc trao đổi các tablespaces giữa các databases Oracle chạy trên hệ điều hành NT. Tuy vậy, ta không thể trao đổi các tablespace giữa database Oracle chay trên SUN Solaris với các database Oracle chạy trên NT.
§  Database nguồn và đích phải có cùng một kích thước của data block.
§  Database nguồn và đích phải sử dụng cùng một tập ký tự sử dụng trong database (national character set).
§  Không thể chuyển đổi tablespace sang database đích khi database này đã có một tablespace có cùng tên.
§  Việc chuyển đổi tablespaces không được hỗ trợ:
o   Snapshot/replication
o   Function-based indexes
o   Scoped REFs
o   Domain indexes (Một kiểu index mới, cho phép mở rộng việc đánh chỉ số)

9.5.2.  Các bước thực hiện chuyển đổi một tablespace giữa các database

  1. Chỉ có thể thực hiện trao đổi các tablespaces mà nó không chứa các tham chiếu tới tablespace khác.
  1. Tạo một transportable tablespace set.
Transportable tablespace set chứa các datafiles ứng với tập các tablespaces được sử dụng để chuyển đổi các file có chứa thông tin cấu trúc của các tablespaces dịch chuyển.
(Xem minh hoạ việc tạo một transportable tablespace set ở phia dưới).
  1. Chuyển đổi tablespace.
Sao chép các datafiles và export file sang database đích.  Có thể sử dụng các công cụ sao chép file thông thường của hệ điều hành để thực hiện công việc này
  1. Đưa tablespace vào sử dụng (plug-in).
Thực hiện công việc Import để đưa các tablespaces vào database đích.

Minh hoạ việc trao đổi tablespace
1. Để biết tablespace SALES_1 và SALES_2 có chứa các tham chiếu trong nó không, ta thực hiện câu lệnh:
     EXECUTE dbms_tts.transport_set_check('sales_1,sales_2', TRUE);
Câu lệnh này sinh ra kết quả và lưu trong view có tên là: TRANSPORT_SET_VIOLATIONS. Sử dụng câu lệnh truy vấn để xem kết quả:
SELECT * FROM transport_set_violations;
Lệnh truy vấn kết xuất kết quả rỗng cho biết tablespace không chứa các tham chiếu tới tablespace bên ngoài.

2. Tạo transportable tablespace set
Phát lệnh thay đổi trạng thái của tablespace về trạng thái read-only để không cho phép cập nhật dữ liệu vào tablespace này, chuẩn bị cho việc trao đổi tablespace.
ALTER TABLESPACE sales_1 READ ONLY;
Sử dụng công cụ tiện ích Export của Oracle để kết xuất các tablespace này:
EXP TRANSPORT_TABLESPACE=y TABLESPACES=(sales_1,sales_2)           TRIGGERS=y/n CONSTRAINTS=y/n GRANTS=y/n FILE=expdat.dmp
TRIGGERS=Y – cho phép kết xuất; N – không cho phép kết xuất.
GRANTS=Y – kết xuất cả các quyền trên mỗi bảng thuộc tablespace đó; N – không kết xuất.
CONSTRANTS=Y – các ràng buộc tham chiếu sẽ được kết xuất; N – không kết xuất các ràng buộc tham chiếu.
3. Thực hiện sao chép các datafile của tablespace vừa được kết xuất ra một vị trí khác.
4. Đặt lại trạng thái bình thường cho tablespace vừa được xem xét.
ALTER TABLESPACE sales_1 READ WRITE;
5. Đưa bản sao của các datafile vừa được sao chép vào vị trí tương ứng với database đích.
6. Connect vào database mới với mức quyền SYSDBA.
7. Đưa các tablespaces đã được kết xuất vào database mới
IMP      TRANSPORT_TABLESPACE=y DATAFILES=('c:\db\sales_jan','c:\db\sales_feb',...)
  TABLESPACES=(sales_1,sales_2) TTS_OWNERS=(dcranney,jfee)  
  FROMUSER=(dcranney,jfee) TOUSER=(smith,williams) FILE=expdat.dmp

9.6.TẠO TABLESPACE

9.6.1.  Lệnh tạo tablespace

Ta có thể sử dụng câu lênh SQL để tạo một tablespace.
Cú pháp:
CREATE TABLESPACE tablespace
DATAFILE filespec [autoextend_clause]
[, filespec [autoextend_clause]]...
[MINIMUM EXTENT integer[K|M]]
[DEFAULT storage_clause]
[PERMANENT|TEMPORARY]
[ONLINE|OFFLINE]

storage_clause:= =
STORAGE ( [INITIAL integer[K|M]]
[NEXT integer[K|M]]
[MINEXTENTS integer]
[MAXEXTENTS {integer|UNLIMITED}]
[PCTINCREASE integer]
)
Với:
tablespace      tên của tablespace được tạo
DATAFILE        tên data files của tablespace được tạo
DEFAULT STORAGE
tham số lưu trữ mặc định cho tất cả các đối tượng được tạo lập trong tablespace
MINIMUM EXTENT
kích thước tối thiểu của extent  được sử dụng
value
ONLINE          đặt chế độ sử dụng (Online) cho tablespace ngay từ khi tạo lập
OFFLINE         đặt chế độ chưa sử dụng (Offline) cho tablespace ngay từ khi tạo lập
PERMANENT       tablespace có thể sử dụng để lưu trữ các đối tượng thường trú
TEMPORARY       tablespace chỉ sử dụng để lưu trữ các đối tượng trung gian (temporary objects). Ví dụ: sử dụng để lưu trữ dữ liệu khi sắp xếp theo câu lệnh ORDER BY

Ví dụ:
CREATE TABLESPACE app_data
DATAFILE ‘/DISK4/app01.dbf’ SIZE 100M,
‘/DISK5/app02.dbf’ SIZE 100M
MINIMUM EXTENT 500K
DEFAULT STORAGE (INITIAL 500K NEXT 500K
MAXEXTENTS 500 PCTINCREASE 0);

Cũng tương tự, ta có thể thực hiện trong Oracle Enterprise Manager – OEM:
1.    Chạy Oracle Storage Manager.
2.    Chọn Tablespace—>Create.
3.    Trong General page của bảng thuộc tính, nhập vào tên tablespace rồi chọn ADD.
4.    Trong bảng thuộc tính Create Datafile, chỉ ra các data file.
5.    Trong phần Extents page, nhập vào các thông tin lưu giữ
6.     Chọn mục Create.

Hạn chế
Số lượng tối đa các tablespaces trên mỗi database là 64.
Số lượng tối đa các data files trong mỗi tablespace là 1023.

9.6.2.  Chế độ quản lý các tablespaces

Với câu lệnh tạo tablespace thông thường như ở trên, Oracle server sẽ tạo tablespace với chế độ quản lý là Dictionary-Managed Tablespaces
Để thực hiện quản lý tablespace theo phương pháp Locally-Managed Tablespaces ta cần đưa thêm vào câu lệnh mệnh đề: MANAGEMENT LOCAL AUTOLOCATE.
Ví dụ:
CREATE TABLESPACE lmtbsb                                   DATAFILE 'c:\data\lmtbsb01.dbf' SIZE 50M
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

9.6.3.  Tạo temporary tablespace

Quản trị viên database có thể tạo một temporary tablespace sử dụng cho việc sắp xếp các dữ liệu không dùng để lưu trữ thường trú các dữ liệu.
Để tạo temporary tablespace, ta có thể sử dụng lệnh SQL giống như lệnh tạo tablespace thông thường, nhưng có thêm từ khoá TEMPORARY ở cuối.
Ví dụ:
CREATE TABLESPACE sort
DATAFILE ‘/DISK2/sort01.dbf’ SIZE 50M
MINIMUM EXTENT 1M
DEFAULT STORAGE (INITIAL 2M NEXT 2M
MAXEXTENTS 500 PCTINCREASE 0)
TEMPORARY;
Với Oracle Enterprise Manager, ta làm theo các bước sau:
1.    Chạy Oracle Storage Manager.
2.    Chọn Tablespace—>Create.
3.    Trong General page, nhập vào tên tương ứng rồi chọn ADD để hiển thị mục Create Datafile.
4.    Trong Create Datafile chỉ ra từng data file cụ thể.
5.    Chọn TEMPORARY trong nhóm chọn radio button.
6.    Bấm nút Create.

9.6.4.  Các tham số lưu trữ

Lượng không gian dùng cho một tablespace được xác định trong mệnh đề lưu trữ (storage clause). Các tham số này được xác định ngay tại thời điểm tạo tablespace. Trong trường hợp không chỉ rõ các tham số này trong lệnh tạo lập (CREATE), các tham số sẽ được sử dụng các giá trị theo mặc định.
Có một số tham số lưu trữ cần quan tâm sau:
§  INITIAL quy định kích thước của extent đầu tiên. Kích thước nhỏ nhất của extent đầu tiên là 02 block =  (2*DB_BLOCK_SIZE). Mặc định, kích thước này là 5 blocks =  (5* DB_BLOCK_SIZE).
§  NEXT ứng với kích thước của extent thứ hai. Kích thước tối thiểu là 01 block. Mặc định, kích thước này là 5 blocks = (5* DB_BLOCK_SIZE).
§  MINEXTENTS số lượng extent được tạo lập mỗi khi segment được tạo lập. Mặc định giá trị này là 1.
§  PCTINCREASE phần trăm tăng kích thước extent. Kích thước của một extent được xác định theo kích thước:
Với:     Sizen   kích thước của extent thứ n
Ví dụ: NEXT = 200K, PCTINCREASE = 50. Ta tính được extent thứ hai = 200K, extent thư ba = 300K, extent thứ tư = 450K
§  MAXEXTENTS xác định số lượng tối đa các extents có trong một segment. Giá trị nhỏ nhất là 1. Giá trị lớn nhất theo mặc định phụ thuộc vào kích thước của block dữ liệu. Giá trị này cũng có thể được xác định thông qua giá trị UNLIMITED,  tương đương với  giá trị là 2147483645.
 

9.7.CÁC THAY ĐỔI ĐỐI VỚI TABLESPACE

9.7.1.  Chuyển đổi một tablespace thành một temporary tablespace

Ta có thể thay đổi các tablespaces đang tồn tại để biến nó thành một temporary tablespace.
Ví dụ:
ALTER TABLESPACE tbsa TEMPORARY;

9.7.2.  Thêm mới các tablespace

Để mở rộng không gian của tablespace ta có thể thực hiện theo hai cách sau:
§  Thêm mới các data file vào tablespace
§  Thay đổi dung lượng các data files
Hoặc ta cũng có thể sử dụng câu lệnh SQL can thiệp như sau:
ALTER TABLESPACE tablespace
ADD DATAFILE filespec [autoextend_clause]
[, filespec [autoextend_clause]]...

Với Oracle Enterprise Manager, ta làm theo các bước sau:
1.    Chạy Oracle Storage Manager.
2.    Chọn Tablespace—>Create.
3.    Trong General page, nhập vào tên tương ứng rồi chọn ADD để hiển thị mục Create Datafile.
4.    Trong Create Datafile chỉ ra từng data file cụ thể.

9.7.3.  Mở rộng data files

Ta có thể thực hiện mở rộng (thay đổi) kích thước data file theo hai cách:
§  Mở rộng theo chế độ tự động. Sử dụng từ khoá: AUTOEXTENTED
§  Mở rộng theo chế độ can thiệp trực tiếp (manually). Sử dụng lệnh ALTER TABLESPACE, ALTER DATABASE

Thiết lập chế độ AUTOEXTENT trong khi tạo file
Cú pháp:
ALTER TABLESPACE tablespace
ADD DATAFILE filespec [autoextend_clause]
[, filespec [autoextend_clause]]...
Ví dụ:
ALTER TABLESPACE app_data
ADD DATAFILE
‘/DISK6/app04.dbf’ SIZE 200M
AUTOEXTEND ON NEXT 10M
MAXSIZE 500M;
Trong OEM ta thực hiện các bước sau:
1.    Chạy Oracle Storage Manager.
2.    Chuyển tới nút Tablespace.
3.    ChọnTablespace—>Add Datafile.
4.    Trong General page nhập vào các thông tin của file.
5.    Trong Autoextend page nhập vào các thông tin tương ứng.
6.    Bấm nút Create.


Thiết lập chế độ AUTOEXTENT khi data file đã tồn tại
Cú pháp:
ALTER DATABASE [database]
DATAFILE 'filename'[, 'filename']...
autoextend_clause
Trong OEM ta thực hiện các bước sau:
1.    Chạy Oracle Storage Manager.
2.    Chuyển tới nút Tablespace node.
3.    Chọn data file.
4.    Trong phần Autoextend page, bấm vào nút Enable Auto Extend.
5.    Bấm nút Apply.

9.7.4.  Thay đổi kích thước data file

Thay vì mở rộng kích thước của database bằng cách thêm vào các data file, quản trị viên cũng có thể mở rộng bằng cách điều chỉnh tăng kích thước của data file.
Sử dụng câu lệnh SQL sau để thay đổi kích thước của data file
ALTER DATABASE [database]
DATAFILE 'filename'[, 'filename']...
RESIZE integer[K|M]
Với:
     integer         Kích thước tuyệt đối của file data file

Sử dụng câu lệnh SQL sau để thay đổi nơi lưu trữ mặc định:
ALTER TABLESPACE tablespace
{MINIMUM EXTENT integer[K|M]
|DEFAULT storage_clause
}
Ví dụ:
ALTER TABLESPACE app_data
MINIMUM EXTENT 2M;

ALTER TABLESPACE app_data
DEFAULT STORAGE
(INITIAL 2M NEXT 2M
MAXEXTENTS 999);


9.7.5.  Chuyển đổi chế độ ONLINE và OFFLINE

User chỉ có thể truy xuất vào tablespace nếu nó đang ở trạng thái online. Trong một vài trường hợp, quản trị viên database có thể thay đổi trạng thái database thành offline với mục đích:
§  Di chuyển các data files tới vị trí khác
§  Chỉ cho phép user truy xuất phần dữ liệu còn lại trong database.
Để chuyển đổi chế độ ONLINE và OFFLINE, ta có thể thực hiện câu lệnh SQL sau:
ALTER TABLESPACE tablespace
{ONLINE
|OFFLINE [NORMAL|TEMPORARY|IMMEDIATE]
}

Chế độ OFFLINE
Oracle server không cho phép thực hiện câu lệnh SQL đối với các đối tượng có trong tablespace đã được OFFLINE.
Oracle server thực hiện checkpoint đối với tất cả các data files thuộc tablespace trước khi chuyển sang chế độ OFFLINE.
Mỗi khi database được mở, quản trị viên database có thể chuyển chế độ offline cho tất cả các tablespace ngoại trừ SYSTEM và các tablespace tương ứng với các active rollback segments hay temporary segments.

Trong OEM ta có thể thực hiện theo các bước sau:
1.    Chạy Oracle Storage Manager.
2.    Chuyển tới nút Tablespace.
3.    Chọn tablespace tương ứng.
4.    Trong General page, đặt chế độ trong Offline radio button.
5.    Bấm nút Apply

9.7.6.  Di chuyển các data file

Tuỳ thuộc kiểu tablespace, ta có thể di chuyển các data files theo các phương thức khác nhau.

Lệnh ALTER TABLESPACE
Lệnh này chỉ áp dụng cho các tablespace không phải là SYSTEM tablespace, và không chứa rollback segments hay temporary segments.
Câu lệnh:
ALTER TABESPACE tablespace
RENAME DATAFILE 'filename'[, 'filename']...
TO 'filename'[, 'filename']...
Ví dụ:
ALTER TABLESPACE app_data RENAME
DATAFILE ‘/DISK4/app01.dbf’ TO
‘/DISK5/app01.dbf’;

Ta thực hiện theo các bước sau:
1.    Chuyển chế độ offline cho tablespace.
2.    Di chuyển các data files tương ứng bằng lệnh của hệ điều hành.
3.    Thực hiện lệnh ALTER TABLESPACE RENAME DATAFILE.
4.    Chuyển lại chế độ online cho tablespace đó.
5.     Sử dụng lệnh của hệ điều hành để xoá data file  cũ nếu cần thiết.
Lệnh ALTER DATABASE
Lệnh này chỉ áp dụng cho các tablespace không là SYSTEM và không chứa rollback segments hay temporary segments.
Câu lệnh:
ALTER DATABASE [database]
RENAME FILE 'filename'[, 'filename']...
TO 'filename'[, 'filename']...
 Ví dụ:
ALTER DATABASE RENAME FILE
‘/DISK1/system01.dbf’ TO
‘/DISK2/system01.dbf’;
Ta thực hiện theo các bước sau:
1.    Shutdown database.
2.    Di chuyển data files bằng lệnh của hệ điều hành.
3.    Mount lại database.
4.    Thực hiện lệnh ALTER DATABASE RENAME FILE.
5.    Mở lại database.

Trong OEM ta làm như sau
1.    Chạy Oracle Storage Manager.
2.    Chuyển tới nút Tablespace rồi chọn data file tương ứng.
3.    Trong phần General page, thay đổi lại các thông tin thích hợp.
4.     Bấm nút Apply.

9.7.7.  Tablespace chỉ đọc

Sử dụng lệnh SQL để thiết lập các chế độ này.
Cú pháp:
ALTER TABLESPACE tablespace
READ{ONLY|WRITE}
Ví dụ:
ALTER TABLESPACE app_data READ ONLY;

Trong OEM ta thực hiện theo các bước sau:
1.    Chạy Oracle Storage Manager.
2.    Chuyển tới nút Tablespace.
3.    Chọn tablespace.
4.    Chọn Tablespace—>Make Read Only.
5.     Bấm nút  OK.
Thiết lập chế độ chỉ đọc cho tablespace
Ta có thể thiết lập chế độ chỉ đọc cho tablespace khi nó đảm bảo một số điều kiện sau:
§  Tablespace phải đang online
§  Không có transaction nào xảy ra đối với tablespace đó
§  Tablespace không chứa các rollback segments
§  Hiện thời không có online backup trên tablespace

9.7.8.  Huỷ tablespace

Trong một vài trường hợp ta có thể huỷ tablespace khỏi database.
Việc này có thể thực hiện bởi câu lệnh SQL sau:
DROP TABLESPACE tablespace
[INCLUDING CONTENTS [CASCADE CONSTRAINTS]]
Với
tablespace      tên của tablespace được huỷ
INCLUDING CONTENTS   
huỷ luôn các segment có trong tablespace
CASCADE CONSTRAINTS  
Huỷ luôn cả các ràng buộc liên quan tới các bảng bên ngoài có tham chiếu duy nhất tới các bảng thuộc tablespace bị huỷ
Ví dụ:
DROP TABLESPACE app_data
INCLUDING CONTENTS;

Trong OEM ta thực hiện theo các bước sau
1.    Chạy Oracle Storage Manager.
2.    Chuyển tới nút Tablespace chọn tablespace tương ứng.
3.    Chọn Tablespace—>Remove.
4.     Bấm nút OK.

9.8.THÔNG TIN VỀ CÁC TABLESPACES

Một số views thông tin chung
Tên tham số
Diễn giải
DBA_TABLESPACES, USER TABLESPACES 
Diễn giải của các tablespaces. 
DBA_SEGMENTS, USER_SEGMENTS 
Thông tin về segment có trong các tablespaces. 
DBA_EXTENTS, USER_EXTENTS  
Thông tin về data extents có trong các tablespaces. 
DBA_FREE_SPACE, USER_FREE_SPACE  
Thông tin về free extents có trong các tablespaces. 
V$DATAFILE 
Thông tin về tất cả các datafiles, bao gồm cả số hiệu tablespace và user sở hữu tablespace. 
V$TEMPFILE 
Thông tin về các tempfiles, bao gồm cả số hiệu tablespace và user sở hữu tablespace. 
DBA_DATA_FILES 
Hiển thị các datafiles thuộc các tablespaces. 
DBA_TEMP_FILES 
Hiển thị các tempfiles thuộc các temporary tablespaces. 
V$TEMP_EXTENT_MAP 
Thông tin của các extents trong các locally managed temporary tablespaces.  
V$TEMP_EXTENT_POOL 
Thông tin của các locally managed temporary tablespaces bao gồm: trạng thái của temporary space cached (vùng không gian đệm trung gian) được sử dụng bởi mỗi instance. 
V$TEMP_SPACE_HEADER 
Hiển thị vùng không gian used/free của mỗi tempfile. 
DBA_USERS  
Các tablespaces mặc định và temporary tablespaces của các users. 
DBA_TS_QUOTAS 
Hạn mức sử dụng tablespace của các users.  
V$SORT SEGMENT 
Thông tin về sort segment đối với mỗi instance.
V$SORT_USER 
Vùng không gian sắp xếp trung gian được sử dụng bởi user và temporary/permanent tablespace. 

9.8.1.  Xem thông tin tablespace

Để xem thông tin về tablespace, ta có thể lấy trong data dictionary views. View DBA_TABLESPACES lưu trữ các thông tin này.
Một số thông tin quan tâm:
Tên tham số
Diễn giải
TABLESPACE_NAME
Tên tablespace
NEXT_EXTENT
Kích thước của các extent mở rộng tính theo bytes
MAX_EXTENTS
Số lượng tối đa các extents trong một segment
PCT_INCREASE
Phần trăm tăng trưởng kích thước của các extents
MIN_EXTENTS
Số lượng tối thiểu các extents trong một segment
STATUS
Trạng thái của tablespace là Online hay Offline
CONTENTS
Phân loại tablespace là permanent hay temporary
Ví dụ:
SVRMGR> SELECT tablespace_name, initial_extent, next_extent,
2 > max_extents, pct_increase, min_extlen
3 > FROM dba_tablespaces;

      TABLESPACE_NAME INITIAL_EX NEXT_EXT  MIN_EXTENT MAX_EXTENT PCT_I  MIN_EXTLEN
      --------------- ---------- --------  ---------- ---------- -----  ---------
      SYSTEM          1240       10240    1          121        50     0
      RBS             10240      10240    1          121        50     0
      TEMP            262144     262144   1          999        50     131072
      DATA01          204800     204800   1          999        50     51200
      4 rows selected.

SVRMGR> SELECT tablespace_name, contents,status
    2> FROM dba_tablespaces;

TABLESPACE_NAME   CONTENTS   STATUS
---------------   ---------  ------
SYSTEM           PERMANENT  ONLINE
RBS              PERMANENT  ONLINE
TEMP             TEMPORARY  ONLINE
DATA01           PERMANENT  ONLINE
4 rows selected.

9.8.2.  Xem thông tin data files

Để xem thông tin về data files, ta có thể lấy trong dictionary views. View DBA_DATA_FILES lưu trữ các thông tin này.
Một số thông tin quan tâm:
Tên tham số
Diễn giải
FILE_NAME
Tên file (có kèm đường dẫn) tương ứng với datafile
TABLESPACE_NAME
Tên của tablespace ứng với datafile đó
BYTES
Dung lượng tính theo bytes của tablespace hiện thời
AUTOEXTENSIBLE
Chế độ tự động mở rộng dung lượng của datafile
MAXBYTES
Dung lượng tối đa
INCREMENT_BY
Chỉ số tăng tự động trong hệ thống

Ví dụ:
SVRMGR> SELECT file_name, tablespace_name, bytes,
2> autoextensible, maxbytes, increment_by
3> FROM dba_data_files;

FILE_NAME           TABLESPACE_NAME BYTES    AUT  MAXBYTES  INCREMENT_BY
---------           --------------- --------  ---- --------  ----------
/DISK1/system01.dbf SYSTEM          31457280 NO   0        0
/DISK2/rbs01.dbf    RBS             5242880   NO   0        0
/DISK3/temp01.dbf   TEMP            5242880   NO   0        0
/DISK4/data01.dbf   DATA01          5242880   NO   0        0
/DISK5/data02.dbf   DATA01          512000   YES 15728640 512
5 rows selected.


*****
Hãy nhanh tay đăng ký khóa học "Quản trị cơ sở dữ liệu Oracle 12c cơ bản" trên Unica giành cho những bạn mới học cơ sở dữ liệu Oracle hoặc cần nâng cao kiến thức, kinh nghiệm thực tiễn trên Unica (giá gốc 900K, giá khi đăng ký HÔM NAY là 299K):

Bước 1: Truy cập Unica.vn, bấm ĐĂNG KÝ nếu chưa có tài khoản
Bước 2: Đăng nhập tài khoản học viên trên Unica.vn
Bước 4: Bấm KÍCH HOẠT NGAYđể thanh toán và bắt đầu vào học.
*****
@ Trần Văn Bình - Founder of Oracle DBA AZ
 #học oracle #oracle database #khóa học oracle online #khóa học oca #học oca ở đâu #oca là gì #oca oracle #BossData #OraAz #OracleDBAAz #OracleTutorial #Quản_trị_cơ_sở_dữ_liệu_Oracle #OracleDBA #OracleDatabaseAdministration

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master