sql >> データベース >  >> RDS >> Oracle

Oracleデータベースのテーブルサイズを確認するためのクエリ

    その特定のOracleテーブルの大きさを調べる必要があることがよくあります。大量のデータをロードし、割り当てられたOracleテーブルのサイズを知りたいとします。

    以下のクエリを使用して、Oracleのテーブルサイズを確認できます

    MB単位のOracleテーブルサイズの場合

    select
    owner as "Schema"
    , segment_name as "Object Name"
    , segment_type as "Object Type"
    , round(bytes/1024/1024,2) as "Object Size (Mb)"
    , tablespace_name as "Tablespace"
    from dba_segments
    where segment_name=’<table_name>’
    and owner='<Table owner>';
    

    GB単位のOracleテーブルサイズの場合

    select
    owner as "Schema"
    , segment_name as "Object Name"
    , segment_type as "Object Type"
    , round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
    , tablespace_name as "Tablespace"
    from dba_segments
    where segment_name=’<table_name>’
    and owner='<Table owner>'
    and owner='<Table owner>';
    

    dba_segmentsにアクセスできない場合は、user_segmentsも使用できます

    MB単位のサイズ

    select segment_name as "Object Name"
    , segment_type as "Object Type"
    , round(bytes/1024/1024,2) as "Object Size (Mb)"
    , tablespace_name as "Tablespace"
    from user_segments
    where segment_name=’<table_name>’
    

    GB単位のサイズ

    select
    segment_name as "Object Name"
    , segment_type as "Object Type"
    , round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
    , tablespace_name as "Tablespace"
    from user_segments
    where segment_name=’<table_name>’;
    

    このクエリを使用して、特定のスキーマまたはテーブルスペースで最大の上位10個のテーブルを見つけることもできます

    特定のスキーマの上位10の大きなテーブル

    select * from (select
    owner as "Schema"
    , segment_name as "Object Name"
    , segment_type as "Object Type"
    , round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
    , tablespace_name as "Tablespace"
    from dba_segments
    where owner=’<schema>’  and segment_type='TABLE' order by 4 desc)  where rownum < 11;
    

    特定のテーブルスペースの上位10の大きなテーブル

    select * from (select
    owner as "Schema"
    , segment_name as "Object Name"
    , segment_type as "Object Type"
    , round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
    , tablespace_name as "Tablespace"
    from dba_segments
    where tablespace_name =’<tablespace name>' and segment_name='TABLE' order by 4 desc ) where rownum <11;
    

    10Gより大きいテーブルを一覧表示する

    select
    owner as "Schema"
    , segment_name as "Object Name"
    , segment_type as "Object Type"
    , round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
    , tablespace_name as "Tablespace"
    from dba_segments
    where segment_type='TABLE' where bytes/1024/1024/1024 >10  order by 4 desc;
    

    テーブルのインデックスに関連付けられているスペースも知りたい場合のクエリです

    with tables
    as
    (
    select segment_name tname, to_char(bytes/1024/1024,'999,999.99') table_size
    from user_segments
    where segment_type = 'TABLE'
    and segment_name not like 'BIN%'
    ),
    indexes
    as
    (
    select table_name, index_name, scbp, rn,
    (select to_char(bytes/1024/1024,'999,999.99') from user_segments where segment_name = INDEX_NAME and segment_type = 'INDEX') index_size
    from (
    select table_name, index_name,
    substr( max(sys_connect_by_path( column_name, ', ' )), 3) scbp,
    row_number() over (partition by table_name order by index_name) rn
    from user_ind_columns
    start with column_position = 1
    connect by prior table_name = table_name
    and prior index_name = index_name
    and prior column_position+1 = column_position
    group by table_name, index_name
    )
    )
    select decode( nvl(rn,1), 1, tables.tname ) tname,
    decode( nvl(rn,1), 1, tables.table_size ) table_size,
    rn "INDEX#",
    indexes.scbp,
    indexes.index_name,
    indexes.index_size
    from tables, indexes
    where tables.tname = indexes.table_name(+)
    and tables.tname = '&1'
    order by tables.tname, indexes.rn
    /

    特定のスキーマのテーブルサイズの合計

    select owner,sum(bytes)/1024/1024/1024 as "SIZE in GB" from dba_segments where owner='SCHEMA_NAME' and segment_type='TABLE' group by owner;

    上記のクエリは、データベースに割り当てられたスペースを提供します。テーブルによって消費される行スペースに関心がある場合は、以下のクエリを使用できます

    select round((num_rows*avg_row_len/1024),2) used_space_bytes from dba_tables where table_name ='<table name>'
    and table_owner='<table owner';

    このクエリは、テーブルの統計が生成された後に実行する必要があります。

    一定期間のテーブルのスペース使用量またはオブジェクトの増加傾向に関心がある場合は、以下のクエリを使用できます

    select * from table(dbms_space.OBJECT_GROWTH_TREND('<table owner>','<table name>','TABLE'));
    
    Example
    SQL> select * from table(dbms_space.OBJECT_GROWTH_TREND('SCOTT','EMP_DATA','TABLE'));
    TIMEPOINT SPACE_USAGE SPACE_ALLOC QUALITY
    ---------------------- ---------- ------------ --------
    05-JUN-19 08.59.45.214446 AM 210979117 225829120 INTERPOLATED
    06-JUN-19 08.59.45.214446 AM 210979117 225829120 INTERPOLATED
    07-JUN-19 08.59.45.214446 AM 210979117 225829120 INTERPOLATED

    LOBセグメントを含むテーブルのサイズを計算する方法

    テーブルのDBA_SEGMENTSのBYTES列から選択すると、テーブルセグメントが表示されますが、LOB(CLOBまたはBLOB)セグメントのサイズは含まれません。
    テーブルと関連するLOBSセグメントの合計サイズを計算するには、次の合計が必要です。発生:
    テーブルのバイト=>dba_segmentsから
    +
    LOBセグメントのバイト=>dba_lobsおよびdba_segmentsから(segment_typeはLOBSEGMENT
    +
    LOBインデックス(Lob Locator)のバイト数=dba_indexesおよびdba_segmentsから

    以下のクエリを使用して、合計サイズを計算できます

    ACCEPT SCHEMA PROMPT 'Table Owner: '
    ACCEPT TABNAME PROMPT 'Table Name: '
    SELECT
    (SELECT SUM(S.BYTES)
    FROM DBA_SEGMENTS S
    WHERE S.OWNER = UPPER('&SCHEMA') AND
    (S.SEGMENT_NAME = UPPER('&TABNAME'))) +
    (SELECT SUM(S.BYTES)
    FROM DBA_SEGMENTS S, DBA_LOBS L
    WHERE S.OWNER = UPPER('&SCHEMA') AND
    (L.SEGMENT_NAME = S.SEGMENT_NAME AND L.TABLE_NAME = UPPER('&TABNAME') AND L.OWNER = UPPER('&SCHEMA'))) +
    (SELECT SUM(S.BYTES)
    FROM DBA_SEGMENTS S, DBA_INDEXES I
    WHERE S.OWNER = UPPER('&SCHEMA') AND
    (I.INDEX_NAME = S.SEGMENT_NAME AND I.TABLE_NAME = UPPER('&TABNAME') AND INDEX_TYPE = 'LOB' AND I.OWNER = UPPER('&SCHEMA')))
    "TOTAL TABLE SIZE"
    FROM DUAL;

    Oracleデータベースでテーブルサイズを確認する方法に関するこの記事を気に入っていただければ幸いです。さまざまなクエリを用意しており、必要に応じてご利用いただけます。フィードバックを提供してください

    関連記事

    Oracleでテーブルスペースをチェックする方法:Oracleでテーブルスペースをチェックする方法、テーブルスペースの空き領域、テーブルスペースの拡張情報、テーブルスペースのサイズ、関連データファイル、テーブルスペースのサイズについて学習する
    Oracleのテーブルの変更:Oracleのテーブルの変更は変更に使用されますカラム、制約の削除と追加、テーブルカラムのデータタイプの変更、テーブルストレージパラメータの変更
    oracleでのテーブルの作成:テーブルは、Oracleデータベースのデータストレージの基本単位です。 Oraclecreatetableコマンドを使用して外部キー/主キーを使用してテーブルを作成する方法について説明します。
    altertableadd column oracle:table addcolumnoracleを変更する方法に関する有用な洞察。 Oracle11gで導入された高速追加列機能の詳細
    質問の質問
    Oracleの最高水準点:Oracleデータベースの最高水準点は、Oracleのライフサイクルでこれまでに使用されたブロックを示すために使用されます。 oracle table
    ora-00942:ORA-00942テーブルまたはビューがOracleデータベースに存在しない場合のトラブルシューティング方法を学習します。エラーを短時間で解決する簡単な方法

    推奨コース

    OracleSQLの優れたUdemyコースは次のとおりです。
    Oracle-Sql-ステップバイステップ:このコースでは、基本的なSQL、結合、テーブルの作成とその構造の変更、ビューの作成、ユニオン、ユニオンなどすべてについて説明します。 。 SQL初心者のための素晴らしいコースと必須のコース
    完全なOracleSQL認定コース :これは、SQL開発者のスキルに対応できるようになりたい人にとっては良いコースです。わかりやすい説明コース
    OracleSQLDeveloper:Essentials、Tips and Tricks :OracleSql開発者ツールは多くの開発者によって使用されています。このコースでは、それを効果的に使用して生産的なSQL開発者になるための秘訣とレッスンを提供します。
    Oracle SQL Performance Tuning Masterclass 2020 :パフォーマンスの調整は、重要で最も求められているスキルの1つです。これは、それについて学び、SQLパフォーマンスの調整を開始するための良いコースです


    1. T-SQLの週番号から日付を取得する

    2. MySQL-クエリの速度をテストするためにキャッシュを使用しないように強制する

    3. PythonとSQLiteの警告

    4. MicrosoftAccessのデザインビューでテーブルを開く方法