SELECT SUM(BLOCKS*BLOCK_SIZE)/1024 || 'Kバイト' FROM v$archived_log WHERE deleted<>'YES';
たぶんこれで出る
SELECT SUM(BLOCKS*BLOCK_SIZE)/1024 || 'Kバイト' FROM v$archived_log WHERE deleted<>'YES';
たぶんこれで出る
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 21:05:23.895863 getsockname(4, {sa_family=AF_INET, sin_port=htons(32908), sin_addr=inet_addr("192.168.0.118")}, [16]) = 0 ... 21:05:23.908921 connect(4, {sa_family=AF_INET, sin_port=htons(1521), sin_addr=inet_addr("192.168.0.116")}, 16) = -1 EHOSTUNREACH (No route to host) 21:05:26.910766 close(4) = 0
192.168.0.113 生きている側(仮想)
192.168.0.114 死んでいる側(仮想)(生きている側に振りなおされている)
192.168.0.115 生きている側(本当)
192.168.0.116 死んでいる側(本当)
192.168.0.118 クライアント
ときどき死んでいる側の方の本当のIPにアクセスにいっている
sqlplusは、どうもtnsnames.oraをいろんなところから参照するらしい。
とりあえず、$ORACLE_HOME/network/admin/tnsnames.ora 以外にも
./.tnsnames.ora と /etc/tnsnames.oraも参照するらしい。
月の第何週ごとの集計を出すときは
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( TRUNC(hdate,'DAY'),'YYYY-MM-DD'), COUNT(*) as count FROM hoge GROUP BY TRUNC(hdate,'DAY') ORDER BY TRUNC(hdate,'DAY')
数値型や日付型などを文字列に変換する関数
TO_CHAR(hdate,'YYYY-MM/w') は、年/月-週 に変換する
('w'は日曜始まりではなく、その月の一日からの経過日数で出される)
数値型や日付型などを切り詰める関数
TRUNC(hdate,'DAY') は、直前の日曜日の日付に変換する
GROUP BY を使うときは、フィールドが必ず一意になるように指定する必要がある
MySQLでは許される書き方
SELECT a, b, c FROM hoge GROUP BY a
MySQLなら、b と c を適当に表示してくれるが、Oracleでは許されない
(ORA-00979: GROUP BYの式ではありません。)
Oracleでは次のようにする
SELECT a, MAX(b), MAX(c) FROM hoge GROUP BY a
ORDER BY でも同様に、一意になるものを指定する
SELECT a, MAX(b), MAX(c) FROM hoge GROUP BY a ORDER BY a, MAX(b)