ttSchema

ttSchemaユーティリティは、データベースのスキーマまたは選択されたオブジェクトを出力します。

このユーティリティは、SQL CREATE文で使用される次のスキーマ・オブジェクトを表示できます。

  • 索引

  • キャッシュ・グループ定義

  • 順序

  • ビュー

  • パーティション情報などの列の定義

  • PL/SQLプログラム・ユニット

  • ユーザーおよびユーザー情報

ノート:

ttSchemaは、パスワードをエクスポートしません。

リストの詳細レベルおよびオプションでリストされるオブジェクトを制御できます。出力はユーティリティ・ユーザーの権限によって決まり、データベースがどのようにして現在の状態になったのか(多くの場合はALTER文を通じて)の履歴ではなく、データベースの状態のある時点でのスナップショットを表します。

データベース全体(データを含む)は、ttSchemaの出力から完全に再作成することはできません。ttIsqlユーティリティでは、データベースの全スキーマを再作成するために、ttSchemaの出力を再生できます。

UNIXおよびLinuxシステムでは、このユーティリティはTimesTen Data Manager DSNでサポートされます。TimesTenクライアントDSNでは、ttSchemaCSユーティリティを使用します。

必要な権限

このユーティリティに必要なものは、データベース・オブジェクトに対してDESCRIBE操作を実行するために必要な権限のみです。

このユーティリティは、ユーティリティ・ユーザーが所有するオブジェクトおよびユーザーがSELECT権限を持つオブジェクトに関する情報のみを出力します。ユーティリティ・ユーザーがADMIN権限を持っている場合には、ttSchemaによってすべてのオブジェクトについて情報が出力されます。

TimesTen ScaleoutおよびTimesTen Classicでの使用

このユーティリティは、TimesTen ClassicとTimesTen Scaleoutの両方でサポートされています。

構文

ttSchema {-h | -help | -?}
ttSchema {-V | -version}
ttSchema [-l] [-c] [-fixedTypes] [-st | -systemTables]
         [ -list {all | tables | views | sequences |
         cachegroups | repschemes | synonyms | plsql | userinfo} [,...] ] 
         [-plsqlAttrs | -noplsqlAttrs]
         [-plsqlCreate |-[no]plsqlCreateOrReplace]
         {-connStr connection_string | DSN }
         [[owner.]object_name][...]

オプション

ttSchemaには、次のオプションがあります。

オプション 説明

-connStr connection_string

データベースの場所、ドライバ、および必要に応じてその他の接続属性設定を指定するODBC接続文字列。

-c

互換性モード。TimesTen固有およびリリース固有のキーワードと拡張子の使用を制限します。このことは、ttSchemaの出力が、TimesTenの以前のリリースまたはOracle Databaseのような他のデータベース・システムへの入力として使用されている場合に役立つ可能性があります。

-cオプションを使用すると、INLINEキーワードおよびNOT INLINEキーワードが出力されるのを回避できます。

DSN

スキーマの取得元となるデータベースのODBCデータソース名を指定します。

-fixedTypes

完全修飾されたデータ型名を使用します。

-h

-help

-?

使用方法のメッセージを出力して終了します。

-l

データベースのオブジェクトを1行に1項目ずつ表示します。

-list {all | tables | views | sequences | cachegroups | repschemes |synonyms | plsql |userinfo}[,...]

この引数は、ユーザーが出力に含めるオブジェクト・タイプのカンマ区切り(カンマの後にスペースなし)リストです。デフォルトは、-list allです。

この情報には、ADMIN権限を持つユーザーのみがアクセスできます。ADMIN権限を持たないユーザーが-list allを実行すると、ユーザー情報は表示されません。ADMIN権限を持たないユーザーが-list userinfoを実行すると、権限のないユーザーがこの情報を使用できないことを示すエラー・メッセージが返されます。

[owner.]object_name

出力の有効範囲を、指定されたパターンのデータベース・オブジェクトに制限します。ユーティリティを実行するユーザーがADMIN権限を持っている場合、ttSchemaはすべてのオブジェクトに関する情報を出力します。それ以外の場合、ttSchemaはユーザーが所有するオブジェクトの情報のみを出力します。

コマンドラインの最後にあるオブジェクトのリストが空の場合、ttSchemaは、データベース内の各タイプのすべてのオブジェクトを出力します。これは、ユーザーの権限によってのみ制限されています。

-plsqlAttrs |-noplsqlAttrs

ttSchemaがPL/SQLプログラム・ユニットに対してCREATE文とともにALTER SESSION文を発行するかどうかを制御します。

-plsqlAttrsを指定した場合、ttSchemaCREATE文を発行する前にALTER SESSION文を発行して、これらの属性を設定します。ttSchemaからのこの出力をttIsql(またはsqlplus)にフィードバックして、元のデータベースに指定したのと同じコンパイラ・オプションを指定して、同じプロシージャを作成できます(デフォルト)。

-noplsqlAttrsを指定した場合は、CREATE文のみを生成します。

-plsqlCreate | -[no]plsqlCreateOrReplace

-plsqlCreateを指定した場合、ttSchemaはPL/SQLプログラム・ユニットに対してCREATE PROCEDURE文、CREATE PACKAGE文またはCREATE FUNCTION文を発行します。

-plsqlCreateOrReplace(デフォルト)を指定した場合、ttSchemaCREATE文またはREPLACE文を発行します。

-st | -systemTables

デフォルトでは、ttSchemaユーティリティは非システム・オブジェクトのみを出力します。ADMIN権限を持つユーザーが-st を使用すると、システム表を含むすべてのシステム作成オブジェクトが出力されます。-stを省略すると、システムが作成したオブジェクトは省略されます。ADMIN権限を持たないユーザーが使用した場合、ユーザーがシステム作成オブジェクトを指定しないかぎり、-stは結果を出力しません。次に例を示します。

ttSchema -st -dsn <DSN> SYS.%

-V | -version

ttSchemaのリリース番号を出力し、終了します。

ユーザー・パスワードへの影響

内部ユーザーがデータベースに格納され、ttSchemaを使用してデータおよびメタデータをデータベースからエクスポートするとします。その場合、各ユーザーに関連付けられたパスワードはエクスポートされません。かわりに、ttSchemaでは、データベース内の内部ユーザーごとにCREATE USER文が書き込まれ、このユーザーにランダム・パスワードが割り当てられます。CREATE USER文のACCOUNT LOCK句およびPASSWORD EXPIRE句は、各ユーザーのアカウントをロックして各ユーザーのパスワードを期限切れにするために、ttSchemaでも使用されます。ttSchemaのコール元がこのCREATE USER SQLを新しいデータベースまたは既存のデータベースにインポートすると、ユーザーのアカウントがロックされ、パスワードが期限切れになります。インスタンス管理者は、ユーザーのアカウントのロックを解除し、新しいパスワードを指定する必要があります。さらに、ユーザーが元のパスワードを使用してデータベースに接続しようとした場合、またはttSchemaCREATE USER文で作成されたパスワードを使用してデータベースに接続しようとすると、アカウント・ロック・エラーで失敗します。

この例では、インスタンス管理者は2人のユーザーを作成し、ttSchemaを使用して、データベースからschema.sqlファイルにデータおよびメタデータをエクスポートします。
Command> CREATE USER sampleuser identified by sampleuser;

User created.

Command> CREATE USER sampleuser2 identified by sampleuser2;

User created.

Command> GRANT CONNECT TO sampleuser,sampleuser2;
Command> exit
Disconnecting...
Done.
% ttSchema -DSN mydatabase > schema.sql
% cat schema.sql  
-- Database is in Oracle type mode
create user SAMPLEUSER identified by 'DISABLED:m}Lc#MhP_Sh<X~M[p~z1' profile "DEFAULT" password expire account lock;

grant CREATE SESSION to SAMPLEUSER;

create user SAMPLEUSER2 identified by 'DISABLED:fA~d2[XM/kjNp#?MYJ4E' profile "DEFAULT" password expire account lock;

grant CREATE SESSION to SAMPLEUSER2;

この例では、元のユーザーを削除し、ttIsqlschema.sqlファイルを実行します。ユーザーsampleuserがデータベースへの接続を試行すると、接続は失敗します。ユーザーのアカウントはロックされています。

% ttIsql mydatabase

Copyright (c) 1996, 2021, Oracle and/or its affiliates. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.



connect "DSN=access1";
Connection successful: DSN=access1;UID=instanceadmin;DataStore=/scratch/sampleuser/mydatabase;
DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=AL32UTF8;LogBufMB=1024;PermSize=500;TempSize=300;
(Default setting AutoCommit=1)
Command> DROP USER sampleuser;
User dropped.
Command> DROP USER sampleuser2;
User dropped.
Command> @schema
-- Database is in Oracle type mode
create user SAMPLEUSER identified by 'DISABLED:m}Lc#MhP_Sh<X~M[p~z1' profile "DEFAULT" password expire account lock;

User created.

grant CREATE SESSION to SAMPLEUSER;
create user SAMPLEUSER2 identified by 'DISABLED:fA~d2[XM/kjNp#?MYJ4E' profile "DEFAULT" password expire account lock;

User created.

grant CREATE SESSION to SAMPLEUSER2;

Command> connect adding "UID=sampleuser;PWD=sampleuser";
15179: the account is locked
The command failed.
none: Command> connect adding "UID=sampleuser;PWD=DISABLED:m}Lc#MhP_Sh<X~M[p~z1";
15179: the account is locked
The command failed.

インスタンス管理者は、ALTER USER文を使用してsampleuserアカウントのロックを解除します。ユーザーsampleuserは、データベースに接続してtheschema.sqlファイルを実行できます。


none: Command> use mydatabase
mydatabase: Command> ALTER USER sampleuser identified by sampleuser account unlock;

User altered.

mydatabase: Command> connect adding "UID=sampleuser;PWD=sampleuser";
Connection successful: DSN=access1;UID=sampleuser;DataStore=/scratch/sampleuser/mydatabase;
DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=AL32UTF8;LogBufMB=1024;PermSize=500;TempSize=300;
(Default setting AutoCommit=1)

この例では、sampleuser3オブジェクトを作成します。

CREATE TABLE sampleuser3.customer (
cust_num            INTEGER NOT NULL PRIMARY KEY,
  region            CHAR(2) NOT NULL,
  name              VARCHAR2(80), 
  address           VARCHAR2(255) NOT NULL);

CREATE SEQUENCE sampleuser3.custid MINVALUE 1 MAXVALUE 1000000;

CREATE TABLE sampleuser3.orders (
  ord_num INTEGER NOT NULL PRIMARY KEY,
  cust_num INTEGER NOT NULL,
  when_placed  TIMESTAMP NOT NULL,
  when_shipped TIMESTAMP,
  FOREIGN KEY(cust_num) REFERENCES sampleuser3.customer (cust_num));

CREATE MATERIALIZED VIEW sampleuser3.order_summary AS
  SELECT cust.name, ord.ord_num, count(*) ord_count
  FROM sampleuser3.orders ord, sampleuser3.customer cust
  WHERE ord.cust_num = cust.cust_num
    GROUP BY cust.name, ord.ord_num;

この例では、orderdsnデータベースのスキーマを返します。ユーザーsampleuserには、ADMIN権限があります。

% ttSchema "DSN=orderdsn;UID=sampleuser;PWD=sampleuser";
-- Database is in Oracle type mode
create table SAMPLEUSER3.CUSTOMER (
        CUST_NUM NUMBER(38) NOT NULL,
        REGION   CHAR(2 BYTE) NOT NULL,
        "NAME"   VARCHAR2(80 BYTE) INLINE NOT NULL,
        ADDRESS  VARCHAR2(255 BYTE) NOT INLINE NOT NULL,
    primary key (CUST_NUM));
 
create table SAMPLEUSER3.ORDERS (
        ORD_NUM      NUMBER(38) NOT NULL,
        CUST_NUM     NUMBER(38) NOT NULL,
        WHEN_PLACED  TIMESTAMP(6) NOT NULL,
        WHEN_SHIPPED TIMESTAMP(6),
    primary key (ORD_NUM),
    foreign key (CUST_NUM) references SAMPLEUSER3.CUSTOMER (CUST_NUM));
 
create sequence SAMPLEUSER3.CUSTID
    increment by 1
    minvalue 1
    maxvalue 1000000
    start with 1
    cache 20;
 
create materialized view SAMPLEUSER3.ORDER_SUMMARY as
    SELECT CUST.NAME "NAME", ORD.ORD_NUM "ORD_NUM", COUNT(*) "ORD_COUNT" 
    FROM SAMPLEUSER3.ORDERS ORD, SAMPLEUSER3.CUSTOMER CUST WHERE ORD.CUST_NUM = 
    CUST.CUST_NUM GROUP BY CUST.NAME, ORD.ORD_NUM ;

特定のオブジェクトのリスト

この例では、orderdsnデータベースのマテリアライズド・ビューと順序のみを返します。

% ttSchema -list views,sequences orderdsn
-- Database is in Oracle type mode
create sequence SAMPLEUSER3.CUSTID
    increment by 1
    minvalue 1
    maxvalue 1000000
    start with 1
    cache 20;
 
create materialized view SAMPLEUSER3.ORDER_SUMMARY as
    SELECT CUST.NAME "NAME", ORD.ORD_NUM "ORD_NUM", COUNT(*) "ORD_COUNT" 
    FROM SAMPLEUSER3.ORDERS ORD, SAMPLEUSER3.CUSTOMER CUST WHERE ORD.CUST_NUM = 
    CUST.CUST_NUM GROUP BY CUST.NAME, ORD.ORD_NUM ;

オブジェクトの指定

次の例では、orderdsnデータベースのorders表のスキーマ情報を返します。

% ttSchema orderdsn sampleuser3.orders
-- Database is in Oracle type mode
Warning: tables may not be printed in an order that can satisfy foreign key
reference constraints
create table SAMPLEUSER3.ORDERS (
        ORD_NUM      NUMBER(38) NOT NULL,
        CUST_NUM     NUMBER(38) NOT NULL,
        WHEN_PLACED  TIMESTAMP(6) NOT NULL,
        WHEN_SHIPPED TIMESTAMP(6),
    primary key (ORD_NUM),
    foreign key (CUST_NUM) references SAMPLEUSER3.CUSTOMER (CUST_NUM));

固定データ型の指定

次の例では、固定データ型名を使用してorderdsnデータベースのスキーマ情報を返します。

% ttSchema -fixedTypes orderdsn
-- Database is in Oracle type mode
create table SAMPLEUSER3.CUSTOMER (
        CUST_NUM NUMBER(38) NOT NULL,
        REGION   ORA_CHAR(2 BYTE) NOT NULL,
        "NAME"   ORA_VARCHAR2(80 BYTE) INLINE NOT NULL,
        ADDRESS  ORA_VARCHAR2(255 BYTE) NOT INLINE NOT NULL,
    primary key (CUST_NUM));
 
create table SAMPLEUSER3.ORDERS (
        ORD_NUM      NUMBER(38) NOT NULL,
        CUST_NUM     NUMBER(38) NOT NULL,
        WHEN_PLACED  ORA_TIMESTAMP(6) NOT NULL,
        WHEN_SHIPPED ORA_TIMESTAMP(6),
    primary key (ORD_NUM),
    foreign key (CUST_NUM) references SAMPLEUSER3.CUSTOMER (CUST_NUM));
 
create sequence SAMPLEUSER3.CUSTID
    increment by 1
    minvalue 1
    maxvalue 1000000
    start with 1
    cache 20;
 
create materialized view SAMPLEUSER3.ORDER_SUMMARY as
    SELECT CUST.NAME "NAME", ORD.ORD_NUM "ORD_NUM", 
    COUNT(*) "ORD_COUNT" FROM SAMPLEUSER3.ORDERS ORD, SAMPLEUSER3.CUSTOMER CUST 
    WHERE ORD.CUST_NUM = CUST.CUST_NUM
    GROUP BY CUST.NAME, ORD.ORD_NUM ;

ノート

  • 生成されたSQLでは、ALTER文を介した変換の履歴は生成されず、表パーティションは保持されません。ただし、出力には、SQLコメントの形式で表パーティションに関する情報が示されます。ttSchemaユーティリティは、初期パーティションにない列のパーティション番号を出力します。初期パーティションは0です。ttSchemaによって出力されるパーティション1は、初期パーティションではなくセカンダリ・パーティション1です。パーティションの詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス』ALTER TABLEを使用する場合のパーティションの理解を参照してください。

  • このユーティリティでは、0以外の値を指定したPassThrough接続属性はサポートされていないため、0以外の値を指定するとエラーが返されます。

  • 出力に、TimesTenの以前のリリースによって認識されるDDLと互換性があることは保証できません。

  • アプリケーションのロックの競合問題を回避するために、ttSchemaの実行中はDDL SQLを実行しないでください。