次の手順を使用してテーブルスペースのサイズを推定しようとしています: スキーマオブジェクトのスペース推定
そして、私はいくつかのステップについて少し混乱しました。行サイズを計算するためのステップ3では、最初に列サイズを計算してから、テーブル内のすべての列サイズの合計を計算する必要があります。実際にテーブルを作成せずに列サイズ値を取得する方法を考えていましたデータ、次にvsize()を使用しますか?または、列のサイズが何であるかを誤解しています。
また、リンクのこれらの手順は、テーブルのサイズを推定するためのものですか?
Oracle 7を使用していますか?そうでない場合は、常に最新バージョンのドキュメントを必ず使用してください。 Oracleはすでに12Cを採用しており、一部の概念は同じですが、機能の大部分が変更されています。
実際には列のサイズは取得されません。これが単なる「推定」である理由です。必要なものを把握しておく必要があります。次に、dbms_spaceパッケージをcreate_table_costプロシージャと一緒に使用して、必要なスペースを把握できます。
例えば:
3つの列(val1、val2、val3)を持つテーブルを作成する必要があり、それぞれが4バイト(abcのような3つのリテラルとvarchar2が先行するバイト)を占めることを知っています。また、このテーブルには約1000行あると推定しています。次に、デカルトグラフについて考えてみます。
row_count
^
|
|
|
|-----------> avg_row_len
次を使用してサイズを推定します。
set serveroutputon
DECLARE
estimated_used_size NUMBER;
allocated NUMBER;
BEGIN
DBMS_SPACE.create_table_cost (
tablespace_name => 'USERS',
avg_row_size => 12,
row_count => 1000,
pct_free => 10,
used_bytes => estimated_used_size,
alloc_bytes => allocated);
DBMS_OUTPUT.put_line ('the table (TS=USERS): will use =' || estimated_used_size ||' bytes to be allocated =' || allocated);
end;
/
最後の質問については、既存のテーブルのサイズを見積もるには、ビューdba_segmentsをチェックします(インデックスや他のオブジェクトのサイズをクエリするためにも)。
例:
SQL> SELECT bytes/1024/1024 "Size in MB" FROM dba_segments WHERE segment_name = 'TABLE_NAME_HERE' AND segment_type = 'TABLE';