<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zenobius, czyli Piotr Baranowski &#187; Tutorial</title>
	<atom:link href="http://zenobius.zeno.pl/archives/category/tutorial/feed" rel="self" type="application/rss+xml" />
	<link>http://zenobius.zeno.pl</link>
	<description>IT, Świat, Praca, PHP.. życie.</description>
	<lastBuildDate>Tue, 07 Sep 2010 10:00:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Instalacja DB2 na Linux&#8217;ie. Łączenie DB2 z PHP.</title>
		<link>http://zenobius.zeno.pl/archives/137/notka/instalacja-db2-na-linuxie-laczenie-db2-z-php</link>
		<comments>http://zenobius.zeno.pl/archives/137/notka/instalacja-db2-na-linuxie-laczenie-db2-z-php#comments</comments>
		<pubDate>Sun, 28 Feb 2010 22:11:37 +0000</pubDate>
		<dc:creator>Zenobius</dc:creator>
				<category><![CDATA[Notka]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[db2]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[informatyka]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[redhat]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://zenobius.zeno.pl/?p=137</guid>
		<description><![CDATA[Edit: dodałem tekst o tym co może wyniknąć z połączenia DB2 z PHP. O tym, czemu w temacie tej notki DB2 i PHP występują w jednym zdaniu, będzie gdzie indziej. A zapewniam, że temat jest interesujący. Poniżej opis jak zainstalować DB2 na serwerze z Linuxem ( testowaliśmy to na systemach: Fedora, CentOS, RedHat, Ubuntu ). [...]]]></description>
			<content:encoded><![CDATA[<p>Edit: dodałem tekst o tym co może wyniknąć z <a title="db2 i php - co mi da ich mariaż" href="http://zenobius.zeno.pl/archives/135/notka/db2-v9-x-i-php-co-mi-da-ich-mariaz">połączenia DB2 z PHP</a>.</p>
<p>O tym, czemu w temacie tej notki DB2 i PHP występują w jednym zdaniu, będzie <a title="db2 i php - co mi da ich mariaż" href="http://zenobius.zeno.pl/archives/135/notka/db2-v9-x-i-php-co-mi-da-ich-mariaz">gdzie indziej</a>. A zapewniam, że temat jest interesujący. Poniżej opis jak zainstalować DB2 na serwerze z Linuxem ( testowaliśmy to na systemach: <a title="Projekt Fedora" href="http://fedoraproject.org/pl/index">Fedora</a>, <a title="The Community ENTerprise Operating System" href="http://centos.org/">CentOS</a>, <a title="RedHat" href="http://www.redhat.com/">RedHat</a>, <a title="Ubuntu" href="http://ubuntu.pl/">Ubuntu</a> ). Większość tego tutoriala została najpierw przetestowana przez <a title="Kamil Jakubowski" href="http://kamil.zeno.pl">Kamila</a>, mi udało się rozwiązać kluczowy problem. Ale.. po kolei.</p>
<p><strong>Ten poradnik jest też dla tych, którym po instalacji DB2 i sterowników pod PHP wyskakują błędy połączenia z bazą mimo, że wszystko poszło jak trzeba (patrzcie na punkt ostatni)!</strong></p>
<h3>Jaki Linux?</h3>
<p>Po pierwsze, musimy zdecydować się na jakąś dystrybucję. DB2, jako, że jest produktem IBM&#8217;a, lubi się z RedHat&#8217;em (czyli z Fedorą i CentOS&#8217;em również) oraz SuSE. Kamilowi udało się to wszystko zrobić na Ubuntu. Myślę, że i inne dystrybucje dadzą sobie radę.</p>
<p>Ja osobiście używam Windowsa ( tak, Windowsa ) jako środowiska do pisania kodu, natomiast Linux&#8217;a postawionego mam na SUN&#8217;owskim <a title="VirtualBox" href="http://www.virtualbox.org/">VirtualBox</a>&#8216;ie. Do plików na nim dostaje się przez Sambę. Dzięki temu PDT myśli, że pracuje na Windzie, a ja odpalam wszystko na Linuxie. Jak się komuś spodoba taki sposób, to napiszę kiedyś jak to sobie ustawić wszystko.</p>
<p>Ale.. nie chce wywoływać burzy Win vs. Linux, czy dystrybucja A vs. dystrybucja B, więc na tym co powyżej poprzestanę.</p>
<h3>Czego mi potrzeba?</h3>
<p>Na pewno wspomnianego już Linux&#8217;a ;-) Poza tym trzeba <a title="IBM DB2 download" href="http://www-01.ibm.com/software/data/db2/express/download.html">ściągnąć DB2 w wersji Express-C</a> (testowaliśmy z wersją 9.5 jak i 9.7 ), chyba, że ktoś ma licencje na pełną wersję DB2. Ale nie sądzę, żeby wtedy wchodził na mojego bloga ;-)</p>
<p>Jako, że na końcu tego tutoriala mamy mieć możliwość podłączenia się do DB2 za pomocą PHP &#8211; to przyda się mieć Apache&#8217;a oraz PHP ( my używaliśmy do tego 5.3.1 ). My zaczynaliśmy od czystego, ale myślę, że nie będzie problemów z &#8220;brudnym&#8221;.</p>
<p>Przy instalacji DB2 przez setup graficzny trzeba mieć zainstalowaną Java&#8217;e. Sposób wytestowany jest zarówno graficznie jak i z linii poleceń, aczkolwiek druga opcja oznacza więcej ręcznego babrania się w konfiguracji. W przypadku serwerowych systemów trudno o jakiegoś managera okien, jeżeli bawimy się na Linux&#8217;owym desktopie &#8211; to droga wolna.</p>
<p>Aby skompilować DB2 oraz drivery do połączenia z PHP potrzebny jest.. kompilator ( d-oh! ). Wypada więc zainstalować <strong>gcc</strong> .</p>
<h3>Instalacja DB2</h3>
<p>Ja omówię instalacje z linii poleceń. Kamil pewnie wrzuci na swojego bloga informacje o instalacji graficznej. Chociaż ona zazwyczaj polega na czytaniu tego co na ekranie i umiejętnym klikaniu &#8220;next&#8221; ;-)</p>
<h4>Z linii poleceń</h4>
<p>Ściągamy plik, rozpakowujemy, wchodzimy do katalogu który powstał, potem od katalogu expc no i zaczyna się zabawa..</p>
<p>1. Uruchamiamy:<br />
<code>./db_install</code><br />
2. Wybieramy katalog instalacji ( domyślnie jest to /opt/ibm/db2/V9.[x]), <strong>katalog trzeba zapamiętać! </strong>( x to wersja DB2 którą się instaluje ).</p>
<p>3. Wpisujemy &#8220;EXP&#8221; i pacamy &#8220;enter&#8221;</p>
<p>4. Instalacja robi swoje, idziemy po herbatę/kawę/colę/lub-gdzie-chcemy ;-)</p>
<p>5. Jeżeli wróciliśmy i na ekranie znaleźliśmy błąd w stylu<br />
<code>ERROR:<br />
The following library files could not be loaded by db2langdir<br />
in /tmp/exp/disk1/db2/linux/install/../bin</code></p>
<p>libstdc++.so.5<br />
libstdc++.so.5<br />
to oznacza to iż brakuje nam niektórych bibliotek C++ i musimy zrobić coś takiego<br />
<code>yum install compat-libstdc++-33</code><br />
Po czym wracamy do pkt. 1 .</p>
<p>6. Przechodzimy do konfiguracji serwera po instalacji ręcznej. Opis tego procesu, po polsku, znajduje się w <a title="IBM InfoCenter - Konfigurowanie serwerów DB2 po ręcznej instalacji" href="http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.uprun.doc/doc/t0007067.htm">InfoCenter IBM&#8217;a</a>.</p>
<p>Parę wskazówek, sugestii i rzeczy pomocnych do pkt 6. :</p>
<p>1) nie bawcie się w zmienianie domyślnych, sugerowanych tam rzeczy, jeżeli nie wiecie co robicie. DB2 w wielu miejscach ma różne ustawienia, które również trzeba wtedy zmienić. Czasem trudno do tego dojść. Jeżeli zdecydujecie się na wprowadzenie DB2 na produkcyjny serwer &#8211; wtedy poświęćcie czas na dokładniejszą naukę i zrozumienie zasad działania DB2.</p>
<p>2) w podpunkcie 3cim, jako typ uwierzytelniania, wybieramy &#8220;server&#8221;. Jest to najpopularniejsza metoda uwierzytelniania do której jesteśmy przyzwyczajeni. Jako login/hasło do bazy podajemy wtedy usera którego stworzyliśmy w podpunkcie 1szym. Czyli domyślnie db2inst1 i hasło takie jakie utworzyliśmy. Jak wyżej &#8211; nie kombinujcie z tym, chyba, że wiecie co robicie :-)</p>
<p>3) konfiguracja komunikacji DB2. W podpunkcie 3cim wpisujemy tą komendę<br />
<code>update database manager configuration using svcename serwer1|3100</code><br />
razem ze znakiem |. Oczywiście biorąc pod uwagę swoją nazwę usługi, port itp.</p>
<p>Instalacja DB2 to, aktualnie, prościzna. Jeżeli trzymamy się instrukcji i czytamy to co &#8220;mówi&#8221; nam system &#8211; to jesteśmy w domu. &#8220;Tricky&#8221; jest kolejny punkt..</p>
<h3>Instalacja driverów do DB2 dla PHP</h3>
<p>Do połączenia się z DB2 potrzebujemy jakichś driverów. My używamy <a title="PECL PDO_IBM" href="http://pecl.php.net/package/PDO_IBM">PDO_IBM</a>. Dostępny jest także <a title="PECL ibm_db2" href="http://pecl.php.net/package/ibm_db2">ibm_db2</a> który bardziej przypomina zestaw funkcji do MySQL&#8217;a, więc nie bierzemy go nawet pod uwagę (OOP ftw ;-) ).</p>
<p><strong>Bardzo ważne</strong> jest aby zainstalować <a title="PECL PDO_IBM 1.2.5" href="http://pecl.php.net/package/PDO_IBM/1.2.5">PDO_IBM w wersji 1.2.5</a> . Wersje wyższe (podczas pisania tego tekstu dostępne są 1.3.0 i 1.3.1) powodują sporo błędów przy wykonywaniu zapytań.</p>
<p>Kolejną sprawą jest to, że Fedora uparcie twierdzi, że PDO jest zainstalowane gdy próbujemy je zainstalować poprzez PECL&#8217;a. Natomiast gdy próbujemy zainstalować PDO_IBM to twierdzi, że PDO nie widział na serwerze. Tworzy to pewien impas. Jedynym sposobem na przełamanie owego jest ręczna kompilacja sterowników. A oto jak sprawić, by PHP miało PDO oraz PDO_IBM :<br />
<code>pecl download PDO_IBM-1.2.5<br />
tar -xzf PDO_IBM-1.2.5.tgz<br />
cd PDO_IBM-1.2.5<br />
phpize</code><br />
Jeżeli nie mamy phpize, trzeba sobie zainstalować paczkę php-devel poprzez<br />
<code>yum install php-devel.i686</code><br />
Teraz czas na<strong> zapamiętany wyżej katalog</strong>, w którym zostało zainstalowane DB2. Należy go <strong>wstawić w miejsce mojego</strong> <em>/opt/ibm/db2/V9.5/</em> .<br />
<code>./configure --with-pdo-ibm=/opt/ibm/db2/V9.5/<br />
make<br />
make install</code><br />
W tym momencie plik pdo_ibm.so znajduje się w katalogu z extensions do PHP. Teraz należy dodać <em>extension=pdo_ibm.so</em> . W ulubionym edytorze stwórz sobie plik pdo_ibm.ini w katalogu /etc/php.d/ i wpisz tam extension=pdo_ibm.so .</p>
<p>Teraz resecik apache&#8217;a i..<br />
<code>php -m</code><br />
Jeżeli nie ma błędu, a na liście pojawia się pdo_ibm &#8211; to jesteśmy w domu :-)</p>
<h3>Tworzenie bazy danych w DB2</h3>
<p>W necie jest <a title="DB2 Survival Guide" href="http://www.michael-thomas.com/tech/db2/db2_survival_guide.htm">dobry &#8220;survival guide&#8221; dla DB2</a>. Jako, że jest to baza danych z długą historią życiową ma sporo naleciałości niezrozumiałych dla ludzi którzy nigdy nie mieli nic wspólnego z bazą danych tego typu. Jednym z przykładów na &#8220;wtf?&#8221; jest długość nazwy bazy danych. Otóż maksymalna długość nazwy bazy danych to 8 znaków.</p>
<p>Podobną śmiesznością jest &#8220;escapowanie&#8221; stringów. Otóż żeby &#8220;uciec&#8221; znak &#8216; należy go poprzedzić drugim &#8216;. Czyli np.<br />
<code>SELECT ... WHERE name = 'Don''t be stupid!';</code><br />
Żeby dostać się do linii poleceń db2, zakładając, ze właściciel instancji nazywa się <em>db2inst1</em> klepiemy:<br />
<code>su db2inst1<br />
db2</code><br />
W linii poleceń db2 klepiemy:<br />
<code>create database test</code><br />
I mamy już bazę danych ;-)</p>
<h3>Tworzenie bazy danych DB2 nie uwzględniającej wielkości znaków przy sortowaniu ( do czego przyzwyczaja nas każda inna baza w standardzie )</h3>
<p>W DB2 9.7 lub wyższej możemy sprawić, aby silnik nie uwzględniał wielkości liter przy sortowaniu. Aby tak się stało musimy stworzyć bazę z odpowiednim &#8220;collate&#8221;<br />
<code>CREATE DATABASE test<br />
USING CODESET UTF-8 TERRITORY PL<br />
COLLATE USING <strong>UCA500R1_LEN_S2</strong><strong></strong></code></p>
<p><strong></strong><br />
<strong>Ważna sprawa!</strong> Nie można zmienić &#8220;collate&#8221; później. Więc stosujcie to domyślnie przy tworzeniu bazy danych. Pomysł zgapiono z <a title="Making DB2 case-insensitive" href="http://www.ibm.com/developerworks/data/library/techarticle/0203adamache/0203adamache.html">oficjalnego poradnika IBMa dotyczącego DB2</a>.</p>
<h3>Problem z kodowaniem znaków do UTF8</h3>
<p>Jeszcze jeden mały &#8220;pro tip&#8221; który może się przydać, żebyście nie musieli przechodzić przez to co ja. Aby klient zwracał do PHP dane z odpowiednim kodowaniem UTF8 trzeba przelogować się na usera db2inst1 ( su db2inst1 ) i odpalić komendę<br />
<code>db2set db2codepage=1208</code><br />
Miłej zabawy ;-)</p>
<p>A o pytania, instrukcje i sugestie proszę uderzać w komentarze. Nie uważam się za guru Linux&#8217;a ani za guru DB2 &#8211; to co tu opisałem to to do czego udało mi się dojść w ciągu ostatnich 3-4 lat obcowania z tą bazą w połączeniu z PHP.
<div class="fblike_button" style="margin-left: 30px; margin-top: 10px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fzenobius.zeno.pl%2Farchives%2F137%2Fnotka%2Finstalacja-db2-na-linuxie-laczenie-db2-z-php&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
]]></content:encoded>
			<wfw:commentRss>http://zenobius.zeno.pl/archives/137/notka/instalacja-db2-na-linuxie-laczenie-db2-z-php/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
