Преди Oracle 12c, ако искате да преместите файла на база данни, трябваше или да изключите базата данни, или да изведете файла с данни/пространството за таблици офлайн. Ето пример за стъпките, които може да предприемете:
- ПРОМЕНЯТ ТАБЛИЧНО ПРОСТРАНСТВО my_ts ОФЛАЙН;
- !mv /old_dir/my_ts01.dbf /new_dir/my_ts01.dbf
- ПРЕИМЕНУВАНЕ НА ФАЙЛА НА БАЗА ДАННИ ‘/old_dir/my_ts01.dbf’ КЪМ ‘/old_dir/my_ts01.dbf’;
- ПРОМЕНЯТЕ ТАБЛИЦАТА 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Тази нова функция ще ми спести много време. Много пъти трябва да преместя файл по редица причини и ще използвам тази нова функция.