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を実行しないでください。