Trước Oracle 12c, nếu bạn muốn di chuyển tệp của cơ sở dữ liệu, bạn phải tắt cơ sở dữ liệu hoặc sử dụng tệp dữ liệu / không gian bảng ngoại tuyến. Dưới đây là ví dụ về các bước bạn có thể thực hiện:
- ALTER TABLESPACE my_ts OFFLINE;
- ! mv /old_dir/my_ts01.dbf /new_dir/my_ts01.dbf
- ALTER DATABASE RENAME FILE ‘/old_dir/my_ts01.dbf’ TO ‘/old_dir/my_ts01.dbf’;
- ALTER TABLESPACE my_ts ONLINE;
Giờ đây trong Oracle 12c, bạn có thể thực hiện việc này khá đơn giản với một lệnh và người dùng khác có thể truy cập tệp cùng một lúc. Để minh họa điều này, tôi sẽ tạo một vùng bảng và trong khi di chuyển nó, có một phiên khác truy cập tệp.
SQL> create tablespace move_me 2 datafile '/u01/app/oracle/oradata/ora12c/move_me01.dbf' size 5g; Tablespace created. SQL> create table system.test_tab (id number) tablespace move_me; Table created. SQL> insert into system.test_tab values (10); 1 row created. SQL> commit; Commit complete.
Bây giờ chúng ta hãy bắt đầu di chuyển tệp này.
SQL> alter database move datafile 2 '/u01/app/oracle/oradata/ora12c/move_me01.dbf' to 3 '/u02/app/oracle/oradata/ora12c/move_me01.dbf';
Đồng thời, trong một phiên khác, hãy chèn một hàng vào bảng duy nhất trong không gian bảng này.
SQL> insert into system.test_tab values (20); 1 row created. SQL> commit;
Commit complete.
Như bạn có thể thấy, giao dịch đã được phép hoàn tất ngay cả khi chúng tôi đang di chuyển tệp.
Trong khi tệp đang di chuyển, tôi đã xem nội dung của cả hai điểm gắn kết.
[oracle@msp-test-ora12 ora12c]$ ls -l /u01/app/oracle/oradata/ora12c total 8769660 -rw-r----- 1 oracle oinstall 10043392 Sep 17 10:52 control01.ctl -rw-r----- 1 oracle oinstall 10043392 Sep 17 10:52 control02.ctl -rw-r----- 1 oracle oinstall 5368717312 Sep 17 10:52 move_me01.dbf -rw-r----- 1 oracle oinstall 52429312 Sep 17 10:52 redo01.log -rw-r----- 1 oracle oinstall 52429312 Sep 16 22:00 redo02.log -rw-r----- 1 oracle oinstall 52429312 Sep 17 02:00 redo03.log -rw-r----- 1 oracle oinstall 1090527232 Sep 17 10:52 sysaux01.dbf -rw-r----- 1 oracle oinstall 734011392 Sep 17 10:52 system01.dbf -rw-r----- 1 oracle oinstall 68165632 Sep 17 10:45 temp01.dbf -rw-r----- 1 oracle oinstall 471867392 Sep 17 10:52 undotbs01.dbf -rw-r----- 1 oracle oinstall 1073750016 Sep 17 02:06 users01.dbf [oracle@msp-test-ora12 ora12c]$ ls -l /u02/app/oracle/oradata/ora12c total 684044 -rw-r----- 1 oracle oinstall 5368717312 Sep 17 10:52 move_me01.dbfNhư bạn có thể thấy, tệp tạm thời nằm ở cả hai vị trí, sau một thời gian, lệnh MOVE hoàn tất và chúng tôi thấy bảng của chúng tôi có tất cả dữ liệu.
Database altered. SQL> select * From system.test_tab; ID ---------- 10 20Tính năng mới này sẽ là một công cụ tiết kiệm thời gian tuyệt vời cho tôi. Nhiều lần, tôi cần phải di dời tệp vì một số lý do và tôi sẽ sử dụng tính năng mới này.