it技術:データベース:oracle
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| it技術:データベース:oracle [2018/12/26 15:00] – [直近に実行されてSQLを取得する] yajuadmin | it技術:データベース:oracle [2020/02/04 15:20] (現在) – [大量データの削除] yajuadmin | ||
|---|---|---|---|
| 行 335: | 行 335: | ||
| ===== トラブル対応 ===== | ===== トラブル対応 ===== | ||
| + | ==== 数秒で終わるはずのSQLがなぜか永遠に終わらない場合 ==== | ||
| + | [[http:// | ||
| + | |||
| + | === 原因 === | ||
| + | この現象の原因は、OracleのSHARED POOL(共有プール)にキャッシュされたSQL実行計画です。 | ||
| + | |||
| + | SQLがなぜか流れない、SQL文の" | ||
| + | |||
| + | === 対応 === | ||
| + | キャッシュされたSQL実行計画を削除してあげればOKです。\\ | ||
| + | Oracleの管理者権限で「ALTER SYSTEM FLUSH SHARED_POOL; | ||
| + | |||
| + | また、上記の構文を流さなくても、Oracleを再起動すればSHARED_POOLもクリアされます。 | ||
| + | |||
| + | ※ただし、問題のSQLだけでなく、その他のSQLの実行計画も削除されてしまうので、他の処理のレスポンスも最初の1回はわずかに速度下がってしまうこともある。 | ||
| ==== ORA-00257 ==== | ==== ORA-00257 ==== | ||
| === 原因 === | === 原因 === | ||
| 行 360: | 行 375: | ||
| 参考: | 参考: | ||
| + | ==== ORA-12504 ==== | ||
| + | ORA-12504: TNS: リスナーはCONNECT_DATAのSERVICE_NAMEを取得できませんでした。 | ||
| + | |||
| + | === 原因 === | ||
| + | DataSourceに指定する内容が間違っており、ホスト名のIPアドレスを指定しまっていた。 | ||
| + | |||
| + | === 対応 === | ||
| + | DataSourceにTNSネーム(XE)を指定した。 | ||
| + | |||
| + | ==== System.Data.OracleClientの例外エラー ==== | ||
| + | System.Data.OracleClient には Oracle クライアント ソフトウェア バージョン 8.1.7 以降が必要です。 | ||
| + | |||
| + | === 原因 === | ||
| + | ASP.NETからOracleにアクセスする権限がない。 | ||
| + | |||
| + | === 対応 === | ||
| + | Authenticated Usersグループ権限をOracleホーム・ディレクトリ(D: | ||
| + | https:// | ||
| + | |||
| + | ==== Oracle.DataAccess.Clientの例外エラー ==== | ||
| + | Oracle.DataAccess.Client.OracleConnection' | ||
| + | |||
| + | === 原因 === | ||
| + | Oracle11Client(32bit)とOracle10Client(32bit)を混在してインストールしていた。 | ||
| + | |||
| + | === 対応 === | ||
| + | Oracle10Client(32bit)をアンインストールし、Oracle11Client(32bit)のみとした。 | ||
| ===== その他 ===== | ===== その他 ===== | ||
| ==== バッチを作成する場合の注意 ==== | ==== バッチを作成する場合の注意 ==== | ||
| 行 379: | 行 421: | ||
| ==== 複数列副問合せ ==== | ==== 複数列副問合せ ==== | ||
| WHERE (DEPTNOとSAL)IN(SELECT DEPTNO, | WHERE (DEPTNOとSAL)IN(SELECT DEPTNO, | ||
| - | http:// | + | http:// |
| + | [[https:// | ||
| ==== 日付型関連 ==== | ==== 日付型関連 ==== | ||
| - | 部材受入れシステムの最終更新日時(DATE型に変換)を取得する。 | + | 最終更新日時(DATE型に変換)を取得する。 |
| <code sql 最終更新日時の取得> | <code sql 最終更新日時の取得> | ||
| - | SELECT MAX(TO_DATE(EC || ' ' || ED, ' | + | SELECT MAX(TO_DATE(EC || ' ' || ED, ' |
| </ | </ | ||
| 部材受入れシステムの更新日時(DATE型から文字列変換)で抽出する。 | 部材受入れシステムの更新日時(DATE型から文字列変換)で抽出する。 | ||
| <code sql 更新日時で抽出> | <code sql 更新日時で抽出> | ||
| - | SELECT * FROM RESH003040 | + | SELECT * FROM TEST |
| WHERE EC || ED >= TO_CHAR(TIMESTAMP ' | WHERE EC || ED >= TO_CHAR(TIMESTAMP ' | ||
| </ | </ | ||
| 行 471: | 行 513: | ||
| * [[http:// | * [[http:// | ||
| * [[http:// | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | ==== インデックスの断片率の確認 ==== | ||
| + | 統計情報を更新しないと、index_stats にはデータが存在しない。 | ||
| + | |||
| + | <code sql> | ||
| + | -- 統計情報の更新 | ||
| + | ANALYZE INDEX インデックス名 VALIDATE STRUCTURE | ||
| + | |||
| + | SELECT | ||
| + | name AS " | ||
| + | , height AS " | ||
| + | , lf_rows AS " | ||
| + | , del_lf_rows | ||
| + | , del_lf_rows / lf_rows AS " | ||
| + | FROM | ||
| + | index_stats | ||
| + | WHERE | ||
| + | name = ' | ||
| + | </ | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
| ==== 表領域を減らす ==== | ==== 表領域を減らす ==== | ||
| 行 503: | 行 568: | ||
| undotbs02.dbf を削除する。 | undotbs02.dbf を削除する。 | ||
| </ | </ | ||
| + | |||
| + | ==== 大量データの削除 ==== | ||
| + | 大量データを削除する場合、DELETEする方法とTRUNCATEする方法またはDROP TABLEする方法がある。 | ||
| + | === DELETE === | ||
| + | DELETEする方法はロールバックが効くメリットがあるが、デメリットとしてORACLEのハイウォーターマーク(HWM)に変化はなく一度確保した領域は解放されない。それにより、抽出条件を指定した場合に件数は減ったが速度は変わらないということが起こる。\\ | ||
| + | [[https:// | ||
| + | |||
| + | === TRUNCATE === | ||
| + | TRUNCATEする方法はデメリットとしてロールバックが効かない上に全件削除されるため、必要なデータを後で挿入する。メリットとして領域を解放してくれるため、件数が減ったら抽出条件を指定しても速くなる。 | ||
| + | |||
| + | === DROP TABLE === | ||
| + | テーブルを作成し直すデメリットがあるが、メリットはTRUNCATE同様になる。 | ||
| + | |||
| + | ==== SQLパフォーマンス ==== | ||
| + | [[https:// | ||
| ===== Oracle11g XE ===== | ===== Oracle11g XE ===== | ||
| Oracle Database Express Edition(以下XE)とは制限付きながら無償で商用利用できるデータベースソフトウエアです。\\ | Oracle Database Express Edition(以下XE)とは制限付きながら無償で商用利用できるデータベースソフトウエアです。\\ | ||
it技術/データベース/oracle.1545804016.txt.gz · 最終更新: 2018/12/26 15:00 by yajuadmin
