Oracle
 sql >> база данни >  >> RDS >> Oracle

12c Преместване на файлове с данни онлайн

Преди Oracle 12c, ако искате да преместите файла на база данни, трябваше или да изключите базата данни, или да изведете файла с данни/пространството за таблици офлайн. Ето пример за стъпките, които може да предприемете:

  1. ПРОМЕНЯТ ТАБЛИЧНО ПРОСТРАНСТВО my_ts ОФЛАЙН;
  2. !mv /old_dir/my_ts01.dbf /new_dir/my_ts01.dbf
  3. ПРЕИМЕНУВАНЕ НА ФАЙЛА НА БАЗА ДАННИ ‘/old_dir/my_ts01.dbf’ КЪМ ‘/old_dir/my_ts01.dbf’;
  4. ПРОМЕНЯТЕ ТАБЛИЦАТА my_ts ОНЛАЙН;

Сега в Oracle 12c можете да направите това съвсем просто с една команда и друг потребител може да има достъп до файла по едно и също време. За да илюстрирам това, ще създам пространство за таблици и докато го премествам, ще имам достъп до файла с друга сесия.

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.

Сега нека започнем преместването на този файл.

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

В същото време, в друга сесия, нека вмъкнем ред в единствената таблица в това пространство за таблици.

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

Както можете да видите, транзакцията беше разрешена да завърши, въпреки че сме в средата на преместването на файла.

Докато файлът се движеше, погледнах съдържанието и на двете точки за монтиране.

[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
Както можете да видите, файлът се намира и на двете места, временно. След известно време командата MOVE завършва и виждаме, че нашата таблица съдържа всички данни.
Database altered.
SQL> select * From system.test_tab;
        ID
----------
        10
        20
 Тази нова функция ще ми спести много време. Много пъти трябва да преместя файл по редица причини и ще използвам тази нова функция. 
  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 clob

  2. Как да проверите застояла статистика

  3. Как да използвам MAX() за резултат от подзаявка?

  4. Извикване на друга PL/SQL процедура в рамките на процедура

  5. Фонови процеси