Toto cvičení nenavazuje na konkrétní přednášku. Nějak na ni nevyšlo místo. Nicméně není možné si myslet, že rozumíte administraci Oracle bez toho, aniž byste si vyzkoušeli archivní mód.
O principu zálohování jsem na přednáškách mluvil několikrát. Máte k dispozici také prezentaci o zálohování a obnově databáze.
Poslední Oracle image máme od pašíka (kameny házejte na prvního středečního cvičího, omlouvám se :)).
Nahozeni site na eth1:
dhclient eth1
Funkční postup na obnovu a nahození Oracle je:
# nastavení prostředí su - oracle source /usr/local/bin/oraenv (jako jmeno databaze uvedte "orcl") # start listenera lsnrctl start # start databáze dbstart $ORACLE_HOME # manualní start databáze sqlplus /nolog connect / as sysdba startup # v případě neúspěšného startu, končícího s chybou: ORA-00845: MEMORY_TARGET not supported on this system # je oprava na příkazové řádce roota (zkuste experimentovat se size, měla by stačit menší): umount /dev/shm mount -t tmpfs shmfs -o size=13g /dev/shm # a nasledně opětovné spuštění v sqlplus startup
Test, jestli databáze funguje správně:
# pomocí připojení přes sqlplus sqlplus (login as "system", password "dba")
Nahození webové správy (není potřeba):
emctl start dbconsole # Pokud selže, prohoďte řádky v /etc/hosts. # Přístupná bude z prohlížeče na URI https://127.0.0.1:1158/.
Nejprve souhrnně celý postup:
Jednolivé kroky:
CREATE TABLESPACE backuptest DATAFILE '/opt/oracle/app/oracle/oradata/orcl/backuptest.dbf' SIZE 10M;
Případně SELECT file_name FROM dba_data_files; pro zjištění cesty k souborům
archive log list show parameter log_archive_start show parameter log_archive_local_first shutdown immediate; startup mount; alter database archivelog; alter database open; archive log list show parameter log_archive_start show parameter log_archive_local_first
V Archive destination ve vypisu archive log list je řetězec za poslednim lomítkem již součástí jména archivovaného logu, nikoliv adresářem.
alter system switch logfile; alter system switch logfile; !ls /opt/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/
V cílovém adresáři (viz poslední příkaz) by měly přibýt archivované log soubory.
create user uu identified by u default tablespace backuptest temporary tablespace temp; grant connect, resource to uu;
create table uu.t1 (a number, b number); insert into uu.t1 values (1,1); insert into uu.t1 values (1,1); commit;
mkdir /opt/oracle/backup
v novém shellu provedem (cold) backup celé databáze pomocí backup set v nástroji rman
rman target sys/oracle
shutdown immediate
startup mount
RUN {
BACKUP AS BACKUPSET
FORMAT '/opt/oracle/backup/%d_%s_%p'
(DATABASE);
}
zálohu by bylo možné provádět i při spuštěné databázi, tohle je rychlejší
alter database open; LIST BACKUP OF DATABASE;
V jiném shellu otevřete sqlplus a přihlaste se jako sysdba. rman si drží informace o provedených zálohách v řídícím souboru cílové databáze:
SELECT * FROM v$backup_set;
select count(*) from uu.t1; insert into uu.t1 select * from uu.t1; insert into uu.t1 select * from uu.t1; insert into uu.t1 select * from uu.t1; insert into uu.t1 select * from uu.t1; insert into uu.t1 select * from uu.t1; insert into uu.t1 select * from uu.t1; insert into uu.t1 select * from uu.t1; commit; select count(*) from uu.t1;
alter system switch logfile; alter system switch logfile; alter system switch logfile; !ls /opt/oracle/product/11.1.0/db_1/dbs/
startup
Databáze zustane ve stavu mount. Z chybového hlášení je zřejmé, že chybí datový soubor tablespace backuptest
alter database datafile '/opt/oracle/app/oracle/oradata/orcl/backuptest.dbf' offline; alter database open;</code> - dáme offline tablespace backuptest <code> select tablespace_name, status from dba_tablespaces; alter tablespace backuptest offline immediate; select tablespace_name, status from dba_tablespaces;
rman target sys/oracle; restore tablespace backuptest; recover tablespace backuptest; sql 'alter tablespace backuptest online';
select count(*) from uu.t1;
drop table t1; select count(*) from t1; select object_name, original_name from user_recyclebin; flashback table t1 to before drop rename to t2; select count(*) from t2; create table t1 as select * from t2; drop table t1; drop table t2 purge; select object_name, original_name from user_recyclebin; purge recyclebin; select object_name, original_name from user_recyclebin;
Vysvětlující a doplňující dokumentace k flashback operacím je v manálu Oracle
create table t1 (a number, b number); insert into t1 values (1,1); commit;
update uu.t1 set b=2 where a=1; commit;
update t1 set b=3 where a=1; commit;
update uu.t1 set b=4 where a=1; commit;
SELECT versions_startscn, versions_starttime, versions_endscn, versions_endtime, versions_xid, versions_operation, a, b FROM uu.t1 VERSIONS BETWEEN TIMESTAMP minvalue and maxvalue;
Pro další dotaz je třeba z výsledku tohoto získat nějaké xid.
SELECT xid, operation, start_scn,commit_scn,
logon_user, undo_sql
FROM flashback_transaction_query
WHERE xid = '07002100C3020000';