6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Autonomous AI DatabaseのOCI_COST_DATA_EXTを使ってコストレポートを参照する

Last updated at Posted at 2025-12-11

OCIのコスト状況はコンソールの「コスト分析」からフィルタを付けたりグループ化してチャート表示したりすることができます。より詳細な分析を行いたい場合などはAutonomous AI Databaseを利用すると、明細となるコスト・レポートのデータをデータベース上からビューとして参照することができます。SQLで直接アクセスが可能なので、より高度な分析などに活用することが可能となりそうです。

コスト分析やコスト・レポートの基本的な機能については、以下のドキュメントや資料を参考にしてください。

今回試すADBのビューは以下のドキュメントに記載されています。

いくつかのビューがありますが、コスト・レポートを参照できるのはOCI_COST_DATA_EXTというビューになります。以前はOCI_COST_DATAビューという名前だったのですが、最近はOCI_COST_DATA_EXTビューになっています。
今回は最新ドキュメントに従って新しいビューを使っていきます。
また、使用状況レポートの廃止に伴ってOCI_USAGE_DATA_EXTビューは利用できなくなっていますが、コストレポートに使用状況(Usage)のデータも含まれますのでコストレポートを参照すれば問題はありません。

事前準備

  • OCIコンソール上ではコストレポートが出力されて表示できている状態になっています。

    • まだ設定していない場合は以下のドキュメントを参考にIAMポリシーを追加します。

    • コンソールから参照すると、コストレポートはcsv形式でzip化されてアップロードされていることがわかります。ダウンロードして開いてみるとレポートの中身を参照可能です。

  • Autonomous AI Databaseの作成

    • 今回はトランザクション処理タイプで1 ECPUとしました。

Autonomous AI Databaseビューを使用したコストレポートの追跡の有効化

以下のドキュメントに従って有効化を行っていきます。

  1. ドキュメントを参考に、ADBを対象とした動的グループを作成しておきます。ここでは、tk_dgという名前の動的グループを作成しました。

    1. メニュー「アイデンティティとセキュリティ」 → 「ドメイン」 → デフォルトのドメインを選択 →「動的グループ」タブを開く
    2. 「動的グループの作成」を行う
    3. 一致条件を追加する。リソースのOCIDやコンパートメントのOCIDなどを一致ルールとして設定できます。

    image-20251121093102046.png

  2. 以下のIAMポリシーを追加します。あらかじめユーザーによる参照権限を与えているのと同様に、サービス・テナンシ内に存在するコスト・レポートをADBからも参照できるようにするという意味になります。

    Define tenancy usage-report as ocid1.tenancy.oc1..aaaaaaaaned4fkpkisbwjlr56u7cj63lf3wffbilvqknstgtvzub7vhqkggq 
    Endorse dynamic-group <group-name> to read objects in tenancy usage-report
    
  3. ADBのデータベース上からリソース・プリンシパルを有効化します。
    SQLの発行はどのようなクライアントツールを使ってもよいですが、私はOCIコンソールの「データベース・アクション」のメニューから「SQL」をクリックしてSQL Worksheetを利用しました。

    image-20251203132731276.png

    1. リソース・プリンシパルを有効にします。

      EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL();
      

      image-20251203132954951.png

    2. Autonomous AI DatabaseインスタンスでADMINユーザーに対してリソース・プリンシパルが有効になっていることを確認します。

      SELECT owner, credential_name FROM dba_credentials 
         WHERE credential_name = 'OCI$RESOURCE_PRINCIPAL' AND owner = 'ADMIN';
      
      OWNER CREDENTIAL_NAME 
      
      ----- ---------------------
      
      ADMIN OCI$RESOURCE_PRINCIPAL
      

      image-20251203133042251.png

    ここまでできれば準備は完了です。

    OCI_COST_DATA_EXTビューの参照

    さっそく実際にビューを問い合わせてみます。

    1. 試しに以下のSQLを実行してみます。

      select * from oci_cost_data_ext where rownum < 10;
      

      image-20251203133501713.png

      結果が返ってきました。問題なくビューの参照はできていることが確認できました!あとはビューの内容を必要に応じてSQLで問い合わせて活用していくことができます。

    2. もし何らかのエラーでビューの参照に失敗する場合は、動的グループの設定、ポリシーの設定が正しいかを見直してください。動的グループやポリシーを変更した後には、一度データベース上でリソース・プリンシパルの無効化/有効化を行うと設定が反映されます。

      • リソース・プリンシパルの無効化

        EXEC DBMS_CLOUD_ADMIN.DISABLE_RESOURCE_PRINCIPAL();
        
      • リソース・プリンシパルの有効化

        EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL();
        

おまけ:どんなビューの定義なのか見てみる。

少し気になったので、ビューの中身を見てみたいと思います。

  • まずは以下のSQLでビューの定義を確認します。

    select * from DBA_VIEWS where view_name = 'OCI_COST_DATA_EXT'
    

    image-20251203125521400.png

  • TEXT_VC列には以下のように定義されていました。OCI_COST_DATA_EXTビューはOCI_COST_DATA_EXT$という表からSELECTしているようです。おそらくこれがコスト・レポートのCSVを定義している外部表だと思われます。

    SELECT "REFERENCE_NUMBER","TENANT_ID","INTERVAL_USAGE_START","INTERVAL_USAGE_END","SERVICE_NAME","COMPARTMENT_ID","COMPARTMENT_NAME","REGION","AVAILABILITY_DOMAIN","RESOURCE_ID","BILLED_QUANTITY","BILLED_QUANTITY_OVERAGE","SUBSCRIPTION_ID","PRODUCT_SKU","PRODUCT_DESCRIPTION","UNIT_PRICE","UNIT_PRICE_OVERAGE","MY_COST","MY_COST_OVERAGE","CURRENCY_CODE","BILLING_UNIT_READABLE","SKU_UNIT_DESCRIPTION","OVERAGE_FLAG","IS_CORRECTION","BACK_REFERENCE_NUMBER","ATTRIBUTED_COST","ATTRIBUTED_USAGE","CREATED_BY","CREATED_ON","FREE_TIER_RETAINED","TAGS"     FROM TABLE(DBMS_CLOUD_OCI_VIEWS.get_cost_data_tbl(     CURSOR(SELECT file$name, file$path, row_data           FROM OCI_COST_DATA_EXT$)     ) ) WITH READ ONLY 
    
  • ということで、以下のファンクションを使用して外部表の定義を見てみます。

    SELECT DBMS_METADATA.GET_DDL('TABLE','OCI_COST_DATA_EXT$','C##CLOUD$SERVICE') FROM DUAL;
    
  • このような結果が返ってきました。外部表の定義ではこのテナンシのコストレポートのCSVをすべて参照している様子がわかりました。

    CREATE TABLE "C##CLOUD$SERVICE"."OCI_COST_DATA_EXT$" SHARING=METADATA 
     (	"ROW_DATA" CLOB COLLATE "USING_NLS_COMP"
     )  DEFAULT COLLATION "USING_NLS_COMP" 
     ORGANIZATION EXTERNAL 
      ( TYPE ORACLE_LOADER
        ACCESS PARAMETERS
        ( RECORDS DELIMITED BY newline     COMPRESSION GZIP    NOBADFILE NOLOGFILE NODISCARDFILE     CREDENTIAL 'OCI$RESOURCE_PRINCIPAL'     FIELDS(row_data char(32767))   )
        LOCATION
         ( 'https://objectstorage.my$home_region.oraclecloud.com/n/bling/b/my$tenancy/o/reports/cost-csv/*.csv.gz'
         )
      )
     REJECT LIMIT UNLIMITED 
    PARALLEL 
    
6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?