プリントスタック TOKYO

データベースとセキュリティの世界から離れて早数年。過去の記憶を探しています。

PostgreSQLのインストール

この記事は、PostgreSQL 8.4.3 を用いています。

PostgreSQLの最新版を取得

# wget ftp://ftp2.jp.postgresql.org/pub/postgresql/source/v8.4.3/postgresql-8.4.3.tar.gz
~省略~
11:38:28 (15.41 MB/s) - `postgresql-8.4.3.tar.gz' を保存しました [16853436]

TARボールを展開

# tar -zxvf postgresql-8.4.3.tar.gz
~省略~

グループとユーザーの作成

# groupadd postgres

# useradd -g postgres -d /home/postgres -m postgres

# passwd postgres

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

コンパイルの準備
ここでは、各国語のサポートを有効にします。また、SSLでの接続も有効にします。

# cd postgresql-8.4.3

# ./configure --enable-nls=ja --with-openssl
~省略~

コンパイルを実行

# make
~省略~

make[1]: Leaving directory `/usr/local/src/postgresql-8.4.3/config'

All of PostgreSQL successfully made. Ready to install.

インストール
インストール先は、/usr/local/pgsql になります。

# make install
~省略~

所有者の変更

# chown -R postgres.postgres /usr/local/pgsql

環境変数の登録

# su - postgres

$ vi ~/.bash_profile

~省略~

export PGSQL_HOME=/usr/local/pgsql

PATH=$PATH:$PGSQL_HOME/bin

~省略~

$ source ~/.bash_profile

$ echo %PGSQL_HOME

/usr/local/pgsql

データーベースの初期を実施

$ initdb -D /home/postgres/data -E UTF8 --no-locale

データベースシステム内のファイルの所有者は"postgres"ユーザでした。

このユーザがサーバプロセスを所有しなければなりません。


データベースクラスタはロケールCで初期化されます。

デフォルトのテキスト検索設定はenglishに設定されました。

~省略~

成功しました。以下を使用してデータベースサーバを起動することができます。


postgres -D /home/postgres/data

または

pg_ctl -D /home/postgres/data -l logfile start
ネットワークから接続できるように設定
$ vi /home/postgres/data/postgresql.conf

~省略~

listen_addresses = 'localhost,192.168.0.100/180'

起動スクリプトの準備

# cp /usr/local/src/postgresql-8.4.3/contrib/start-scripts/linux /etc/rc.d/init.d/pgsql

サービスの登録

# chmod 755 /etc/rc.d/init.d/pgsql

# chkconfig pgsql on

# service pgsql start

Starting PostgreSQL: ok
データファイルをインストール先のディレクトリとは別のディレクトリに作成する場合は、PGDATAを編集します。
# vi /etc/rc.d/init.d/pgsql

~省略~

PGDATA="/home/postgres/data"

~省略~

パスワードの設定

$ psql

postgres=# alter user postgres with password 'password';

postgres=# \q

ネットワークから接続できるように設定

# vi /home/postgres/data/pg_hba.conf

# "local" is for Unix domain socket connections only

#local all all trust

local all postgres md5

# IPv4 local connections:

#host all all 127.0.0.1/32 trust

host all postgres 127.0.0.1/32 md5

# IPv6 local connections:

#host all all ::1/128 trust

host all postgres ::1/128 md5

unixODBCのコンパイル

知人に更新が止まっていると指摘されたのでスルーしているものも掲載してみます。
ひとまず、unixODBCのコンパイル方法を掲載します。unixODBCのコンパイルは通常のコンパイルを実施するのと変わりありません。

unixODBCのサイト: http://www.unixodbc.org/

Downloadから最新のソースを取得します。この時点では、2.2.14-p2 が最新でした。

# cd /usr/local/src
# wget http://www.unixodbc.org/unixODBC-2.2.14-p2.tar.gz
--12:28:51--  http://www.unixodbc.org/unixODBC-2.2.14-p2.tar.gz
           => `unixODBC-2.2.14-p2.tar.gz'
www.unixodbc.org をDNSに問いあわせています... 87.106.19.214
www.unixodbc.org|87.106.19.214|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 2,212,370 (2.1M) [application/x-gzip]

100%[==============================================>] 2,212,370    585.62K/s    ETA 00:00

11:29:00 (584.34 KB/s) - `unixODBC-2.2.14-p2.tar.gz' を保存しました [2212370/2212370]

次に展開します。

# tar -zxvf http://www.unixodbc.org/unixODBC-2.2.14-p2.tar.gz

展開が全て終了したら configure を実施します。なお、ここでは、GUIを無効にする --disable-gui を付与しています。

# cd unixODBC-2.2.14-p2
# ./configure --disable-gui

最後にコンパイルしてインストールします。

# make
~省略~(結構長いです。)
# make install
~省略~

unixODBCは、インストール先を指定しないと /usr/local/lib/ にインストールされます。
なお、インストールされるライブラリにはPostgreSQLなどのODBCドライバもインストールされます。(libodbcpgsql.so)しかし、このODBCドライバはunixODBCが提供するものでありPostgreSQLで提供されるODBCドライバとは異なりますので注意する必要があります。

なお、インストールの成否は、isql ユーティリティを実行することで確認できます。

$ isql --version
unixODBC x.x.xx

Oracle 専用サーバーと共有サーバー

Oracle Database には、専用サーバーと共有サーバーの2種類の接続モードがあります。これらのうち、共有サーバーはマルチスレッドサーバーとも呼ばれていました。
この接続モードを簡単に区別すると下記のように言えます。

  • 専用サーバー ... 1接続につき、1プロセスで接続するモード
  • 共有サーバー ... 1つのプロセスを複数の接続で共有するモード

しかし、Windows 版の Oracle Database では専用サーバーであっても1接続につき、1プロセスが起動されるわけではなく、マルチスレッドで動作しているように見えます。確認は行っていませんが、これは、Windows の デスクトップヒープ による問題を回避するためだと思われます。

一般的に性能を優先する場合は、専用サーバーでインスタンスを作成しますが、セッション数が多いなどの理由からリソースを有効活用するために共有サーバーを選択する場合もあります。

Oracle SQLトレース

以前から忘れる前に投稿しておかなければならないと思っていた、Oracleで接続しているセッションだけのSQLトレースを取得する方法です。

SQL> ALTER SESSION SET EVENTS '10046 trace name context forever,level 12';
SQL> ALTER SESSION SET SQL_TRACE = 'TRUE';
~トレースするSQL~
SQL> ALTER SESSION SET SQL_TRACE = 'FALSE';

トレースファイルの出力先は、下のSQL文で調べることができます。

SQL> SELECT * FROM V$PARAMETER WHERE NAME = 'USER_DUMP_DEST';

初期化パラメータに指定がない場合は、$ORACLE_BASE/admin//udump に出力されます。
また、一般的に出力後は整形(TKPROF)を行いますが、バインドパラメータの変数を参照するときは整形すると閲覧できなくなります。

たとえば、イベントのレベルには下のようなものがあります。

EVENTS="10210 trace name context forever, level 10" -- テーブル
EVENTS="10211 trace name context forever, level 10" -- インデックス
EVENTS="10210 trace name context forever, level 2" -- データブロックチェック
EVENTS="10211 trace name context forever, level 2" -- インデックスブロックチェック
EVENTS="10235 trace name context forever, level 1" -- メモリヒープチェック
EVENTS="10049 trace name context forever, level 2" -- メモリ保護カーソル

Oracle DataPump

Oracle 10g から 9i までの EXP と IMP ユーティリティは推奨されなくなっています。それでは、新しいユーティリティは何かというと Oracle DataPump と呼ばれているものです。
優位性としては、高速で安全らしいのですが、検証もしていないのでわかりません。

まず、使う前に、実行するユーザにDIRECTORYオブジェクトの読み書き権限が必要になります。
また、このDIRECTORYもユーザ単位で指定して作成すること方がベストでしょう。

sqlplus user/password@SID
SELECT * FROM DBA_DIRECTORIES;
CREATE DIRECTORY SCOTT_DATAPUMP_DIR AS 'ディレクトリ';sqlplus /nolog
connect as sysdba
GRANT READ,WRITE ON DIRECTORY SCOTT_DATAPUMP_DIR TO ユーザ;

次に、実際の使い方ですが、以降の実行方法で行うことができます。(ブログのスペース上で改行しているように見える場合もありますが、実行行は全て1行です。)

見積もり

expdp scott/tiger@ORCL ESTIMATE_ONLY=yエクスポート
expdp scott/tiger@ORCL directory=SCOTT_DATAPUMP_DIR dumpfile=SCOTT.DMP logfile=SCOTT.LOG

エクスポートで出力ファイルを分割することもできます。

expdp user/password?directory=DIR01?dumpfile=SAMPLE.dmp,DIR02:SAMPLE02%U.dmp?logfile=DIR02:SAMPLE.LOG?filesize=20M

サービスをコマンドプロンプトで開始/停止する

Windowsでコマンドプロンプトからサービスを停止したり開始したりりするには、net コマンドを利用すればできます。BATファイルなどを書く人は知っていることですね。

停止

SHELL> net stop サービス名

開始

SHELL> net start サービス名

JDBCのドライバとURL

各種ベンダのJARファイルとドライバクラス、URLを掲載します。オープンソースのものに関しては、バージョンにより異なる場合もありますので、ドキュメントを確認してください。(投稿時点:DB2、HiRDB、Symfowareなどは後日)

SQL Server 2008 JDBC Driver

JARファイル(JDBC 3.0): sqljdbc.jar
JARファイル(JDBC 4.0): sqljdbc4.jar
ドライバクラス: com.microsoft.sqlserver.jdbc.SQLServerDriver
URL: jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks;user=MyUserName;password=*****;

SQL Server 2005 JDBC Driver

JARファイル(JDBC 3.0): sqljdbc.jar
ドライバクラス: com.microsoft.sqlserver.jdbc.SQLServerDriver
URL: jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks;user=MyUserName;password=*****;

Oracle Thin Driver

JARファイル(Java 1.2): classes12.jar
JARファイル(Java 1.4): ojdbc14.jar
JARファイル(Java 1.5): ojdbc5.jar
ドライバクラス: oracle.jdbc.driver.OracleDriver
URL: jdbc:oracle:thin:@localhost:1521:database_name

PostgreSQL(バージョンにより異なる?)

JARファイル: そのバージョンのJDBCドライバ
ドライバクラス: org.postgresql.Driver
URL: jdbc:postgresql://localhost:5432/database_name

MySQL

JARファイル: mysql-connector-java-x.x.x-bin.jar
ドライバクラス: com.mysql.jdbc.Driver
URL: jdbc:mysql://localhost:3306/database_name