Archive for the ‘oracle’ Category

Oracle日付をWHEREに指定する方法

木曜日, 6月 9th, 2011

WHERE句で、条件指定する値の側にもTO_DATEは付けられるのね。。。
基本を知っていれば分かりそうなものだが、
いざとなると書けないので覚書。

SQL> SELECT * FROM plan_table
WHERE timestamp > TO_DATE(‘2011/06/03’, ‘YYYY/MM/DD’)
ORDER BY timestamp;

ちなみに、時刻まで指定したければ

SQL> SELECT * FROM plan_table
WHERE timestamp > TO_DATE(‘2011/06/03 00:00:00’, ‘YYYY/MM/DD HH24:MI:SS’)
ORDER BY timestamp

ちなみに、今日のデータを対象にしたければ

SQL> SELECT * FROM plan_table
WHERE timestamp > TO_DATE(TO_CHAR(SYSDATE, ‘YYYY/MM/DD’), ‘YYYY/MM/DD’)
ORDER BY timestamp

#SYSDATEを使っている時点で、今日以降のデータなんてあり得ない。
 不等号を使っているので、今日以降という言い方ができるがあえて、
 今日のデータと表記した。

ORA-01114

木曜日, 5月 5th, 2011

ORA-01114: ファイル***(ブロック番号*)への書込みI/Oエラーが発生しました。
ORA-27072: skgfdisp: I/Oエラーが発生しました。
Linux Error: 28: No space left on device

SELECT文を流したときにこんなエラーが発生しました。

ググッて見る。


「ORA-01114: ファイル***(ブロック番号*)への書込みI/Oエラーが発生しました。」
について

こんな資料が見つかりました。
Oracle9iデータベース・エラー・メッセージ, リリース2(9.2) ←PDFです。
Oracle9iデータベース・エラー・メッセージ, リリース2(9.2) ←PDFです。
2011/08/31 リンク切れのため修正

3-32ページより該当部分を抜粋

ORA-01114 ファイル string(ブロック番号 string)への書込み
I/O エラーが発生しました。

原因 : ファイルが保存されているデバイスが、
オフラインになっている可能性があります。
そのファイルが一時ファイルの場合、
そのデバイスは領域不足である可能性があります。
これは、一時ファイルのディスク領域が、
ファイル作成時に割り当てられるとはかぎらないために
発生する場合があります。
処置処置処置処置 : デバイスへのアクセス権限を
正しく設定するか、または不要なファイルを削除して、
領域を解放してください。


Linux Error: 28: No space left on device

「No space left on device」の対応
ディスク空き容量が無くなっていました。

df -hでチェックしたら、
Oracleテンポラリで使用しているパーティションと同じところが
100%になっていました。

・テンポラリの場所を確認

SQL> select NAME from v$tempfile;
NAME
——————–
/u01/TEMP01.dbf

・容量を確認
[root@localhost root]# df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/*** 20G 19G 0 100% /u01

※一部情報を削っています。

u01が100%になっていました。


Oracleでテーブル名変更時の罠?

木曜日, 12月 3rd, 2009

PHP+Oracleのシステムの保守を担当して約1年が経ちました。
今までは主にpostgreSQLでしたので、違いに苦しみながら
またひとつ罠にかかりそうになりました。

それはテーブル名を変更です。

テーブル名を変更するには下記でできます。

ALTER TABLE 変更前テーブル名 RENAME TO 変更後テーブル名;

しかし、インデックスや主キーなど各種制約は変更されません。

そこで、制約を直すのも手ですが、忘れると嫌なので
オブジェクトブラウザで現在のSQLをコピーして
テーブル名だけ変えて、新しく作ったほうが簡単かな、と思ったりしました。

新しく作った後で、古いテーブルからデータをコピー

INSERT INTO 古いテーブル名
SELECT * FROM 新しいテーブル名;

古いテーブルを削除

DROP TABLE 古いテーブル名;

ちなみに、ひとつひとつ直していく方法もメモしておきます。

主キーを追加する。

ALTER TABLE テーブル名
ADD [ CONSTRAINT 主キー名 ]
PRIMARY KEY (列名1, 列名2 ..) ;

主キーを削除する。

ALTER TABLE テーブル名
DROP PRIMARY KEY;

新しいテーブルに対して
主キーを追加して、古いテーブルに対して、主キーを削除する。
という手順です。

■参考にさせていただいたサイト
テーブル定義の変更(列の追加、変更、削除) – オラクル・Oracle SQL 入門
(上記サイトのトップページ:SHIFT the Oracle )