sql >> Databasteknik >  >> RDS >> Oracle

12c Flytta datafiler online

Före Oracle 12c, om du ville flytta en databasfil, var du antingen tvungen att stänga av databasen eller ta datafilen/tabellutrymmet offline. Här är ett exempel på de steg du kan ta:

  1. ÄNDRA TABLESPACE my_ts OFFLINE;
  2. !mv /old_dir/my_ts01.dbf /new_dir/my_ts01.dbf
  3. ÄNDRA DATABAS BYT NAMN FIL '/old_dir/my_ts01.dbf' TILL '/old_dir/my_ts01.dbf';
  4. ÄNDRA TABLESPACE my_ts ONLINE;

Nu i Oracle 12c kan du göra detta helt enkelt med ett kommando och en annan användare kan komma åt filen samtidigt. För att illustrera detta kommer jag att skapa ett tabellutrymme, och medan jag flyttar det har en annan session tillgång till filen.

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.

Låt oss nu börja flytta den här filen.

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

Samtidigt, i en annan session, låt oss infoga en rad i den enda tabellen i det här tabellutrymmet.

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

Som du kan se fick transaktionen slutföras trots att vi är mitt uppe i att flytta filen.

Medan filen rörde sig tittade jag på innehållet i båda monteringspunkterna.

[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
Som du kan se finns filen tillfälligt på båda ställena. Efter en tid slutförs kommandot MOVE och vi ser att vår tabell har all data.
Database altered.
SQL> select * From system.test_tab;
        ID
----------
        10
        20
 Den här nya funktionen kommer att spara mycket tid för mig. Många gånger behöver jag flytta en fil av ett antal anledningar och jag kommer att använda den här nya funktionen. 
  1. Utländska nycklar, blockering och uppdateringskonflikter

  2. SQL Server Konvertera heltal till binär sträng

  3. Frågeoptimering i PostgreSQL. FÖRKLARA Grunderna – Del 3

  4. Oracle 11g - Hur man optimerar långsamt parallellt insertval?