Oracle/ パーティション表

パーティション表とは
テーブル(索引)を任意の分類によって異なる表領域で格納する仕組み
大規模なDBには必須な機能
パーティション索引には
パーティション単位で独立したローカルインデックス

独立したパーティション化が可能なグローバルインデックス
の2つある


パーティションの種類
レンジ パーティション
インターバル パーティション
リストパーティション
ハッシュパーティション
リファレンスパーティション
バーチャル カラム パーティション
コンポジットパーティション
パーティション プルーニング

ref:
SHIFT the Oracle, パーティション表
http://www.shift-the-oracle.com/table/partition-table.html

tag : Oracle

2010-12-10 14:18 : __db__oracle : コメント : 0 : トラックバック : 0 :

Oracle/ スキーマとシノニム

■スキーマ
データの論理構造の集合で
スキーマ・オブジェクトと言う
スキーマは データベース・ユーザーによって所有され
そのユーザーと同じ名前を持つ
各ユーザーは単一のスキーマを所有し
SQLで作成や操作が出来る。
スキーマには以下のものが存在する。

―クラスタ
―データベース・リンク
―データベース・トリガー
―ディメンション
―外部プロシージャ・ライブラリ
―索引および索引タイプ
―Javaクラス、Javaリソース、Javaソース
―マテリアライズド・ビュー、マテリアライズド・ビュー・ログ
―オブジェクト表、オブジェクト型、オブジェクトビュー
―演算子
―順序
―ストアドファンクション、プロシージャ、パッケージ
―シノニム
―テーブル(表)及び索引構成表
―ビュー


■シノニム
テーブル・ビュー・プロシージャ・ファンクション・パッケージなどに対する別名
単なる別名だけのもの
シノニムには
パブリックシノニム と プライベートシノニム
がある

□パブリックシノニム
PUBLICユーザーが所有し
全てのユーザーがアクセスできる
□プライベートシノニム
特定ユーザーのスキーマに含まれ
そのユーザーが他ユーザーに対する
シノニムの使用許可を制限する。

シノニムは
セキュリティと便利さの為のもの


あるシノニムの元となるテーブルが
テーブル名の変更やテーブルを別環境に移動するような場合
シノニムのみを再定義すれば
そのシノニムを参照しているアプリケーションの変更の必要が無い

ユーザ'RES'が所有するスキーマ内にテーブル'SALES_DATA'があり
'SALES_DATA'に対するSELECT権限がPUBLICに付与されている場合
通常
このテーブルを参照するには
テーブルを含むスキーマとテーブル名の両方が必要
SELECT * FROM RES.t_SALES_DATA;
ここで
下記のSQLでパブリックシノニムを作成することで
CREATE PUBLIC SYNONYM SALE FOR RES.SALES_DATA;
ユーザーはより単純なSQLでテーブル'SALES_DATA'を参照できる
SELECT * FROM SALE;
同時に
パブリックシノニム'SALE'で
テーブル名'SALES_DATA'とスキーマ名'RES'を隠蔽している

ref:
SQL:Oracle:スキーマ、シノニムとは何か?, Web Artisan Blog
http://www.res-system.com/weblog/item/246

tag : Oracle

2009-12-26 01:09 : __db__oracle : コメント : 0 : トラックバック : 0 :

Oracle/ SELECT FOR UPDATE

SELECT時に明示的な行ロックを行う方法
SELECTFOR UPDATEは行レベルでロックするためのSQL文。
そのためFOR UPDATESELECTした後のプロシージャ処理で処理中のレコードが更新されたり、削除されたりすることを防げる。
しかし、
一度に大量のレコードをロックしたり、表全体をロックするような大規模のロックは同時操作性を落とす。
要件次第では、LOCK TABLE等の表ロックを検討すべき。

SELECTFOR UPDATE [WAIT | NOWAIT]
Oracle 9i からFOR UPDATEのWAITの待機秒数が指定可能。
※排他モード(X)で表がロックされている場合には、
待ち時間の指定は無効になり、WAITのみと同じになる。

SELECT ~ WHERE ...
FOR UPDATE
 OF [hoge_table] hoge_column [, piyo_column...] ]
  WAIT [n_sec] | NOWAIT]

ex
SELECT col FROM table WHERE col = 'hoge' FOR UPDATE OF col WAIT 10;
(10秒までは競合するトランザクションの完了を待つ)

FOR UPDATE OF
で指定するカラム名は、どのテーブルをロックするかを設定させるためのもの。
※指定フィールドだけが更新できるゆう制限でない。
※対象テーブルが1つの場合は、あんまし意味なか。

INSERT, UPDATE, DELETEで
NOWAITや待機時間を制限する指定は不可。

UPDATEやDELETEは
SELECT ~ FOR UPDATEを使用して該当する行をロックできるが、
INSERTは
直接的な回避方法はない。
漢籍的な回避策としては、
主キーとしてシーケンスによる代替キーを定義するか、
ロック順序設計を見直す。

行が一意に特定できなくなる操作などには
FOR UPDATE句は使用できない。
-集合演算子 (UNION / INTERSECT / MINUS)
-外部結合
-DISTINCT, GROUP BY, 集計関数(グループ関数)
-CURSOR式(ネステッド・カーソル)

ビュー及ぶインラインビューにもFOR UPDATEを使用出来るが、
以下内容を含むビューには使用できない。
(=更新できないビューにも該当するもの)
-ORDER BY
-集合演算子 (UNION / INTERSECT / MINUS)
-外部結合
-DISTINCT, GROUP BY, 集計関数(グループ関数)
-CONNECT BY ほか

UPDATEしないSELECT FOR UPDATEの終了処理
SELECT ... FOR UPDATEである行をロックしても条件分岐で結局更新しない場合、
ロックされた行をCOMMITかROLLBACKしないで放置しとくと、
同時実行性能を低下させる。
→ロジック上で正常終了として更新しない場合も、
 COMMITしてロックを開放すること。

ロック中の行は無視するSKIP LOCKED
SELECT ... FROM ... FOR UPDATE句を
単純に複数のプロセスで行うと競合して多重化できない。
その場合は、
SELECT ... FROM ... WHERE ROWNUM <= 1000 FOR UPDATE SKIP LOCKED
と記述することで処理を効率化できる。


ref:
Oracle DBA, Oracle SQL and PL/SQL Tips
http://www.shift-the-oracle.com/sql/select-for-update.html

tag : Oracle SELECT FOR UPDATE SKIP LOCKED

2009-05-10 17:47 : __db__oracle : コメント : 0 : トラックバック : 0 :

Oracle/ DML, DDL, DCL and TCL

【*】データ操作言語/ DML
Data access and Manipulation Language

*SQL DML LIST
-SELECT (≠Manipulate) / SELECT FOR UPDATE
-INSERT
-DELETE
-UPDATE
-MERGE (9i)

-CALL
-LOCK TABLE

-EXPLAIN PLAN

【*】データ定義言語/ DDL
Data Definition Language
・スキーマオブジェクトの作成/変更/削除
 CREATE, DROP, TRUNCATE, ALTER, etc
・権限/ロールの操作
 GRANT, REVOKE
・スキーマオブジェクトの分析
 ANALYZE
・監査の定義
 AUDIT
・スキーマのコメントの追加
 COMMENT

*SQL DDL LIST
-ALTER (does inc session, systemControl stmt?)
-ANALYZE
-ASSOCIATE STATISTICS/ DISASSOCIATE STATISTICS
-AUDIT
-COMMENT

-CREATE
-DROP
-TRUNCATE
-FLASHBACK
-PURGE
-RENAME

-GRANT
-REVOKE
-NOAUDIT

【*】データ制御言語 / DCL
Data Control Language
Oracle doesnt have this kind language.

【*】トランザクション制御文 ≒ DCL

*SQL DDL LIST
-COMMIT
-ROLLBACK
-SET TRANSACTION
-SAVEPOINT

【*】セッション制御文
セッションプロパティの設定

*SQL DDL LIST
-ALTER SESSION
-SET ROLE

【*】システム制御文
インスタンスプロパティの設定

*SQL DDL LIST
-ALTER SYSTEM


ref:
http://www.shift-the-oracle.com/sql/structured-query-language.html

tag : DML DDL DCL

2009-02-09 06:27 : __db__oracle : コメント : 0 : トラックバック : 0 :

Oracle Driver

Type2 Driver
OCI Driver
for SQLPlus and other.
communication with oracle by TCP/IP or IPC.
- libocijdbc11.so (11g)
- libheteroxa11.so (XADriver, 11g)
# use OracleDatabaseInstantClient for 10g OCIDriver.
# use Windows NT of Solaris/UNIX (DLable) for 9i OCIDriver.

Type4 Driver
PureJavaDriver
JDBCThinDriver
communication with oracle by TCP/IP.
- ojdbc14.jar : for JDK1.4 (upTo10g)
- ojdbc5.jar : for JDK5.0 (from11g)
- ojdbc6.jar : fro JDK6.0 (from11g)

■I18N
- nls_charset11.jar : for JDK1.1 (upTo9i)
- nls_charset12.jar : for JDK1.2, 1.3 (upTo9i)
- orai18n.jar : for JDK1.2, 1.3, 1.4 (10g)
# use orai18n.jar for 10g or upper.
- orai18n.jar : for JDK5.0, 6.0 (11g and upper)
# it has same classes as orai18n.jar for 10g, but different sources.

globalization support
10gR2: http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/global.htm
11gR2: http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/java.111/E05720-01/global.htm

cf. oracle.sql.CHAR
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/oraint.htm#i1064692

■procedure
you need orai18n.jar to use collection as some args.
Object型またはCollection型のCHAR/VARCHARデータ・メンバーに他のキャラクタ・セットを使用する必要がある場合は、 CLASSPATHにNLS拡張機能のjarファイル([ORACLE_HOME]/jlib/orai18n.jar)を含めること。
9i以前のnls_charset*.*ファイルがorai18n.jarに置き換えられる。
http://otndnld.oracle.co.jp/document/products/oracle11g/111/generic/E05740-03/jdbc_readme.htm#JDBC_4

tag : Oracle Type2 Type4 Driver orai18n.jar nls_charset ojdbc libocijdbc libheteroxa

2009-01-30 00:06 : __db__oracle : コメント : 0 : トラックバック : 0 :

LINKS/ DB/ ORACLE

--------------------------------------------------
■Documentation
□Oracle Database Online Documentation Library (10.2)
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/index.htm

--------------------------------------------------
■References
□忘れっぽいエンジニアのオラクルSQLリファレンス
http://oracle.se-free.com/
□オラクル ちょこっとリファレンス
http://luna.gonna.jp/oracle/index.html
□Ocacle Database SQLリファレンス 10gリリース2(10.2)
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/toc.html

tag : LINKS ORACLE

2008-09-01 22:52 : __db__oracle : コメント : 0 : トラックバック : 0 :

Oracle/ TYPES

Javaデータ型JDBCデータ型Oracle8iSQLデータ型
StringCHARCHAR
StringVARCHARVARCHAR2
StringLONGVARCHARLONG
java.math.BigDecimalNUMERICNUMBER
java.math.BigDecimalDECIMALNUMBER
booleanBITNUMBER
byteTINYINTNUMBER
shortSMALLINTNUMBER
intINTEGERNUMBER
longBIGINTNUMBER
floatREALNUMBER
doubleFLOATNUMBER
doubleDOUBLENUMBER
byte[]BINARYRAW
byte[]VARBINARYRAW
byte[]LONGVARBINARYLONGRAW
java.sql.DateDATEDATE
java.sql.TimeTIMEDATE
javal.sql.TimestampTIMESTAMPDATE


ref:
http://www.atmarkit.co.jp/fjava/rensai/jdbc02/jdbc02.html
2008-09-01 22:47 : __db__oracle : コメント : 0 : トラックバック : 0 :
ホーム

search

ad



counter


tag cloud

category cloud