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
には、次のオプションがあります。
オプション | 説明 |
---|---|
|
データベースの場所、ドライバ、および必要に応じてその他の接続属性設定を指定するODBC接続文字列。 |
|
互換性モード。TimesTen固有およびリリース固有のキーワードと拡張子の使用を制限します。このことは、
|
|
スキーマの取得元となるデータベースのODBCデータソース名を指定します。 |
|
完全修飾されたデータ型名を使用します。 |
|
使用方法のメッセージを出力して終了します。 |
|
データベースのオブジェクトを1行に1項目ずつ表示します。 |
|
この引数は、ユーザーが出力に含めるオブジェクト・タイプのカンマ区切り(カンマの後にスペースなし)リストです。デフォルトは、-list all です。この情報には、 |
|
出力の有効範囲を、指定されたパターンのデータベース・オブジェクトに制限します。ユーティリティを実行するユーザーが コマンドラインの最後にあるオブジェクトのリストが空の場合、 |
|
|
|
|
|
デフォルトでは、
ttSchema ユーティリティは非システム・オブジェクトのみを出力します。ADMIN 権限を持つユーザーが-st を使用すると、システム表を含むすべてのシステム作成オブジェクトが出力されます。-st を省略すると、システムが作成したオブジェクトは省略されます。ADMIN 権限を持たないユーザーが使用した場合、ユーザーがシステム作成オブジェクトを指定しないかぎり、-st は結果を出力しません。次に例を示します。
|
|
|
ユーザー・パスワードへの影響
内部ユーザーがデータベースに格納され、ttSchema
を使用してデータおよびメタデータをデータベースからエクスポートするとします。その場合、各ユーザーに関連付けられたパスワードはエクスポートされません。かわりに、ttSchema
では、データベース内の内部ユーザーごとにCREATE
USER
文が書き込まれ、このユーザーにランダム・パスワードが割り当てられます。CREATE
USER
文のACCOUNT
LOCK
句およびPASSWORD
EXPIRE
句は、各ユーザーのアカウントをロックして各ユーザーのパスワードを期限切れにするために、ttSchema
でも使用されます。ttSchema
のコール元がこのCREATE
USER
SQLを新しいデータベースまたは既存のデータベースにインポートすると、ユーザーのアカウントがロックされ、パスワードが期限切れになります。インスタンス管理者は、ユーザーのアカウントのロックを解除し、新しいパスワードを指定する必要があります。さらに、ユーザーが元のパスワードを使用してデータベースに接続しようとした場合、またはttSchema
のCREATE
USER
文で作成されたパスワードを使用してデータベースに接続しようとすると、アカウント・ロック・エラーで失敗します。
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;
この例では、元のユーザーを削除し、ttIsql
でschema.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を実行しないでください。