揮発性のメモ2

知識をメモ書きしておく

Oracle

ORA-12560

RAC構成で片系が死んでいるとき、ときどきエラーになる ORA-12560: TNS: プロトコル・アダプタ・エラーが発生しましたこのエラーが発生しているときは、内部でconnect()がエラーになっている。そのときの接続先が死んでいる系になっていたところまでは前に確…

あとでリトライした方がいいエラー

リトライしてもだいたい無意味。クエリとかデータ的におかしいから ORA-00001: 一意制約(HOGE.SYS_C0000001)に反しています ORA-00979: GROUP BYの式ではありません。 ORA-01400: ("HOGE"."PIYO"."FUGA")にはNULLは挿入できません。 ORA-01445: キー保存表な…

ノーアーカイブログモードに切り替えたい

10gR1 ノーアーカイブログ モード運用への移行 - オラクル・Oracleをマスターするための基本と仕組み ここを参考に、ノーアーカイブログモードに切り替えるテスト SQL> SHUTDOWN IMMEDIATE データベースがクローズされました。 データベースがディスマウント…

RAC構成のOracleで片系だけ管理者権限で接続できなくなったとき

http://www.oracle.co.jp/forum/thread.jspa?threadID=2001432 とおんなじような現象がおきたのでメモ 現象 管理者でTEST2には普通に接続できるが、TESTではアイドルインスタンスになってしまう。 (もう片方のノードではとくに問題ない) $ sqlplus sys/pas…

Cluster Ready Service が起動しないとき

Apr 19 09:25:20 oracle01 logger: (Oracle CRSD is running. CRSD must be terminated before another CRSD can be started) Apr 19 09:25:20 oracle01 su(pam_unix)[3404]: session opened for user oracle by (uid=0) Apr 19 09:25:20 oracle01 su(pam_un…

PDOを使って OracleでLIMITを実装する

前やった方法⇒OracleでLIMITを実装する - 揮発性のメモ これだと、副問い合わせ(インラインビュー)されるので、外部結合してカラム数が1000超えてるときとかにエラーになってしまう。 PDOを使う方法 SELECT a,b,c FROM hoge ORDER BY a LIMIT 10,20; $quer…

表の結合

ORA-01445: キー保存表なしに結合ビューからROWID を選択できません。 表を外部結合して列数が1050を超えるとエラーになる話。 ORA-01445が出るパターン SELECT hoge.*, piyo.* FROM hoge LEFT JOIN piyo ON hoge.id = piyo.id;Oracle語に変換すれば出なくな…

アーカイブ・ログのディスク使用量

SELECT SUM(BLOCKS*BLOCK_SIZE)/1024 || 'Kバイト' FROM v$archived_log WHERE deleted<>'YES'; たぶんこれで出る

crs_start

crs_start -all起動してないアプリを起動させる crs_stop -c oracle01指定したノードのアプリを停止させる

ORA-12560

RAC構成で片系が死んでいるとき、ときどきエラーになる ORA-12560: TNS: プロトコル・アダプタ・エラーが発生しましたstraceしてみる 21:05:23.894180 connect(4, {sa_family=AF_INET, sin_port=htons(1521), sin_addr=inet_addr("192.168.0.113")}, 16) = 0…

tnsnames.oraの位置

sqlplusは、どうもtnsnames.oraをいろんなところから参照するらしい。 とりあえず、$ORACLE_HOME/network/admin/tnsnames.ora 以外にも ./.tnsnames.ora と /etc/tnsnames.oraも参照するらしい。

bashのプロンプトに環境変数を出力する

PS1="[\u@\h \W]\\$ " [hoge@piyo hoge]$ lsプロンプトの先頭に環境変数を出力したいときは " " で囲ってしまうと展開されてしまうので ' ' で囲んで書き直す。 PS1='$ORACLE_SID[\u@\h \W]\$ ' HOGE[hoge@piyo hoge]$ lsこれで違うインスタンスにアクセスに…

週ごとの合計を出す

月の第何週ごとの集計を出すときは SELECT TO_CHAR(hdate,'YYYY-MM/w'), COUNT(*) as count FROM hoge GROUP BY TO_CHAR(hdate,'YYYY-MM/w') ORDER BY TO_CHAR(hdate,'YYYY-MM/w') 月またぎを無視して、とにかく週ごとの集計を出すときは SELECT TO_CHAR( TR…

GROUP BYの注意

GROUP BY を使うときは、フィールドが必ず一意になるように指定する必要があるMySQLでは許される書き方 SELECT a, b, c FROM hoge GROUP BY a MySQLなら、b と c を適当に表示してくれるが、Oracleでは許されない (ORA-00979: GROUP BYの式ではありません。…

無条件に成立する式

SELECT a,b,c FROM hoge WHERE 1=1 AND a>10 AND a<20 「無条件に成立する式」は、MySQLでは 1 で良かったが、Oracleでは 1=1でないと式にならない。

oci_fetch_array

oci_fetch_row($sth)はNULLの要素を返してくれないのでoci_fetch_array($sth,OCI_NUM|OCI_RETURN_NULLS)を使う http://manual.xwd.jp/function.oci-fetch-array.html

TNSの設定

複数のOracleサーバに接続する場合、tnsnames.oraに追加する HOGE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = hoge) ) ) PIYO = (DESCRIPTION = (ADDRESS_LIST =…

OracleでLIMITを実装する

OracleでMySQLのLimit句みたいのをやる。 (Study02.net) MySQLとかにあるLIMITをなるべく原型を留めてOracle用に書き換える SELECT a,b,c FROM hoge ORDER BY a LIMIT 10,20; ↓ SELECT * FROM ( SELECT rownum rnum, tmpt.* FROM ( SELECT a,b,c FROM hoge O…

oracleユーザーに対するシェル制限の設定

Oracle Secure Enterprise Searchクイック・インストレーション・ガイド /etc/security/limits.confに次の行を付け加える oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536全ユーザの設定を変える気はない…

OCIライブラリが初期化されていません

osqleditを起動するときに 「OCIライブラリが初期化されていません」と出る。 ⇒パスが狂ってるので、環境変数PATHにOracleインストール先を追加する hoge.bat PATH=%PATH%;D:\Oracle\product\10.1.0\Client_2\BIN osqledit.exe memo.sql

sqlplus

rlwrapがsqlplusでも使える。ナシの状態にはもう戻れないくらい便利。 http://d.hatena.ne.jp/kenhama/20061123/1164243568

TO_DATE

SELECT * FROM hoge WHERE date_val>TO_DATE('2007-06-01 14:14:59','yyyy-mm-dd hh24:mi:ss');

ORACLE_HOME

SunはOracleのOEMメーカーになるとかいう契約が10年くらいあるけど、どうなるんだろう 別にどうもならないか Message file sp1<lang>.msb not found SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory</lang>

今時rsh

rsh ホスト名 -l hogehoge ls -l動かないときは /etc/hosts.allow ~/.rhosts を見る