it技術:データベース:oracle
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
it技術:データベース:oracle [2018/08/11 10:18] – [Oracle 数値の後の記号の意味] yajuadmin | it技術:データベース:oracle [2020/02/04 15:20] (現在) – [大量データの削除] yajuadmin | ||
---|---|---|---|
行 13: | 行 13: | ||
* [[http:// | * [[http:// | ||
* [[https:// | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
==== XEの制限 ===== | ==== XEの制限 ===== | ||
XEの制限 XEには以下の制限があります。下記サイトのように再作成することでカスタマイズできます。\\ | XEの制限 XEには以下の制限があります。下記サイトのように再作成することでカスタマイズできます。\\ | ||
行 332: | 行 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 ==== | ||
=== 原因 === | === 原因 === | ||
行 357: | 行 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)のみとした。 | ||
===== その他 ===== | ===== その他 ===== | ||
==== バッチを作成する場合の注意 ==== | ==== バッチを作成する場合の注意 ==== | ||
行 376: | 行 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 ' | ||
</ | </ | ||
行 438: | 行 483: | ||
</ | </ | ||
+ | ==== 直近に実行されてSQLを取得する ==== | ||
+ | <code sql> | ||
+ | select last_active_time, | ||
+ | where parsing_schema_name <> ' | ||
+ | and parsing_schema_name <> ' | ||
+ | and parsing_schema_name <> ' | ||
+ | and parsing_schema_name <> ' | ||
+ | and parsing_schema_name <> ' | ||
+ | order by last_active_time desc | ||
+ | </ | ||
+ | |||
+ | しかし、SQL_TEXTは1000文字までしか保存されていないので、それ以上になる場合は上記SQLでSQL_IDがわかるのでそれを元に次のSQLを投げれる。 | ||
+ | |||
+ | <code sql> | ||
+ | -- 例 sql_id: | ||
+ | SELECT | ||
+ | sql_text | ||
+ | FROM | ||
+ | v$sqltext | ||
+ | WHERE | ||
+ | sql_id = ' | ||
+ | ORDER BY piece | ||
+ | </ | ||
+ | |||
+ | しかし、分割されて行にセットされるため。\\ | ||
+ | 結合する際に、末尾の空白が混在してしまうことに気をつけること。 | ||
+ | |||
+ | * [[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:// | ||
+ | |||
+ | ==== 表領域を減らす ==== | ||
+ | === 対応1 === | ||
+ | 不要なユーザーを削除する。それと一時表領域を縮小するために下記を実行する。 | ||
+ | < | ||
+ | select * from dba_temp_free_space; | ||
+ | |||
+ | alter tablespace TEMP shrink space keep 500M; | ||
+ | </ | ||
+ | [[https:// | ||
+ | |||
+ | === 対応2 === | ||
+ | UNDO領域を縮小する。\\ | ||
+ | [[https:// | ||
+ | |||
+ | < | ||
+ | -- システムユーザーで接続する | ||
+ | SQLPLUS sys/ | ||
+ | |||
+ | CREATE UNDO TABLESPACE UNDOTBS2 | ||
+ | DATAFILE ' | ||
+ | |||
+ | alter system set undo_tablespace = UNDOTBS2; | ||
+ | |||
+ | create undo tablespace UNDOTBS1 datafile ' | ||
+ | |||
+ | alter system set undo_tablespace = ' | ||
+ | |||
+ | drop tablespace UNDOTBS2 including contents cascade constraints; | ||
+ | |||
+ | 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)とは制限付きながら無償で商用利用できるデータベースソフトウエアです。\\ | ||
行 458: | 行 603: | ||
VisualStudioの場合にはNugetマネージャを起動して検索ウィンドウに「ODP.NET Managed Driver」と入力して参照を追加すれば使用できます。名前空間は「Oracle.ManagedDataAccess.*」となります。 | VisualStudioの場合にはNugetマネージャを起動して検索ウィンドウに「ODP.NET Managed Driver」と入力して参照を追加すれば使用できます。名前空間は「Oracle.ManagedDataAccess.*」となります。 | ||
+ | ===== データプロバイダが見つからない ====== | ||
+ | 64bit PCにて.NET framework 4.6を使用したアプリケーションで下記場所で「.Net Frameworkデータプロバイダが見つからない」エラーが発生する。 | ||
+ | <code vbnet> | ||
+ | DbProviderFactories.GetFactory(" | ||
+ | </ | ||
+ | |||
+ | OracleClientの64bit版「win64_11gR2_client.zip」をインストールしたが変わらない。\\ | ||
+ | ODAC 64bit版「ODAC112040Xcopy_64bit.zip」をインストールする。\\ | ||
+ | [[http:// | ||
+ | |||
+ | ダウンロードしたZipファイルを任意のディレクトリに展開し、展開したフォルダの中にあるinstall.batを実行するとインストールできます。ちなみに要管理者権限です。\\ | ||
+ | このinstall.batは以下の4つの引数をとります。\\ | ||
+ | [[https:// | ||
+ | < | ||
+ | install.bat odp.net4 [ORACLE_HOMEのパス] [ORACLE_HOME名] true | ||
+ | </ | ||
+ | ORACLE_HOME名は、レジストリ「HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\」で確認できる。\\ | ||
+ | これで「C: | ||
+ | 下記サイトを参考に、.NET 4.0版を手動で登録する。\\ | ||
+ | [[http:// | ||
===== Oracle12cについて ===== | ===== Oracle12cについて ===== | ||
・ユーザパスワードが大文字・小文字を識別設定について \\ | ・ユーザパスワードが大文字・小文字を識別設定について \\ |
it技術/データベース/oracle.1533950303.txt.gz · 最終更新: 2018/08/11 10:18 by yajuadmin