Oracle
 sql >> Baza danych >  >> RDS >> Oracle

12c Przenieś pliki danych online

Przed Oracle 12c, jeśli chciałeś przenieść plik bazy danych, musiałeś albo zamknąć bazę danych, albo przełączyć plik danych/obszar tabel w tryb offline. Oto przykład kroków, które możesz podjąć:

  1. ALTER TABLESPACE my_ts OFFLINE;
  2. !mv /stary_katalog/mój_ts01.dbf /nowy_katalog/mój_ts01.dbf
  3. ZMIEŃ PLIK ZMIANY NAZWY BAZY DANYCH „/old_dir/my_ts01.dbf” NA „/old_dir/my_ts01.dbf”;
  4. ALTER TABLESPACE my_ts ONLINE;

Teraz w Oracle 12c możesz to zrobić po prostu za pomocą jednego polecenia, a inny użytkownik może jednocześnie uzyskiwać dostęp do pliku. Aby to zilustrować, stworzę przestrzeń tabel i podczas jej przenoszenia będę miał dostęp do pliku przez inną sesję.

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.

Teraz zacznijmy przenoszenie tego pliku.

SQL> alter database move datafile
  2  '/u01/app/oracle/oradata/ora12c/move_me01.dbf' to
  3  '/u02/app/oracle/oradata/ora12c/move_me01.dbf';

W tym samym czasie w innej sesji wstawmy wiersz do jedynej tabeli w tej przestrzeni tabel.

SQL> insert into system.test_tab values (20);
1 row created.
SQL> commit;
Commit complete.

Jak widać, transakcja została zakończona, mimo że jesteśmy w trakcie przenoszenia pliku.

Podczas przenoszenia pliku przyjrzałem się zawartości obu punktów montowania.

[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
Jak widać, plik znajduje się tymczasowo w obu miejscach. Po pewnym czasie polecenie MOVE kończy działanie i widzimy, że nasza tabela zawiera wszystkie dane.
Database altered.
SQL> select * From system.test_tab;
        ID
----------
        10
        20
 Ta nowa funkcja będzie dla mnie świetną oszczędnością czasu. Wiele razy muszę przenieść plik z wielu powodów i będę korzystał z tej nowej funkcji. 
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użytkownik schematu Oracle nie może utworzyć tabeli w procedurze

  2. Oracle wstawia, jeśli wiersz nie istnieje

  3. Pytanie o opinie :Jedna sekwencja dla wszystkich tabel

  4. Oracle - Dlaczego powinienem używać pakietów zamiast samodzielnych procedur lub funkcji?

  5. Firmy programistyczne, które pracują nad Oracle D2k, PLSQL Technologies w Noida