Portál AbcLinuxu, 30. dubna 2025 07:56
Zatímco v předchozím článku se mluvilo o výhodách a nevýhodách protokolu NFS při jeho nasazení na úložných sítích, tentokrát bude řeč o konkrétním příkladu využití NFS na síti s databázovým systémem Oracle. (Příklad nasazení. Upozornění na možné problémy. Zálohování Oracle.)
Tento článek navazuje na Databáze přes NFS a bude o tom, jak se to dělá v případě databází Oracle. Postřehy jsou založeny na praktických zkušenostech s implementací Oracle 11g o jedné databázové instanci a SAP s Oracle jako databázovým backendem (tedy Oracle 10g).
Návrh byl vypracován při těsné spolupráci se specialisty ze společnosti Network Appliance a Oracle. Nedodržuje striktně Best Practices společnosti NetApp a Oracle, nicméně shoda na tom, že současná verze Best Practicies není úplně nejlepší, panuje i ve společnostech NetApp a Oracle. Návrh je určen pro multicustomer environment (prostředí s více klienty) s využitím funkcí MultiStore, A-SIS (deduplikace), snapvault (disk-to-disk zálohování) a thin provisioning diskových polí Network Appliance.
Předpokládejme tedy, že máme NetApp jménem toaster
a vFiler jménem oracle1001
, dále pak zákazníka abc
, který má testovací (SID ab12), vývojovou (SID ab11) a produkční databázi (SID ab10). Každá živá Oracle single instance instalace se skládá z následujících důležitých prvků:
Pro všechny tyto jednotlivé stavební bloky by měly dle doporučení existovat oddělené logické prvky na storage systému (volume). Důvodem je to, že na zálohování/datovou bezpečnost jednotlivých prvků mohou být různé požadavky.
U jiných storage systémů se mohou požadavky lišit, ale v případě zařízení NetApp, pokud chcete mít možnost udržet mnoho záloh na diskových úložištích s možností jednoduché obnovy (pomocí Snap Manager for Oracle), se vyplatí udělat si návrh ukládání dat rozumně a pod rootem každé volume mít k dispozici jeden QTRee, do kterého se budou následně ukládat data. Pak můžete použít pro zálohování technologii SnapVault a mít k dispozici více záloh jak na primárním, tak na sekundárním (NearStore) diskovém úložišti. Můj návrh pro uvedenou databázi by vypadal následovně.
/vol/oracle1001_abc_test_ab12_orahome/home
– Oracle home, obsahuje konfiguraci a spustitelné soubory, knihovny, …/vol/oracle1001_abc_test_ab12_orafiles1/log
– transakční logy, naprosto nezbytné pro správnou funkci databáze/vol/oracle1001_abc_test_ab12_orafiles1/ctrl
– kontrolní soubory, obsahují databázové schéma, naprosto nezbytné/vol/oracle1001_abc_test_ab12_orafiles2/log
– transakční logy, naprosto nezbytné pro správnou funkci databáze/vol/oracle1001_abc_test_ab12_orafiles2/ctrl
– kontrolní soubory, obsahují databázové schéma, naprosto nezbytné/vol/oracle1001_abc_test_ab12_oraarch/arch
– archivní logy, slouží k point in time recovery (obnovení k určitému času)/vol/oracle1001_abc_test_ab12_oradata/data
– datové soubory, zde databáze žijeVýstup mého skriptu, který používám k vytváření single instance databázových exportů na storage systémech NetApp.
vFiler name is: oracle1001 SID is: ab12 Customer name is: abc System name is: test Used aggregate is: aggr1 --------------------------------------------- Followings volumes/QTrees will be created…: --------------------------------------------- /vol/oracle1001_abc_test_ab12_orahome/home /vol/oracle1001_abc_test_ab12_orafiles1/log /vol/oracle1001_abc_test_ab12_orafiles1/ctrl /vol/oracle1001_abc_test_ab12_orafiles2/log /vol/oracle1001_abc_test_ab12_orafiles2/ctrl /vol/oracle1001_abc_test_ab12_oraarch/arch /vol/oracle1001_abc_test_ab12_oradata/data In order to create this please invoke these commands: vol create oracle1001_abc_test_ab12_orahome aggr1 10g vol options oracle1001_abc_test_ab12_orahome nosnap on vol options oracle1001_abc_test_ab12_orahome nosnapdir on vol autosize oracle1001_abc_test_ab12_orahome on snap reserve oracle1001_abc_test_ab12_orahome 0 sis on /vol/oracle1001_abc_test_ab12_orahome vfiler add oracle1001 /vol/oracle1001_abc_test_ab12_orahome vol create oracle1001_abc_test_ab12_orafiles1 aggr1 10g vol options oracle1001_abc_test_ab12_orafiles1 nosnap on vol options oracle1001_abc_test_ab12_orafiles1 nosnapdir on vol autosize oracle1001_abc_test_ab12_orafiles1 on snap reserve oracle1001_abc_test_ab12_orafiles1 0 sis on /vol/oracle1001_abc_test_ab12_orafiles1 vfiler add oracle1001 /vol/oracle1001_abc_test_ab12_orafiles1 vol create oracle1001_abc_test_ab12_orafiles2 aggr1 10g vol options oracle1001_abc_test_ab12_orafiles2 nosnap on vol options oracle1001_abc_test_ab12_orafiles2 nosnapdir on vol autosize oracle1001_abc_test_ab12_orafiles2 on snap reserve oracle1001_abc_test_ab12_orafiles2 0 sis on /vol/oracle1001_abc_test_ab12_orafiles2 vfiler add oracle1001 /vol/oracle1001_abc_test_ab12_orafiles2 vol create oracle1001_abc_test_ab12_oraarch aggr1 60gb # make it double than ordered vol options oracle1001_abc_test_ab12_oraarch nosnap on vol options oracle1001_abc_test_ab12_oraarch nosnapdir on vol autosize oracle1001_abc_test_ab12_oraarch on snap reserve oracle1001_abc_test_ab12_oraarch 0 sis on /vol/oracle1001_abc_test_ab12_oraarch vol options oracle1001_abc_test_ab12_oraarch guarantee file vfiler add oracle1001 /vol/oracle1001_abc_test_ab12_oraarch vol create oracle1001_abc_test_ab12_oradata aggr1 1tb vol options oracle1001_abc_test_ab12_oradata nosnap on vol options oracle1001_abc_test_ab12_oradata nosnapdir on vol autosize oracle1001_abc_test_ab12_oradata on snap reserve oracle1001_abc_test_ab12_oradata 0 sis on /vol/oracle1001_abc_test_ab12_oradata vfiler add oracle1001 /vol/oracle1001_abc_test_ab12_oradata vfiler run oracle1001 qtree create /vol/oracle1001_abc_test_ab12_orahome/home vfiler run oracle1001 exportfs -p rw=192.168.0.0/24,root=192.168.0.0/24 /vol/oracle1001_abc_test_ab12_orahome/home vfiler run oracle1001 qtree create /vol/oracle1001_abc_test_ab12_orafiles1/log vfiler run oracle1001 exportfs -p rw=192.168.0.0/24,root=192.168.0.0/24 /vol/oracle1001_abc_test_ab12_orafiles1/log vfiler run oracle1001 qtree create /vol/oracle1001_abc_test_ab12_orafiles1/ctrl vfiler run oracle1001 exportfs -p rw=192.168.0.0/24,root=192.168.0.0/24 /vol/oracle1001_abc_test_ab12_orafiles1/ctrl vfiler run oracle1001 qtree create /vol/oracle1001_abc_test_ab12_orafiles2/log vfiler run oracle1001 exportfs -p rw=192.168.0.0/24,root=192.168.0.0/24 /vol/oracle1001_abc_test_ab12_orafiles2/log vfiler run oracle1001 qtree create /vol/oracle1001_abc_test_ab12_orafiles2/ctrl vfiler run oracle1001 exportfs -p rw=192.168.0.0/24,root=192.168.0.0/24 /vol/oracle1001_abc_test_ab12_orafiles2/ctrl vfiler run oracle1001 qtree create /vol/oracle1001_abc_test_ab12_oraarch/arch vfiler run oracle1001 exportfs -p rw=192.168.0.0/24,root=192.168.0.0/24 /vol/oracle1001_abc_test_ab12_oraarch/arch vfiler run oracle1001 qtree create /vol/oracle1001_abc_test_ab12_oradata/data vfiler run oracle1001 exportfs -p rw=192.168.0.0/24,root=192.168.0.0/24 /vol/oracle1001_abc_test_ab12_oradata/data
Jak můžete vidět, transakční logy i kontrolní soubory jsou na storage systému dvakrát. Je to z toho důvodu, že jsou naprosto nezbytné pro správnou funkci databáze a Oracle dokonce doporučuje uchovávat 4 živé kopie. Nicméně vzhledem k tomu, že ztráta již jediné lokace znamená zastavení databáze a enterprise storage systémům se dá relativně důvěřovat, alespoň co se ztráty dat týče, doporučuji pro většinu produkčních nasazení mít umístění jen dvě. Každé však na jiném agregátu/volume group. Ekvivalentně vytvoříme prostor pro další databázové instance.
Při implementaci kritických aplikací běžících po NFS můžete narazit na řadu problémů, například:
Pokud používáte storage systém, který umí „dobré snapshoty“ (LVM2 snapshoty považuji za špatný vtip), jako je například Sun Open Storage nebo NetApp, můžete si velice zjednodušit zálohování takové databáze. V případě, že využijete Sun Open Storage, bude to vyžadovat trošku dodatečného skriptování a bez klonování se asi raději obejdete (sám si v současné době nedokážu představit, že bych si klonování Oracle na Sun Open Storage skriptoval), nicméně pokud se vám podaří vytvořit skript, který bude schopen přepnout Oracle databázi do „hot backup mode“ a říct storage systému, aby udělal snapshot patřičných NFS exportů, získáte konzistentní zálohy za zlomek času oproti jiným druhům zálohování.
V případě storage platformy NetApp nepotřebujete žádné přídavné skriptování, stačí si pořídit licenci na Snap Manager for Oracle. S pomocí tohoto managera můžete vytvářet konzistentní zálohy z databázového serveru bez nutnosti přístupu ke storage systému, tedy plně v režii databázových administrátorů Oracle, kdykoli je potřeba. Obnova takové databáze po selhání nebo lidské chybě je otázkou několika minut, případně několika hodin v případě, že poslední snapshot není k dispozici na primárním storage systému nebo došlo k selhání právě tohoto prvku.
Pokud z nějakého důvodu vyžadujete mít k dispozici zálohy i na jiném médiu než disk, můžete využít protokol NDMP k odzálohování existujících snapshotů na pásky. Pokud v prostředí NetApp potřebujete mít zálohy na 2 různých místech (NearStore NetApp), můžete využít dva různé způsoby: Rychlé, ale špinavé řešení je SnapMirror, čisté, ale komplikovanější řešení je využít NetApp Operation Manager, který nabízí integraci se Snapmanagerem i technologiemi SnapMirror a SnapVault.
Databázové řešení přes NFS může ušetřit spoustu nákladů jak na specializovaném hardwaru, tak na administraci.
Toľko k zálohovaciemu konceptu. Zaujímalo by ma či sa tu spomenie aj úspešhosť restore concept-u.60x restore, 60x success...
Mimochodom, až 60 restorov? To sa v práci asi nepretrhnete. Teda za predpokladu že si zákazník nerobí repliky databáz na testovacie prostredia sámProč by tohle dělal někdo ze storage departmentu? To si snad Oracle DBA umí udělat (naklikat ve snap manageru) sami, ne? :)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.