Až Vám zčerná obrazovka, přejděte na Linux!

Proč používat Linux
Zobrazují se příspěvky se štítkemOracle. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemOracle. Zobrazit všechny příspěvky

úterý 15. června 2010

Jak vyřešit ORA-01591: zámek uplatněný spornou distribuovanou transakcí

Tak jsem si jednou hrál s Hibernate a automatickým vytvářením tabulek nad skoro produkční databází Oracle 10 a dostal jsem se do jedné poněkud choulostivé situace. Při deployi earu jsem dostával
ORA-01591: zámek uplatněný spornou distribuovanou transakcí
Chvíli jsem si myslel, že to má na svědomí špatně navržený deployment Hibernate. Po čase jsem začal Gůglit ve vodách mimo Javu a dostal jsem se k jednoduchému řešeni:

Jedná se o problém, kdy transakce selhala v okamžiku, kdy se dostala do stavu prepared. Jediné řešení je ji odstranit. A řešení jsou dvě: buď se k ní připojit a rollbacknout, nebo ji smahnout přímo v databázi.

Druhé řešení je poměrně elegantní. Oracle definuje SQL příkaz ROLLBACK FORCE a jemu odpovídající PL/SQL funkci dbms_transaction.rollback_force(xid). V tabulce "SYS"."PENDING_TRANS$" je uložen záznam o všech čekajících transakcích. Ve sloupci LOCAL_TRAN_ID je XID.

Stačí se tedy přihlásit jako uživatel SYSTEM s funkcí SYSDBA (například v sqlplus), spustit
exec dbms_transaction.rollback_force(moje_xid)
a je vymalováno.

úterý 9. června 2009

Divočina s ORA-01034: ORACLE not available a ORA-27101: shared memory realm does not exist

Několik dní řeším problémy s instalací Oracle 11.1 na OpenSuSE 11.0. Z mně naprosto nepochopitelného důvodu jsem permanentně dostával ORA-27101: shared memory realm does not exist a ORA-01034: ORACLE not available při pokusech o použití sqlplus či dalších nástrojů včetně nahození databáze. Všude se dočtete, že řešení je prosté - nemáte správně ORACLE_HOME a ORACLE_SID. Jenomže vše nasvědčovalo tomu, že to správně mám. SID "TAPIK" jsem měl správně, cestu /u01/app/oracle/product/11.1/db_1 taky.
Původně jsem si myslel, že je zakopaný pes v tom, že jsem měl na stroji ještě spuštěný Oracle 10 XE. Shodil jsem ho - nic. Odinstaloval jsem ho - nic. Různě jsem laboroval s cestama, až jsem si nainstaloval orarun.rpm a ten mi napsal hlášku, že nemůže najít /oc4j/j2ee/OC4J_DBConsole_tapik.buchtovi.cz_tapik. Ale SID jsem měl nastavené na TAPIK! A světe div se, nastavení SID na "tapik" zabralo!
Z toho plyne poučení: NIKDY NEPOUŽÍVEJTE VELKÁ PÍSMENA V ORACLE_SID!!!
Ušetříte si spoustu nervů a bezesných nocí.

pátek 23. ledna 2009

Oracle je vážně Orákulum

Ve firmě Barco jsme se rozhodli stát se partnery Oraclu, abychom mohli legálně používat a hlavně přeprodávat jejich DB s našim systémem. Tak jsem několikrát sháněl kontakt na lidi z českého Oracle, slovenského Oracle, EMEA Oraclu. Nakonec jsem našel, zavolal si tam, abych se domluvil co a jak. Ihned jsem dostal nabídku po telefonu udělat registraci. Paráda!
Ale toto bylo poslední, co pozitivního stálo za zmínku. Pak už to následovalo:
* 2008-10-02: během telefonu jsem klikal na partnerský web Oraclu, který byl neeeeeeskuuuuuteeeeeeeeččččččňňňňněeeeeeeeee pomalýýýýýýýýýýýýýýýýýýýýýýýýýý. Odezva půl minuty byla úžasná. No ale nic, podařilo se (asi po 40 minutách!), dokonce i mé osobní ID a heslo fungovalo!
* poté jsme byli vyrozuměni, abychom zaplatili roční paušál nějakých 300doláčů, abychom mohli být oficiálně zaregistrováni a že po zaregistrování budu informován o přístupových právech. Hned druhý den peníze odešly. Po TŘECH TÝDNECH, kdy se nic nedělo, jsem se ptal, jak to vypadá s platbou. Protože nebyli schopni ji vyhledal, dne 2008-11-11 dostávám žádost o kopii platebního příkazu. Následně již byli schopni platbu najít. Paráda! Bylo mi oznámeno, že všechny podklady včetně přístupových práv atd. po spárování
* obratem jsme místo požadovaných informací a licencí dostali mailem 20ti stránkovou smlouvu o prodeji. Nechtěli jsme ještě nic prodávat, tak jsme ji zatím neřešili
* po několika týdnech (2008-11-23) jsem se znovu ozval, co že je to s těmi licencemi a přístupy. 2008-11-25: "Platba BILA identifikována, čeká se na schválení"
* 2008-11-28 dostáváme první zprávu, o kterou jsme si neřekli: "pred casem jsme Vam zasilali distribucni smlouvu QUICKSTART PLUS k podpisu. Vase aktualni smlouva uz bohuzel vyprsela, ale nova smlouva k nam zatim nedorazila. Mohu Vas pozdat o informaci, zda bude v nejblizsi dobe poslana?" Tak jsme si řekli AHA!, jsme asi ježci a smlouvu jsme podepsali a poslali kurýrem.
* do vánoc jsem neměl na zjišťování stavu nějak čas. Po novém roce (2009-01-06) jsem se k tomu vrátil. Odpověď? 2009-01-09: 'Dyk přece máte přístup ke všemu, co potřebujete!' Jako potvrzení jsem dostal výpis o stavu našeho partnerství. V něm byl náš mocmísntý OPN, nechal jsem si k němu poslat heslo, přihlásil se na stránky a požádal o doručení CDček jediného, co bylo na výběr - Linux a Windows Java developer.
* Bylo mi divné, že nemáme právo stáhnout i věci navíc. Při podrobném zkoumání onoho výpisu jsem zjistil, že žádnou smlouvu schválenou nemáme! Toto jsem už nevydržel a volal jsem na číslo, kde jsem se registroval. Bílá linka mne přesměrovala někam na zajímavou ústřednu, kde ihned po představení se jsem byl ubezpečen, že tam ani neví, jakým jazykem mluvím, a že mám použít angličtinu. Tak jsem se již oním jazykem zeptal, kdo mi může říct, proč je v našem partnerském profilu uvedeno, že nemáme nic podepsáno. Slečna mi sdělila, že takové informace ona nepodává a že musím kontaktovat lokální zastoupení. Ano, právě na linku lokálního zastoupení jsem volal!
* Toto už bylo na mne moc silné kafe. Poslal jsem maila, ať mi tedy vysvětlí, proč to tam máme tak, jak to máme. Odpověď obsahovala jednoduché sdělení: smlouva nebyla dosud schválena. Tak toto už nevydržel šéf firmy a sehnal si mobil přímo na lokálního zástupce a vynadal mu. Ten se mu po chvílí pátrání omluvil, že se celý schvalovací proces zakousl někde na Indickém poloostrově. Ach jo.

To ale není konec. To nejlepší teprve přijde.
CDčka přišla téměř okamžitě po onom "indickém" telefonátu. 22CD pro Linux a 16CD pro Wokna! Beru CD pro Linux, strkám ho do mašiny, kde mi běží 64bitové OpenSuSE 11 a spouštím install . To jsem neměl dělat. Dozvěděl jsem se, že používám nepodporovaný systém. Safra safra, říkám si, co se děje, dyk tam mám přece i 32bitové knihovny! Tak znova prověřuji, ano, jsou tam, už od předešlé instalace Oracle XE. Tak jsem začal zjišťovat příčinu. Oracle i Novell hlásí, že jsou vzájemně certifikováni, ale pro SLES10. Paráda. Tak se podívám, jestli v kódu je test na SLES, abych zjistil, jak ho ošulit. Jenže instalák je ELF (Executable Linux Format). Tak se dívám do requirements, jestli tam najdu nějakoou zmínku o uname, /etc/issue, rpm -qa či něco podobného. No a víte, co jsem zjistil? Podporované systémy jsou: RedHat ES 2.1 a 3.0 a UnitedLinux 1.0! Podívám se na krabici, na ní je "Build date 17/12/2008". To jsem nepochopil. A pak jsem se podíval na CDčko samotné. (C) 2004! Špatná nálepka? ls -s /media/cd odhaluje krutou pravdu. Datum vytvoření všech souborů na CD je 22.února 2004! Tak rozbaluju dál. Všechny CD v Linuxové krabici jsou z roku 2004 s vyjimkou jendoho, to ma dokonce (C) 2003. Tak co třeba Windows? "Build date 6/1/2009", to zní slibně. Ale kdeže. Totéž. Nacházím tam například i databázového klienta pro Windows 95. Takže jak jsem napsal pánům z Oracle:
"s obrovským nadšením jsem rozbaloval balík z Dublinu a s ještě větší frustrací jej pak odkopl do kouta :-("

Ale to ještě stále není konec. Mailuju, že se asi stal někde asi nějaký trapný žert, že mi omylem přišly pět let staré CD a že bych prosil o nové. Odpovědi přišly dvě. V první mne hlavní člověk na pobočce jemně naznačil, že si to přece můžu stáhnout z webu. Jasně že můžu. Ale jednka mi to spojení k nim pořád padá (jenom k nim, jinam jedu jako z praku) a dvak bych chtěl řádově desítky GB dat a to se mi fakt tahat nechce.
Druhá reakce od "nižšího" v hierarchii byla vstřícná. Ať prý specifikuju, co bych chtěl, že mi to pošlou. Paráda. Řekl jsem si jenom o pár věcí:
"Primárně potřebujeme hlavně "velkou" Oracle Database 11 pro 64-bitový Linux a Oracle Development Tools pro Linux x86.
Rád bych vyzkoušel i Oracle Enterprise Manager a Oracle Enterprise Performace Manager."
V odpověď jsem dostal žádost o přčesnou specifikaci dle jejich MEDIA PACKS/LICENSING - Manufacturing BoMs. Stačí prý jít na jejich stránky , vybrat si příslušný název balíku a ten mu poslat mailem, aby se neopakovala moje frustrace. Schválně tam běžte. A dostanete klasickou hlášku HostNotFound! :-D

Na moji připomínku, že ty stránky jsou od nás nedostupné, že se asi jedná o jejich intranetový portál, jsem už odpověď nedostal :-(

Tož asi tak.

pátek 29. srpna 2008

Oracle XE a openSuSE 11.0

Včera jsem dostal novou hračku - IBMku x3550 se dvěma QuadCore XEONy. Nainstaloval jsem tam 64bitové openSuSE 11.0 a pak jsem se vrhl do instalace Oracle. Momentláně vyvíjím na Oracle 10g Express Edition, takže šup na oracle.com, stáhnout RPMko s Oracle XE a šup tam s ním!

Ale ouha. Nebyla to žádná procházka růžovým sadem.

První zádrhel byl v tom, že Oracle nenabízí 64bitovou verzi. Nu což, řekl jsem si, 32bit by snad měl chodit. Prošla instalace i konfigurace pomocí /etc/init.d/oracle-xe configure (dal jsem jej na port 6060, na 8080 chci mít JBoss), databáze šla nahodit, ale na URL http://127.0.0.1:6060/apex jsem z linkse dostaval connection refused. Takže co s tím?

1) Firewall - rcSuseFirewall stop - nezabralo
2) IPadresa - links http://127.0.0.2:6060/apex ani links http://192.168.11.240:6060/apex
3) links - export DISPLAY=bilbo:0; firefox - nezabralo, firefox hazel totez

Takže přišel na řadu Google.
A)opensuse oracle express connection refused
4) našel jsem, že by to mělo být právě tím 32bitem na 64bitu. Tedy yast, Software-Software Manager, tam vybrat 32bitový pattern a Apply. Následně
/etc/init.d/oracle-xe restart; links http://127.0.0.1:6060/apex a opět totéž
5) Co kdyby to bylo portem? Všichni používají 8080... takže /etc/init.d/oracle-xe configure - smůla, already configured...
6) další link obsahoval, že sqplplus / as sysdba jim fungovalo. Testnu to a nemohl najít ORACLE_SID.
7) vzpomínám, jak se konfigurovalo prostředí - aha, oraenv - Error: dbhome cannot be find...
8) přenastavuju cestu, znova spouštím a nic, opět nenalezen. Dívám se, kde by mohl být a zjišťuju, že nikde :-(
9) po několika pokusech jsem přece našel, co jsem hledal: oracle_env.sh nemá žádný výstup, což mne zmátlo, ale less oracle_env.sh odhaluje pravou podstatu jeho fungování. Samozřejmě jsem v prvé chvíli zapomněl spustit to tečkově, takže export proměnných šel do háje, ale přece...
10)Opět sqplplus / as sysdba a tentokrát řve, že nemůže najít libaio.so.1
11)ldd sqplplus nehlásí nic chybějícího, takže to bude asi někde jinde. Zkouším se podívat do /lib a /usr/lib a ORACLE_HOME/lib a taky jsem ji nenašel.
12)rpmfind libaio našel jenom balíky pro Fedoru. Paráda.
B) opět Google: oracle libaio vrací hned na prvním místě oracle libaio. Jsou tam zdrojáky, takže je tahám.
C) během tahání zkouším oracle opensuse. Hned na prvním místě je Oracle on OpenSuse. Čtu to už potřetí, přestože tam o XE nikde ani zmínky, ale stálo to za to. Na konci, téměř neviditelně, je řádek:
Alternatively if you don't want problems in the installation of oracle 10g or 11g on openSUSE 11.0 (64bit) you can use this script doris1.1d.sh. This script will automate the setup by downloading from Yast dependencies, sorting out all the 32bit and 64bit libraries and linking where required. The purpose of this script is not to install Oracle but just to get the system ready for installation. Own risks policy applies. (root@localhost# sh doris1.1d.sh suse11 10g)

Myslel jsem, že mně vomejou.
13) Stáhnout skript a pak už jen:
root@localhost# sh doris1.1d.sh suse11 10g

rpm -e oracle-xe-univ; rpm -i oracle-xe-univ-10.2.0.1-1.0.i386.rpm

/etc/init.d/oracle-xe configure

links http://127.0.0.1:6060/apex a ejhle, už po mně chce heslo a lze se tma přihlásit!

Jaké z toho plyne poučení? Pochválen buď každý, kdo své znalosti promění do perfektně fungujícího skriptu...

pondělí 14. dubna 2008

Nefunkční oracle-xa-ds.xml z JBoss docs

Kdo z Vás se bude snažit rozchodit konexi na Oracle z JBossu, asi v první chvíli sáhne po JBossí dokumentaci. V kapitole Other Databases mají přímo ukázkový deployment descriptor pro oráklovký datový zdroj. Leč je v něm ašíbka (alespoň pro verzi 4.2.2), a to konkrétně v definici MBeany pro formátovač chyb z Oracle plynoucích.

<mbean code="org.jboss.resource.adapter.jdbc.xa.oracle.
OracleXAExceptionFormatter"
name="jboss.jca:service=OracleXAExceptionFormatter">
<depends optional-attribute-name="TransactionManagerService">
jboss:service=TransactionManager
</depends>
</mbean>

Jenomže OracleXAExceptionFormatter není v balíku org.jboss.resource.adapter.jdbc.xa.oracle, alébrž v org.jboss.resource.adapter.jdbc.vendor. A pak se můžete divit, že vám z toho lítají CNFE: ClassLoaderNotFound.