ユーザ用ツール

サイト用ツール


it技術:データベース:oracle

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
it技術:データベース:oracle [2019/01/28 10:47] – [複数列副問合せ] yajuadminit技術:データベース:oracle [2020/02/04 15:20] (現在) – [大量データの削除] yajuadmin
行 335: 行 335:
  
 ===== トラブル対応 ===== ===== トラブル対応 =====
 +==== 数秒で終わるはずのSQLがなぜか永遠に終わらない場合 ====
 +[[http://webmaid.blog.jp/archives/70282923.html|Oracleで、数秒で終わるはずのSQLがなぜか永遠に終わらない場合の対処方法]]
 +
 +=== 原因 ===
 +この現象の原因は、OracleのSHARED POOL(共有プール)にキャッシュされたSQL実行計画です。
 +
 +SQLがなぜか流れない、SQL文の"SELECT"や"WHERE"を1文字だけ変えてみて実行できるようになった場合は、ほぼこれが原因と考えてよいと思います。
 +
 +=== 対応 ===
 +キャッシュされたSQL実行計画を削除してあげればOKです。\\
 +Oracleの管理者権限で「ALTER SYSTEM FLUSH SHARED_POOL;」というSQLを実行してあげると、キャッシュされているSQL実行計画がすべて削除されます。実行後にOracleの再起動などは不要です。
 +
 +また、上記の構文を流さなくても、Oracleを再起動すればSHARED_POOLもクリアされます。
 +
 +※ただし、問題のSQLだけでなく、その他のSQLの実行計画も削除されてしまうので、他の処理のレスポンスも最初の1回はわずかに速度下がってしまうこともある。
 ==== ORA-00257 ==== ==== ORA-00257 ====
 === 原因 === === 原因 ===
行 360: 行 375:
 参考:[[http://qiita.com/yjnk/items/83312094d343a1c57f25|OracleでORA-00257が出た時のリカバリ]] 参考:[[http://qiita.com/yjnk/items/83312094d343a1c57f25|OracleでORA-00257が出た時のリカバリ]]
  
 +==== 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:\Oracle\product\11.2.0)に付与する、その後IISResetする。\\
 +https://codeday.me/jp/qa/20181218/76959.html
 +
 +==== Oracle.DataAccess.Clientの例外エラー ====
 +Oracle.DataAccess.Client.OracleConnection' のタイプ初期化子が例外をスローしました。\\ Oracle.DataAccess.Client.OracleException プロバイダは、このバージョンのOracleクライアントと互換性がありません
 +
 +=== 原因 ===
 +Oracle11Client(32bit)とOracle10Client(32bit)を混在してインストールしていた。
 +
 +=== 対応 ===
 +Oracle10Client(32bit)をアンインストールし、Oracle11Client(32bit)のみとした。
 ===== その他 ===== ===== その他 =====
 ==== バッチを作成する場合の注意 ==== ==== バッチを作成する場合の注意 ====
行 382: 行 424:
 [[https://qiita.com/lithtle/items/4517785c67843f601443|備忘録:SQLのINを複数列指定で使う]] [[https://qiita.com/lithtle/items/4517785c67843f601443|備忘録:SQLのINを複数列指定で使う]]
 ==== 日付型関連 ==== ==== 日付型関連 ====
-部材受入れシステムの最終更新日時(DATE型に変換)を取得する。+最終更新日時(DATE型に変換)を取得する。
  
 <code sql  最終更新日時の取得> <code sql  最終更新日時の取得>
-SELECT MAX(TO_DATE(EC || ' ' || ED, 'YYYYMMDD HH24MISS')) AS LATESTDATE FROM RESH003040+SELECT MAX(TO_DATE(EC || ' ' || ED, 'YYYYMMDD HH24MISS')) AS LATESTDATE FROM TEST
 </code> </code>
  
 部材受入れシステムの更新日時(DATE型から文字列変換)で抽出する。 部材受入れシステムの更新日時(DATE型から文字列変換)で抽出する。
 <code sql 更新日時で抽出> <code sql 更新日時で抽出>
-SELECT * FROM RESH003040+SELECT * FROM TEST
 WHERE EC || ED >= TO_CHAR(TIMESTAMP '2017-02-08 15:40:15', 'YYYYMMDDHH24MISS') WHERE EC || ED >= TO_CHAR(TIMESTAMP '2017-02-08 15:40:15', 'YYYYMMDDHH24MISS')
 </code> </code>
行 471: 行 513:
   * [[http://odakeiji.blog33.fc2.com/blog-entry-24.html|私が使うSQL文の捕まえ方&実行計画取得方法(後編)]]   * [[http://odakeiji.blog33.fc2.com/blog-entry-24.html|私が使うSQL文の捕まえ方&実行計画取得方法(後編)]]
   * [[http://odakeiji.blog33.fc2.com/blog-entry-119.html|Oracleで実行されたSQLのバインド変数の値を知る方法]]   * [[http://odakeiji.blog33.fc2.com/blog-entry-119.html|Oracleで実行されたSQLのバインド変数の値を知る方法]]
 +  * [[http://replication.hatenablog.com/entry/2015/06/08/090000|直近5分間に実行されたSQLを参照する]]
  
 ==== インデックスの断片率の確認 ==== ==== インデックスの断片率の確認 ====
行 537: 行 580:
 === DROP TABLE === === DROP TABLE ===
 テーブルを作成し直すデメリットがあるが、メリットはTRUNCATE同様になる。 テーブルを作成し直すデメリットがあるが、メリットはTRUNCATE同様になる。
 +
 +==== SQLパフォーマンス ====
 +[[https://www.oracle.com/technetwork/jp/ondemand/branch/120118-tuning-1503676-ja.pdf|入門!Oracleデータベース・解決パフォーマンスチューニング pdf]]
 ===== Oracle11g XE ===== ===== Oracle11g XE =====
 Oracle Database Express Edition(以下XE)とは制限付きながら無償で商用利用できるデータベースソフトウエアです。\\ Oracle Database Express Edition(以下XE)とは制限付きながら無償で商用利用できるデータベースソフトウエアです。\\
it技術/データベース/oracle.1548640066.txt.gz · 最終更新: 2019/01/28 10:47 by yajuadmin