ユーザ用ツール

サイト用ツール


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

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
it技術:データベース:oracle [2018/12/26 14:54] – [直近に実行されてSQLを取得する] yajuadminit技術:データベース:oracle [2019/01/28 10:48] – [日付型関連] yajuadmin
行 379: 行 379:
 ==== 複数列副問合せ ==== ==== 複数列副問合せ ====
 WHERE (DEPTNOとSAL)IN(SELECT DEPTNO,MAX(SAL) などのように、括弧で囲んで複数列指定する\\  WHERE (DEPTNOとSAL)IN(SELECT DEPTNO,MAX(SAL) などのように、括弧で囲んで複数列指定する\\ 
-http://itpro.nikkeibp.co.jp/article/COLUMN/20070914/281985/ +http://itpro.nikkeibp.co.jp/article/COLUMN/20070914/281985/\\ 
 +[[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>
行 472: 行 472:
   * [[http://odakeiji.blog33.fc2.com/blog-entry-119.html|Oracleで実行されたSQLのバインド変数の値を知る方法]]   * [[http://odakeiji.blog33.fc2.com/blog-entry-119.html|Oracleで実行されたSQLのバインド変数の値を知る方法]]
  
 +==== インデックスの断片率の確認 ====
 +統計情報を更新しないと、index_stats にはデータが存在しない。
 +
 +<code sql>
 +-- 統計情報の更新
 +ANALYZE INDEX インデックス名 VALIDATE STRUCTURE
 +
 +SELECT
 +    name AS "インデックス名"
 +  , height AS "インデックスの深さ"
 +  , lf_rows AS "リーフ行の数"
 +  , del_lf_rows  AS "削除リーフ行の数"
 +  , del_lf_rows / lf_rows AS "断片率"
 +FROM
 +  index_stats
 +WHERE
 +  name = '(インデックス名)'
 +</code>
 +
 +  * [[http://tihiro.hatenablog.com/entry/2017/08/31/120917|Oracleでインデックスの断片率を確認と再構築について。]]
 +  * [[http://fulfillment-c.com/database/index-fragmentation-stats/|索引(インデックス)の断片化の確認方法]]
 +
 +==== 表領域を減らす ====
 +=== 対応1 ===
 +不要なユーザーを削除する。それと一時表領域を縮小するために下記を実行する。
 +<code>
 +select * from dba_temp_free_space;
 +
 +alter tablespace TEMP shrink space keep 500M;
 +</code>
 +[[https://blog.wackwack.net/entry/2016/09/17/221810|ディスクを圧迫した一時表領域をオンラインのまま縮小する]]
 +
 +=== 対応2 ===
 +UNDO領域を縮小する。\\
 +[[https://yohei-a.hatenablog.jp/entry/20090804/1249380350|肥大した UNDO 表領域を縮小する]]
 +
 +<code>
 +-- システムユーザーで接続する
 +SQLPLUS sys/FufaHoge@TEST AS SYSDBA
 +
 +CREATE UNDO TABLESPACE UNDOTBS2
 +DATAFILE 'D:\oracle\product\11.2.0\FUGA\HOGE\UNDOTBS02.DBF' SIZE 4M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;
 +
 +alter system set undo_tablespace = UNDOTBS2;
 +
 +create undo tablespace UNDOTBS1 datafile 'D:\oracle\product\11.2.0\FUGA\HOGE\UNDOTBS01.DBF' size 100m reuse autoextend off;
 +
 +alter system set undo_tablespace = 'UNDOTBS1';
 +
 +drop tablespace UNDOTBS2 including contents cascade constraints;
 +
 +undotbs02.dbf を削除する。
 +</code>
 +
 +==== 大量データの削除 ====
 +大量データを削除する場合、DELETEする方法とTRUNCATEする方法またはDROP TABLEする方法がある。
 +=== DELETE ===
 +DELETEする方法はロールバックが効くメリットがあるが、デメリットとしてORACLEのハイウォーターマーク(HWM)に変化はなく一度確保した領域は解放されない。それにより、抽出条件を指定した場合に件数は減ったが速度は変わらないということが起こる。\\
 +[[https://www.dbsheetclient.jp/blog/?p=2026|DELETEと領域の解放(ORACLE)]]
 +
 +=== TRUNCATE ===
 +TRUNCATEする方法はデメリットとしてロールバックが効かない上に全件削除されるため、必要なデータを後で挿入する。メリットとして領域を解放してくれるため、件数が減ったら抽出条件を指定しても速くなる。
  
 +=== DROP TABLE ===
 +テーブルを作成し直すデメリットがあるが、メリットはTRUNCATE同様になる。
 ===== Oracle11g XE ===== ===== Oracle11g XE =====
 Oracle Database Express Edition(以下XE)とは制限付きながら無償で商用利用できるデータベースソフトウエアです。\\ Oracle Database Express Edition(以下XE)とは制限付きながら無償で商用利用できるデータベースソフトウエアです。\\
it技術/データベース/oracle.txt · 最終更新: 2020/02/04 15:20 by yajuadmin