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:
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.
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.
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 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é.