ディレクトリがあるのにexpdpができない

expdp username/password directory=hoge dumpfile=hoge.dmp
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39087: directory name HOGE is invalid
hogeディレクトリに出力しようとするもHOGEに書き出してしまう。
ディレクトリの指定に小文字を利用することもできるが、大文字で指定すべき。
調べてみたところ、usernameにwrite directory権限がなければ、書き込みができない。ただし、上記のようなエラーメッセージとなるため、わかりづらい。
impdpコマンドも実行できるよう
grant read, write on directory HOGE to username;
をDBA権限のあるユーザーで実行する必要がある。

Oracle Master Database 11g Bronze(1Z0-018:Bronze DBA11g)

を受験した。
「徹底攻略ORACLE MASTER Bronze DBA11g教科書[1Z0-018]対応 (ITプロ/ITエンジニアのための徹底攻略)」を隅々まで解いたこともあって、正解率75%で「1Z0-051 11gSQL基礎I」よりも簡単に合格することができ、1Z0-051とあわせてOracle Master Database 11g Bronze認定となった。
できれば、Oracle Databaseを自分の環境にインストールして、Enterprise Managerのインターフェイスは一通り触っておくとよいと思う。
把握しておくべき部分は次の通り。
・ブロック、エクステント、セグメントの違い
・データベースバッファキャッシュ、共有プール、ラージプールの違い
・SQLチューニング・アドバイザとSQLアクセス・アドバイザの違い
・完全リカバリと不完全リカバリ(Point in Time)の違い
・一貫性バックアップと非一貫性バックアップの違い

ORA-01950: no privileges on tablespace ‘(表領域名)’

該当の表領域を利用できる権限がないためにエラーが発生する。
create user username identified by “password“;
grant connect to username;
とするとデフォルト表領域の指定がないので、usernameのデフォルト表領域は、USERSとなる。
usernameでログインして、表を作成しようとするとconnectロールでは表が作成できないので、grant create table to usernameで別途CREATE TABLEシステム権限を付与してあげる必要がある。また、alter user username quota unlimited on tablespace で表領域に(例えば・・・)無制限割当をしてあげることで初めて、表が作成できる。

CentOSにOracle Database 11gを構築する

CentOSはサポート一覧にあるOSではないが、Redhat Linux互換なので、インストールすることができる。
OTNのアカウントを取得すれば、http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html からOracle Database 11g Release 2(11.2.0.1.0)をダウンロードできる。
/usr/local/srcにlinux_11gR2_database_1of2.zip、linux_11gR2_database_2of2.zipをダウンロードして、以下の手順で実際にインストールした。
1.インストールに必要なグループならびにユーザーを作成
groupadd oinstall
groupadd dba
useradd oracle -g oinstall -G dba
2.X Window Systemがインストールされていない場合には、レスポンスファイルを利用して、サイレントインストールを行うか、実際にX Window Systemをインストールする。
yum groupinstall “X Window System” “GNOME Desktop Environment”
ここからはOralce Universal Installerを利用したGUIインストールを前提とする。
3.依存関係のあるパッケージをインストールする
yum install gcc compat-libstdc++-33 elfutils-libelf-devel gcc-c++ libaio-devel sysstat unixODBC-devel pdksh
4./etc/sysctlをviで開き、以下のカーネルパラメータを追加する
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.sem = 25032000 100128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
kernel.sem=250 32000 100 128
5.sysctl -p で設定を反映する
6.ulimit -n 65536 コマンドを実行する
7.startx でX Window Systemを起動する
8.xhost hostname で接続を許可する
9.su oracle でユーザーをスイッチする
10.export DISPLAY=hostname:0.0 を実行する
11.以下のコマンドを実行し、Universal Installerを起動し、インストーラーに従ってインストールを行う。
cd /usr/local/src
unzip linux_11gR2_database_1of2.zip
unzip linux_11gR2_database_2of2.zip
cd database
./runInstaller
12.インストールが完了したら、インストーラーに従って、su rootでrootに戻り、以下のコマンドを実行した。
oraInventory/orainstRoot.sh
oracle/product/11.2.0/dbhome_1/root.sh
13.サービス起動時にデータベースを同時に起動するよう /etc/oratab を修正した。
orcl:/home/oracle/app/oracle/product/11.2.0/dbhome_1:Y
14.サービスが起動できるように oracleユーザーの.bash_profile を以下のように追記した。
export PATH
export ORACLE_BASE=/home/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
15.以下のコマンドをoracleユーザーで起動できることを確認する
lsnrctl start
emctl start dbconsole
16.自動起動スクリプトを /etc/init.d/dbora で作成する
作成方法は、先ほど紹介したサイレントモードインストール方法のサイトにあるスクリプトを参照してください。

俺のコードのどこが悪い?

俺のコードのどこが悪い?―コードレビューを攻略する40のルール
コードレビューに関する分野の書籍は珍しく先月発売された新書で、書店で平積みされていたので思わず手にとって買ってしまった。実際に読んでみると、どうすればコーディングミスを減らしたり、保守性を上げられるかについて、技術的なアプローチだけでなく仕掛けづくりについても書かれており、新人が読むための教育書という位置づけだけでなく、レビュアーも参照すべき一冊である。

7つの習慣

7つの習慣―成功には原則があった!
偏見というフィルターを通して物事を見ないこと。
主体性を持って物事に取り組むこと。
目的をもって行動すること。
優先順位をつけること。
Win-Winの関係で相手を信頼すること。条件に合わない場合には、取引を行わないという選択肢も検討すること。
自分を理解してもらうためには、まず相手を理解すること。
新しい知見を取り入れることができ、とても参考になった一冊である。
通勤時間に読むのが良いかもしれない。

CacheをMemcachedにするとエラーとなる

Memcachedをインストールしたうえで、cakePHPのcore.php設定ファイルにあるcache設定をengine => ‘File’ から engine=>’Memcache’に変更すると以下のエラーメッセージが表示されてしまう。
Warning (512): Cache not configured properly. Please check Cache::config(); in APP/config/core.php
デバッグして原因を調査したところ、php.ini に
extension=memcache.so
の設定がないためにMemcacheクラスが呼べなかったためだった。
エラーメッセージが適切?ではないために小一時間はまってしまった。
なお、memcache.soはphp-pecl-memcacheパッケージをインストールする必要がある。

Oracle Master Database 11g Bronze(1Z0-051:SQL基礎I)

を今日オンラインで受験した。
結果は、69点で何とか合格した。
SQL基礎だが、Oracle Database専用の文法などもあり、テクニカルエンジニア(データベース)を持っていても全く歯が立たない。
王道は、問題集を解きながら、実際にOracle Databaseを触るしかないというのが結論。
Oracle Master Bronze認定となるためには、1Z0-018J DBA 11gも合格しなければならない。

ORDER BY句におけるNULLの順番について

Mysqlでは、昇順(ASC)でORDER BYするとNULLは先頭に来る。降順の場合には、最後に来る。順番を逆にしたい場合には、COALESCE(列名, 型の最大値)を指定するなどの対応が必要である
一方で、Oracle Database 11gでは、昇順(ASC)でORDER BYするとNULLは最後に来る。降順の場合には、最初に来る。順番を逆にしたい場合には、NULLS FIRSTもしくはNULLS LASTを指定すればよい。