Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

12c Di chuyển tệp dữ liệu trực tuyến

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:

  1. ALTER TABLESPACE my_ts OFFLINE;
  2. ! mv /old_dir/my_ts01.dbf /new_dir/my_ts01.dbf
  3. ALTER DATABASE RENAME FILE ‘/old_dir/my_ts01.dbf’ TO ‘/old_dir/my_ts01.dbf’;
  4. 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.dbf
Như 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
        20
 Tí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. 
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle's SYS_GUID () UUID RFC 4122 có tuân thủ không?

  2. Lỗi Oracle sau có nghĩa là gì:chỉ mục cột không hợp lệ

  3. MySQL tương đương với SEQUENCE.NEXTVAL của Oracle

  4. Làm cách nào để tìm các giá trị liên tiếp trùng lặp trong bảng này?

  5. thay thế cho listagg trong Oracle?