it技術:データベース:oracle
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
it技術:データベース:oracle [2017/04/03 16:32] – [XEの制限] yajuadmin | it技術:データベース:oracle [2019/04/04 10:37] – [直近に実行されてSQLを取得する] yajuadmin | ||
---|---|---|---|
行 3: | 行 3: | ||
^i|8i, | ^i|8i, | ||
^g|10g, | ^g|10g, | ||
- | ^c|12cで使用された、「Cloud」の先頭文字| | + | ^c|12c,18cで使用された、「Cloud」の先頭文字| |
===== オラクルサービスの再起動方法 ===== | ===== オラクルサービスの再起動方法 ===== | ||
行 11: | 行 11: | ||
===== Oracle11g XE ===== | ===== Oracle11g XE ===== | ||
Oracle Database Express Edition(以下XE)とは制限付きながら無償で商用利用できるデータベースソフトウエアです。\\ | Oracle Database Express Edition(以下XE)とは制限付きながら無償で商用利用できるデータベースソフトウエアです。\\ | ||
- | [[http:// | + | * [[http:// |
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
==== XEの制限 ===== | ==== XEの制限 ===== | ||
XEの制限 XEには以下の制限があります。下記サイトのように再作成することでカスタマイズできます。\\ | XEの制限 XEには以下の制限があります。下記サイトのように再作成することでカスタマイズできます。\\ | ||
- | [[http:// | + | [[http:// |
* CPUリソースは1CPU(1core)相当分まで | * CPUリソースは1CPU(1core)相当分まで | ||
行 21: | 行 24: | ||
* ユーザ表領域(SYSTEMやSYSAUXの表領域は含まない)のサイズは10g版は4GB、11g版は11GBまで | * ユーザ表領域(SYSTEMやSYSAUXの表領域は含まない)のサイズは10g版は4GB、11g版は11GBまで | ||
* インストール時にDBのSID(XE)とORACLE_HOMEが固定される(複数のデータベースやソフトウエアのインストールはできない) | * インストール時にDBのSID(XE)とORACLE_HOMEが固定される(複数のデータベースやソフトウエアのインストールはできない) | ||
+ | * 文字コードは「AL32UTF8」 | ||
===== パッチを当てる ===== | ===== パッチを当てる ===== | ||
行 88: | 行 92: | ||
開発上フォルダ名を「機能ID(機能名)」としていたため、フォルダの括弧は外すように対応しました。 | 開発上フォルダ名を「機能ID(機能名)」としていたため、フォルダの括弧は外すように対応しました。 | ||
+ | ==== 半角スペース有りの文字列比較 ==== | ||
+ | [[http:// | ||
+ | |||
+ | 以下の2つのセマンティクスがあること\\ | ||
+ | - 非空白埋め比較セマンティクス \\ 比較する文字列のどちらかが(もしくはどちらも)VARCHAR2の場合 | ||
+ | - 空白埋め比較セマンティクス \\ 比較する文字列のどちらもCHAR(またはリテラル)の場合 | ||
+ | |||
+ | 1の場合、半角スペースは見た目そのままの扱いで検索されます。\\ | ||
+ | 2の場合、半角スペースは無視されたように検索されます。\\ | ||
+ | [[http:// | ||
+ | |||
+ | ※SQLServerではWHERE条件時のvarchar型の末尾空白は無視される。[[IT技術: | ||
===== 副問い合わせ(EXISTS)を使った更新(UPDATE)の注意 ===== | ===== 副問い合わせ(EXISTS)を使った更新(UPDATE)の注意 ===== | ||
売上取り消し処理が遅いということで調査していたのですが、構文をみても単純である為、なかなか気がつきませんでした。 | 売上取り消し処理が遅いということで調査していたのですが、構文をみても単純である為、なかなか気がつきませんでした。 | ||
行 344: | 行 360: | ||
参考: | 参考: | ||
+ | ==== 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)のみとした。 | ||
===== その他 ===== | ===== その他 ===== | ||
==== バッチを作成する場合の注意 ==== | ==== バッチを作成する場合の注意 ==== | ||
行 358: | 行 401: | ||
</ | </ | ||
+ | |||
+ | |||
+ | ===== Tips ===== | ||
==== 複数列副問合せ ==== | ==== 複数列副問合せ ==== | ||
WHERE (DEPTNOとSAL)IN(SELECT DEPTNO, | WHERE (DEPTNOとSAL)IN(SELECT DEPTNO, | ||
- | http:// | + | http:// |
+ | [[https:// | ||
+ | ==== 日付型関連 ==== | ||
+ | 最終更新日時(DATE型に変換)を取得する。 | ||
+ | |||
+ | <code sql 最終更新日時の取得> | ||
+ | SELECT MAX(TO_DATE(EC || ' ' || ED, ' | ||
+ | </ | ||
+ | |||
+ | 部材受入れシステムの更新日時(DATE型から文字列変換)で抽出する。 | ||
+ | <code sql 更新日時で抽出> | ||
+ | SELECT * FROM TEST | ||
+ | WHERE EC || ED >= TO_CHAR(TIMESTAMP ' | ||
+ | </ | ||
+ | 参照 | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | ==== 半角スペース有りの文字列比較 ==== | ||
+ | [[http:// | ||
+ | |||
+ | 以下の2つのセマンティクスがあること\\ | ||
+ | - 非空白埋め比較セマンティクス \\ 比較する文字列のどちらかが(もしくはどちらも)VARCHAR2の場合 | ||
+ | - 空白埋め比較セマンティクス \\ 比較する文字列のどちらもCHAR(またはリテラル)の場合 | ||
+ | |||
+ | 1の場合、半角スペースは見た目そのままの扱いで検索されます。\\ | ||
+ | 2の場合、半角スペースは無視されたように検索されます。\\ | ||
+ | [[http:// | ||
+ | |||
+ | ※SQLServerではWHERE条件時のvarchar型の末尾空白は無視される。[[開発: | ||
+ | |||
+ | ==== 1レコード前の日時差を求める ==== | ||
+ | 阿南部品からロス重量実績システムで2回同じのを登録してしまったとの削除依頼の問合せがくる。\\ | ||
+ | よって、グループ単位の1レコード前の差が10分以内のを抽出するSQLを作成した。\\ | ||
+ | [[http:// | ||
+ | |||
+ | <code sql 1コード前日時差取得> | ||
+ | SELECT B.*, TRUNC((WORK_DATE - PRE_WORK_DATE) * 24*60*60) AS DIFF | ||
+ | FROM( | ||
+ | SELECT A.*, | ||
+ | LAG(WORK_DATE) OVER(partition by KOUTEI_CD, | ||
+ | FROM HJ_WASTE A | ||
+ | WHERE TRUNC(A.WORK_DATE) >= TO_DATE(' | ||
+ | ) B | ||
+ | WHERE CNT > 1 AND TRUNC((WORK_DATE - PRE_WORK_DATE) * 24*60*60) <= 60*10 -- 秒単位なので60秒x10=600秒=10分 | ||
+ | ORDER BY WORK_DATE | ||
+ | </ | ||
+ | |||
+ | ==== アカウントロックした場合の対処 ==== | ||
+ | |||
+ | '' | ||
+ | |||
+ | ==== 全てのテーブル件数の取得 ==== | ||
+ | [[http:// | ||
+ | |||
+ | Analyze後の件数なので正確ではない、大まかな件数の把握向け。 | ||
+ | <code sql> | ||
+ | SELECT T.TABLE_NAME, | ||
+ | FROM USER_TABLES T, USER_TAB_COMMENTS C | ||
+ | WHERE C.TABLE_NAME(+)=T.TABLE_NAME | ||
+ | </ | ||
+ | |||
+ | ==== 直近に実行されて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同様になる。 | ||
+ | ===== Oracle11g XE ===== | ||
+ | Oracle Database Express Edition(以下XE)とは制限付きながら無償で商用利用できるデータベースソフトウエアです。\\ | ||
+ | [[http:// | ||
+ | ==== XEの制限 ===== | ||
+ | XEの制限 XEには以下の制限があります。下記サイトのように再作成することでカスタマイズできます。\\ | ||
+ | [[http:// | ||
+ | |||
+ | * CPUリソースは1CPU(1core)相当分まで | ||
+ | * SGAとPGAのメモリパラメータ値は合計1GBまで | ||
+ | * ユーザ表領域(SYSTEMやSYSAUXの表領域は含まない)のサイズは10g版は4GB、11g版は11GBまで | ||
+ | * インストール時にDBのSID(XE)とORACLE_HOMEが固定される(複数のデータベースやソフトウエアのインストールはできない) | ||
+ | * 文字コードは「AL32UTF8」 | ||
+ | |||
+ | ※WH_KOUSEIの文字コードは「AL32UTF8」なので変更不要 | ||
+ | |||
+ | ===== ODP.NET Managed Driver ====== | ||
+ | 「ODP.NET Managed Driver」なら、クライアントPCにOracleクライアントのインストールが不要となる。 | ||
+ | |||
+ | 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について ===== | ||
+ | ・ユーザパスワードが大文字・小文字を識別設定について \\ | ||
+ | 元々のパスワードが大文字・小文字を複合しているパスワードの場合、大文字・小文字の識別設定を「False」にすると正しく入力しても違うパスワードと判定してしまう。 | ||
+ | |||
+ | ==== プラカブルデータベース(PDB)の追加制限について ==== | ||
+ | PDBに関してはStandard Editionで作成を行うと1つしか作成できない。 | ||
+ | 作成制限については下記URLを参照 | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | ==== Enterprise Managerについて ==== | ||
+ | Oracle9i, | ||
+ | 「Enterprise Manager」に接続するために「https:// | ||
+ | ※Flashのインストールが必須(表示に必要) | ||
+ | |||
+ | ==== クライアントバージョンのサポート状況 ==== | ||
+ | [[http:// | ||
+ | |||
+ | Oracle12cで、サポート外のoracle.dataaccess.dll 2.102.4.0を使用すると、「Oracle.DataAccess .Client.OracleConnection' | ||
+ | |||
+ | ^ ^ サーバーバージョン | ||
+ | ^ クライアント^ 12.2.0# | ||
+ | ^ 12.2.0 | ||
+ | ^ 12.1.0 | ||
+ | ^ 11.2.0 | ||
+ | ^ 11.1.0 | ||
+ | ^ 10.2.0 | ||
+ | |||
+ | ^Key^^ | ||
+ | |Yes|サポートされます。| | ||
+ | |ES|サポートされます。但し、Extended Support契約を有する場合のみ不具合の修正が可能になります。| | ||
+ | |LES または MDS|サポートされます。但し、有効な Limited Extended Support または Market-Driven Support 契約を有する場合のみ不具合の修正が可能になります。| | ||
+ | |Was|以前、この組み合わせはサポートされていましたが、現在は、このリリースのいずれもPremier Support、Primary Error Correct Support、Extended Support、Extended Maintenance Supportでカバーされていないため、不具合の修正は行われません。| | ||
+ | |NO|サポートされていません。| | ||
+ | |||
+ | ^注釈^^ | ||
+ | |# | ||
+ | |# | ||
+ | |#10|Oracle Database Exadata Express Cloud Service を含みます。| | ||
+ |
it技術/データベース/oracle.txt · 最終更新: 2020/02/04 15:20 by yajuadmin