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 "旧表名"; |
複数の表に対して、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; |
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'); |