Mục lục

1. Giới thiệu

Tablespace được thiết kế để cho phép các PostgreSQL Database Cluster được trải rộng trên nhiều thiết bị lưu trữ.

Nếu bạn muốn tìm hiểu kỹ hơn về tablespace, xin mời đọc bài này trước:

Đọc thêm  Quản lý tablespace trong PostgreSQL

Giả sử tình huống: Tablespace của các bạn đang đặt tại 1 thư mục trên 1 đĩa, mà đĩa này sắp bị đầy rồi.

Bạn cần phải di chuyển thư mục này sang 1 đĩa khác lớn hơn.

Đọc thêm  Ý nghĩa các thư mục trong PostgreSQL

Trong bài viết này, tôi sẽ hướng dẫn các bạn thực hiện điều đó.

 

2. Kiểm tra

Giả sử tôi có một tablespace tên là data2019 với đường dẫn đặt tại /var/lib/pgsql/13/data2019.

postgres=# \db
                List of tablespaces
    Name    |  Owner   |          Location          
------------+----------+----------------------------
 data2019   | postgres | /var/lib/pgsql/13/data2019
 pg_default | postgres | 
 pg_global  | postgres | 
 tbs_index  | postgres | /data/tbs_index
 tbs_index2 | postgres | /data/tbs_index2
(5 rows)

Bây giờ tình huống là đĩa cứng để lưu trữ thư mục này đã gần hết rồi. Tôi có 1 thư mục đặt trên một đĩa khác, có tên là /data. Và tôi cần chuyển tablespace data2019 sang đây.

 

3. Tìm hiểu một chút về lý thuyết đã

Khi bạn tạo 1 tablespace với 1 thư mục tương ứng, PostgreSQL cũng sẽ tạo ra một link trong thư mục pg_tblspc trong data directory, trỏ đến thư mục tablespace mới được tạo.

Mặc dù có tồn tại câu lệnh di chuyển table và index sang các tablepace, nhưng không có câu lệnh nào để di chuyển tablespace sang thư mục khác. Tuy nhiên, dựa trên lý thuyết bên trên, cách di chuyển tablespace sang thư mục khác cũng khá đơn giản:

Chỉ cần move tablespace sang thư mục mới và cập nhật lại link của tablespace trỏ sang thư mục mới là được.

Đọc thêm  Ý nghĩa các thư mục trong PostgreSQL

 

4. Các bước làm:

1. Kiểm tra object id (OID) của tablespace

Giả sử database cluster của bạn có rất nhiều tablespace, nếu bạn cập nhật nhầm link thì rất tai hại. Do đó chúng ta cần kiểm tra kỹ OID của tablespace để cập nhật cho chuẩn (Vì tên của đường link cũng chính là OID)

Câu lệnh để kiểm tra ODI của tablespace

postgres=# SELECT oid, * FROM pg_tablespace;
  oid  |  oid  |  spcname   | spcowner | spcacl | spcoptions 
-------+-------+------------+----------+--------+------------
  1663 |  1663 | pg_default |       10 |        | 
  1664 |  1664 | pg_global  |       10 |        | 
 25403 | 25403 | tbs_index  |       10 |        | 
 25404 | 25404 | tbs_index2 |       10 |        | 
 55299 | 55299 | data2019   |       10 |        |

ở đây, 55299 là OID của tablespace data2019, và cũng là tên của link trong thư mục pg_tblspc.

2. Di chuyển thư mục tablespace

Thư mục lưu trữ dữ liệu thực sự của tablespace là /var/lib/pgsql/13/data2019, giờ chúng ta sẽ chuyển nó sang /data nhé

Trước tiên bạn cần phải stop PostgreSQL đi

pg_ctl stop
waiting for server to shut down.... done
server stopped

Di chuyển thư mục /var/lib/pgsql/13/data2019 sang /data

mv /var/lib/pgsql/13/data2019 /data/

3. Cập nhật lại link

cd $PGDATA/pg_tblspc

Bạn sẽ thấy hiện tại link đang bị lỗi do thư mục đã bị chuyển sang vị trí khác, bạn cần cập nhật lại link trỏ sang vị trí mới bằng lệnh sau:

ln -fs /data/data2019/ 55299

với /data/data2019 là đường dẫn mới

4. Cuối cùng, khởi động lại PostgreSQL

pg_ctl start
waiting for server to start....2021-05-21 04:28:11.728 UTC [20163] LOG:  redirecting log output to logging collector process
2021-05-21 04:28:11.728 UTC [20163] HINT:  Future log output will appear in directory "log".
 done
server started

 

5. Kiểm tra lại

Bây giờ bạn kết nối vào psql, thử kiểm tra lại xem nhé

-bash-4.2$ psql 
psql (13.2)
Type "help" for help.

postgres=# \db
           List of tablespaces
    Name    |  Owner   |     Location     
------------+----------+------------------
 data2019   | postgres | /data/data2019/
 pg_default | postgres | 
 pg_global  | postgres | 
 tbs_index  | postgres | /data/tbs_index
 tbs_index2 | postgres | /data/tbs_index2
(5 rows)

Như vậy chúng ta đã di chuyển tablespace sang thư mục mới thành công.

Nguồn: https://dangxuanduy.com/

Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây, để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.

KHOÁ DÀNH CHO NGƯỜI MỚI

KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN (ADMIN 1)

CÁC KHOÁ NÂNG CAO:

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ KIẾN TRÚC MULTITENANT 12c

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ HỆ THỐNG DATA GUARD

CÁC KHOÁ COMBO:

COMBO 1: ADMIN 1 + MULTITENANT 12c

COMBO 2: ADMIN 1 + DATA GUARD

COMBO 3: ADMIN 1 + MULTITENANT 12c + DATA GUARD

LỊCH HỌC:

Mời bạn xem tại đây: LỊCH HỌC CÁC LỚP ORACLE 

ĐĂNG KÝ:

https://forms.gle/MtCAoRQFenP886y79

Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.

0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x