Alter table bảng lớn mà không bị treo DB như thế nào?

Việc thay đổi cấu trúc bảng trong production là công việc thường xuyên, nhưng khi CSDL chúng ta lớn và rất lớn thì việc thay đổi nhỏ cũng có thể làm treo toàn bộ DB vì phải xử lý 1 lượng lớn dữ liệu.

Giả sử chúng ta đang có bảng với 500tr records

alter table duong.table11 add salary number default 1000;

— để thực hiện lệnh này thì DB sẽ tiến hành lock bảng lại và sau đó thực hiện lệnh cho đến hết => sẽ rất lâu vì lượng dữ liệu lớn và phải set toàn bộ default cho col mới.

Giải pháp: Chia ra từng step để thực hiện riêng biệt

Step 1: add col thôi:

alter table duong.table11 add salary number;

Step 2: modify col đó cho giá trị default vào

alter table hr.employees modify salary default 1000;

Oracle sẽ tiến hành làm dần dần và đảm bảo không lock.

 

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận