ZFS Clon DB przy użyciu SNAP-a (baza testowa w kilka minut)

— Cel: Utworzenie clona bazy danych przy użyciu mechanizmow ZFS czyli tak, aby po clonie baza zajmowała jak najmniej miejsca (w naszym przypadku praktycznie 0 tuż po utworzeniu snapa bieżącej bazy danych) – śmiało można użyć taki sposob dla baz testowych (w chwile mamy bazę testową z zasobem na którym zajmowane są jedynie różnice, ale trzeba brać pod uwagę też przyrost biężącej bazy)
— Baza zrodłowa (istniejąca na ZFS): DBZRODLOWA, baza docelowa: DBTESTOWA
— shutdown DBZRODLOWA (tak aby mieć spójność – tylko na czas tworzenia snapa)

srvctl stop database -d DBZRODLOWA

— robimy clona z menu + share-a i montujemy go (poprzez GUI, kiedyś pewnie wrzuce screeny):
— Shares -> dbdata -> appdata (olowek) -> + Snapshot (wpisujemy jakas nazwe) -> na snapie „+ Clone snapshot as a new share” (w nazwie wpisujemy DBTESTOWA)
— mozna tez komendami z ZFS-a (nie testowane jeszcze):
— zfs snapshot nfs/local/dbdata@20210216
— zfs clone nfs/local/dbdata@20210216 nfs/local/DBTESTOWA
— zfs set mountpoint=/u02/DBTESTOWA nfs/local/DBTESTOWA

— fstab: addrIP:/export/DBTESTOWA /u02/DBTESTOWA nfs rw,bg,hard,nointr,rsize=1048576,wsize=1048576,tcp,nfsvers=3,timeo=600 0 0
umount /u02/DBTESTOWA
mount -a

— możemy odpalić DBZRODLOWA (i to jest jedyny problem przy tej metodzie, poniewaz jest delikatna niedostępność)

srvctl start database -d DBZRODLOWA

— kopia controlfiles DBZRODLOWA

alter database backup controlfile to trace;

— z alerta:

Tue Feb 16 12:25:48 2021
alter database backup controlfile to trace
Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/DBZRODLOWA/DBZRODLOWA1/trace/DBZRODLOWA1_ora_209736.trc
Completed: alter database backup controlfile to trace

— kopiujemy na bok

cp /u01/app/oracle/diag/rdbms/DBZRODLOWA/DBZRODLOWA1/trace/DBZRODLOWA1_ora_209736.trc /tmp/dbzrodlowadgcontrol.sql

— szukamy „Set #2. RESETLOGS case”
— i zostawiamy tylko sekcje:
CREATE CONTROLFILE REUSE DATABASE „DBZRODLOWA” RESETLOGS FORCE LOGGING ARCHIVELOG
— zmieniamy w niej wszystkie sciezki na nowy zasob wraz z nazwa bazy na DBTESTOWA
REUSE -> SET
DBZRODLOWA -> DBTESTOWA
szukaj i zastap:
/u02/dbdata/DBZRODLOWA -> /u02/DBTESTOWA/DBZRODLOWA

— wyglada tak: CREATE CONTROLFILE SET DATABASE „DBTESTOWA” RESETLOGS NOARCHIVELOG

— tworzymy pliczek init

[oracle@dm01dbadm01 dbs]$ cat /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/initDBTESTOWA.ora
audit_file_dest=’/u01/app/oracle/admin/DBTESTOWA/adump’
background_dump_dest=’/u01/app/oracle/diag/rdbms/DBTESTOWA/DBTESTOWA/trace’
core_dump_dest=’/u01/app/oracle/diag/rdbms/DBTESTOWA/DBTESTOWA/cdump’
user_dump_dest=’/u01/app/oracle/diag/rdbms/DBTESTOWA/DBTESTOWA/trace’
compatible=’11.2.0.4.0′
control_files=’/u02/DBTESTOWA/DBZRODLOWA/CONTROLFILE/control01.ctl’,’/u02/DBTESTOWA/DBZRODLOWA/CONTROLFILE/control02.ctl’
db_block_size=8192
db_file_multiblock_read_count=16
db_name=’DBTESTOWA’
open_cursors=300
remote_login_passwordfile=’EXCLUSIVE’
processes=500
pga_aggregate_target=15000000000
sga_target=20000000000
undo_management=’AUTO’
undo_tablespace=’UNDOTBS2′

— ustawiamy SIDa

export ORACLE_SID=DBTESTOWA
echo $ORACLE_SID

— usuwamy controlfile z DBTESTOWA-a

rm /u02/DBTESTOWA/DBZRODLOWA/CONTROLFILE/control0*.ctl
sqlplus / as sysdba
startup nomount
@/tmp/dbzrodlowadgcontrol.sql
create spfile from pfile;

— restart zeby poszedl z spfile

shutdown immediate
startup mount

— zeby byla tylko 1 instancja z RACa

alter system set „_no_recovery_through_resetlogs”=TRUE scope=both;
alter database open resetlogs;
update global_name set global_name=’DBTESTOWA’;

— tempy biezemy z DBZRODLOWA i odpalamy na DBTESTOWA (albo dodamy kilka tylko i juz bo nie musza byc wszystkie jak to tylko test):

alter tablespace TEMP add tempfile '/u02/DBTESTOWA/DBZRODLOWA/datafile/o1_mf_temp_1.tmp’ reuse;
alter tablespace TEMP add tempfile '/u02/DBTESTOWA/DBZRODLOWA/datafile/o1_mf_temp_2.tmp’ reuse;

— smiga

tail -f /u01/app/oracle/diag/rdbms/DBTESTOWA/DBTESTOWA/trace/alert_DBTESTOWA.log
SQL> select name, open_mode from v$database;
NAME OPEN_MODE
DBTESTOWA READ WRITE