ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

Oracle・Tips集

 Oracleデータベースを使う上で、便利な使い方をまとめてみました。

データベースの情報の参照方法

●表の一覧
SQL# select * from tab;

●表の項目一覧
SQL# desc 表名;(;は省略可)

●インデックスの一覧
SQL# select * from user_ind_columns;
※指定した表のインデックスのみ、表示することもできます。
SQL# select column_name from user_ind_columns where table_name = '表名';

●ユーザ一覧
SQL# select username from user_users;

●データベースの文字コード
SQL# select * from NLS_DATABASE_PARAMETERS where PARAMETER = 'NLS_NCHAR_CHARACTERSET';

表のコピー方法

 create tableコマンドで表のコピーができます。 ただし、制約条件は、NOT NULL制約しかコピーされませんので、それ以外の制約については、再度定義する必要があります。
 以下のSQLを参考にして下さい。

sql# create table "新表名" as select * from "旧表名";

表名の変更方法

 表をコピーしてから、削除して下さい。
 以下のSQLを参考にして下さい。

sql# create table "新表名" as select * from "旧表名";
sql# drop table "旧表名";

同じ形式の表を1つの表としてアクセスする方法

 複数の表に対して、VIEWを使用することで、1つの表としてアクセスすることができます。 同じ形式の表の場合は、SQLの集合演算機能の1つであるUNION機能を利用すると、1つの表としてアクセスすることができます。
 以下の、UNIONを利用したVIEW定義のSQLを参考にして下さい。

sql# create view TBL0 as
     select * from TBL1 union all
     select * from TBL2 union all
     select * from TBL3;

表を別のORACLEへ持っていく方法

 expユーティリティとimpユーティリティを使用することで、表を別のORACLEへ持っていくことができます。 expユーティリティでは、表単位、ユーザ単位でデータを移動できます。 ユーザ名が異なる場合は、imp時に、fromuserオプションとtouserオプションを使用します。 expするときのユーザがDBA権限を持っているとDBA権限のないユーザではimpできない場合があります。

unix# exp "user/passwd file=exp01.dmp tables=(JOB, TOKUIDB, TOUR_JOHO)"
unix# imp "user/passwd file=exp01.dmp tables=(JOB, TOKUIDB, TOUR_JOHO)"

データベースリンクについて

 データベースリンクとは、他のマシンのOracleデータベースを自分のマシンのデータベースのように扱うための機能です。

通信パラメータの設定

 データベースを参照する側のマシンに設定します。 データベースを参照される側のマシンには設定の必要はありません。
 通信パラメータは、ネットワーク環境により設定方法が異なります。
 以下は、イーサーネットでTCP/IPを使用した場合の例です。

~oracle/network/admin/tnsnames.oraへ追加
CON01 = (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP) (HOST = host01) (PORT = 2040))
  (CONNECT_DATA = (SID = ORACLE))
)

データベースリンクの作成

 SQL*Plusでデータベースリンクを作成します。
 データベースを参照する側のマシンに作成します。

sql# create database link DBL01
     connect to USR01 identified by PAS01 using 'tns:CON01';
sql# create synonym TBL01 for TBL01@DBL01;

スナップショットについて

 スナップショットとは、Oracleデータベース間で、データのバックアップを取る機能です。

スナップショットの作成方法

 スナップショットを作成するためには、データベースリンクを作成後に、クライアント側で以下のコマンドを実行します。 表領域のサイズ指定など、詳細な設定をする場合は、SQL言語リファレンスを参照してください。

sql# create snapshot スナップショット名 tablespace 表領域名
     as select * from 表名@データベースリンク名;

 さらに、高速リフレッシュを行うためには、サーバ側にスナップショットログを以下のコマンドで、作成する必要があります。

sql# create snapshot log on マスタ表名 tablespace 表領域名;

スナップショットを随時同期する方法

 スナップショットは、定期的に同期する方法と、随時同期する方法がありますが、随時同期するためには、以下のプロシジャを実行する必要があります。

sql# exec dbms_snapshot.refresh('スナップショット名','f');


Copyright (C)1995-2002 ASH multimedia lab.
mail : info@ash.jp