Hatena::ブログ(Diary)

ablog このページをアンテナに追加 RSSフィード

2012-05-02

環境変数 TWO_TASK

ほとんどのオペレーティング・システムで、デフォルトの接続識別子を定義できます。デフォルトを使用する場合、接続文字列で接続識別子を指定する必要がなくなります。デフォルトの接続識別子を定義するには、LinuxおよびUNIXプラットフォームの場合は環境変数TWO_TASKを、Microsoft Windowsの場合は環境変数LOCALまたはレジストリ・エントリを使用します。

たとえば、環境変数TWO_TASKがsalesに設定されている場合は、SQL*Plusから、CONNECT username@salesではなくCONNECT usernameを使用してデータベースに接続できます。Oracle NetはTWO_TASK変数を確認し、接続識別子として値salesを使用します。

データベースの識別とアクセス

「なんで TWO_TASK ってネーミングなんだろ?」って思って調べてみたら、Oracle8 Concepts Release 8.0 A58227-01 に以下の通り書かれていた。

Variations in Oracle Configuration

In a multiple-process Oracle instance, the code for connected users can be configured in one of three ways:

single-task OracleFor each user, both the database application and the Oracle server code are combined in a single user process.
dedicated server (two-task Oracle)For each user, the database application is run by a different process (a user process) than the one that executes the Oracle server code (a dedicated server process).
multithreaded serverThe database application is run by a different process (a user process) than the one that executes the Oracle server code; each server process that executes Oracle server code (a shared server process) can serve multiple user processes.
Process Structure

ということで、Oracle 8 の頃はクライアントサーバーが一つのプロセスで動く SINGLE TASK というものがあったらしい。それと対比して、専用サーバー接続はクライアントサーバーが別プロセスで動くため TWO TASK と呼んだようだ。


参考


関連

  • KROWN#137394
  • KROWN#138224
  • KROWN#18861

追記(2012/05/11):

Single-process Oracle (also called single-user Oracle) is a database system in which one process executes all parts of the Oracle server code and the single user's application program. Different processes do not separate the execution of the Oracle instance from the client application program.

Figure 7-1 shows a single-process Oracle instance. The single process executes all code associated with the database application and Oracle.

Only one user can access an Oracle instance in a single-process environment; multiple users cannot access the database concurrently. For example, Oracle running under the MS-DOS operating system on a PC can be accessed only by a single user because MS-DOS is not capable of running multiple processes.

This configuration is not as common as multiple-process Oracle, because it doesn not take advantage of the distributed processing normally associated with database operations.

Process Structure

おもしろい

2012-04-22

EXCELの軸ラベルの文字が途中までしか表示されない

グラフの大きさによっては軸ラベルをすべて表示できない場合があります。グラフの x 軸に項目名が表示されない場合は、次の操作を行ってください。

  • グラフをクリックし、黒いサイズ変更ハンドルをドラッグしてグラフを拡大します。既定では、グラフのサイズを変更すると、軸ラベルのフォントのサイズも比例して変更されます。
  • 軸をクリックし、フォント サイズ ボックス (フォント サイズ) の右端にある下向き矢印をクリックして、現在のサイズよりも小さいフォント サイズをクリックします。
  • 軸ラベルをダブルクリックし、[配置] タブの回転角度を変更します。角度が 0 度、90 度、または -90 度のとき、文字列は折り返されます。
グラフの横軸の文字が表示されない - サポート - Office.com

2012-03-26

再帰的にファイル内の文字列を置換するPerlスクリプト

Windows で Cygwin などが入ってなくて、find とか xargs とかない場合に使う Perl スクリプトを書いてみた。

#!/usr/bin/env perl

use strict;
use warnings;
use File::Find;
use File::Basename;

&print_usage if ($#ARGV < 0);
find(\&process, $ARGV[0]);

sub process {
	my $org_filename = $_;
	my $new_filename = "$org_filename.tmp";

	return unless -f $org_filename;

	open (my $IN, "<", $org_filename) 
		or warn "cannot open $org_filename because $! \n";
	open (my $OUT, ">", $new_filename) 
		or warn "cannot create $new_filename because $! \n";

	while (<$IN>) {
		s/"//g;
		print $OUT $_;
	}
	close ($IN);
	close ($OUT);

	rename($org_filename, "$org_filename.org") 
		or warn "cannot rename $org_filename because $! \n";
	rename($new_filename, $org_filename) 
		or warn "cannot rename $new_filename because $! \n";
}

sub print_usage {
	my $script_name = basename($0);
	print "$script_name: missing argument\n";
	print "Usage  : perl $script_name directory\n";
	print "Example: perl $script_name ./log\n";
	exit(1);
}

__END__

参考

2012-01-30

ハッシュテーブルと二分木についてのメモ

ハッシュテーブル

7. ハッシュテーブル(Hash Table)

メモリー効率を犠牲にしてでも(たいていのケースで)O(1)でデータにアクセスすることを可能にするこの方法は、連想配列の実装に最適で、Perlで多用されたことから今では連想配列の代名詞にすらなってしまった。

現在のLLでは、いずれも組み込みでこれをサポートしているし、CやC++のライブラリーも充実していることもあって、自ら実装する機会はあまりないと思われるが、その特性は知っておいた方がよい。

404 Blog Not Found:プログラマーでなくても名前ぐらい覚えておきたいアルゴリズムx10

ハッシュテーブルは以下のような利点を持っています。

  • ハッシュ関数に偏りがなく、十分なサイズの配列を取れるなら、ほぼ一定時間で要素の挿入・削除・検索ができます。

ただし、以下のような欠点もあります。

  • ハッシュ関数の作り方や、配列サイズに大きく依存します。
    • ハッシュ関数に偏りがなくなるような工夫が必要。
    • 配列を大きめに取っておかないと検索効率が悪化。
  • 要素の順序はばらばらになります。

このような特徴から、 偏りのないハッシュ関数が用意できて、かつ、 メモリがふんだんにある環境ではハッシュテーブルがよく用いられます。

ハッシュテーブル (アルゴリズムとデータ構造)

二分木

8. 二分木(Binary Tree)

これはアルゴリズムというよりデータ構造であるが、両者には密接な関係があるのでここで紹介してもいいだろう。配列ソートにしろハッシュテーブルにしろ、データ構造は配列にデータを転がしているという点において「乱暴」であるが、こちらはデータの並べ方を工夫することによって、データへのアクセスを常にO(ln N)に抑えるという点が特徴だ。

ただし、メモリー確保(具体的にはmalloc)のコストが結構あるということで、メモリー(再)確保の回数が少ない、配列を使ったデータ処理よりも実際は低速なことが多いので、メモリーだけで用が足りる場合には意外と出番が少なかったりもする。

ところが、これがハードディスクが相手となると、とたんにこの方法の利点が生きてくる。これの変種であるB+木などは、データベースの実装などで実によく使われている。まともな計算機科学のクラスであれば、このアルゴリズムを必ず教えるのには理由があるのだ。

404 Blog Not Found:プログラマーでなくても名前ぐらい覚えておきたいアルゴリズムx10

2分探索木は以下のような利点を持っています。

  • 理想的には、要素の挿入・削除・検索が O(log n) で行える。
  • ハッシュテーブルのように、メモリを多めに確保しておく必要がない。
  • また、ハッシュ関数の作り方に悩む必要もない。
  • 要素を整列された順序で取り出せる。

ただし、以下のような欠点もあります。

  • 木の高さがバランスを保っていないと検索などが O(n) になる。平衡化機構が必要。

ちなみに、2分探索木への、平衡化機構の組込み方にはいくつか種類があります。 実装が簡単なのでよく用いられる物としては、 赤黒木あるいは2色木(red-black tree)と呼ばれるものがあります。

2分探索木 (アルゴリズムとデータ構造)

平衡2分探索木では、検索・挿入・削除には O(log n) の時間がかかるが、基数木では O(k) である。一般に k e" log n であるから、これは利点とは見なされないが、平衡2分探索木での比較は常に文字列の比較であり、最悪で O(k) の時間がかかる。特に長い接頭部が共通な文字列を多数格納していると遅くなる。

基数木 - Wikipedia

二分木の弱点を抱え込む

二分木というのは放っといても平衡しません。例えばソート済みのデータを食わせると、そのままでは常に片側の枝が空のゴージャスな線形リストが出来上がります。それが起こらないように要素の追加と削除の都度平衡させる技術はすでに確立されて利用されていますが、自分で実装するとなるとかなり煩雑です。

しかし三分探索木に関しては、「本物の」平衡二分探索木よりこの部分を簡素化する余地が大きそうです。例えば要素削除の際の平衡をやめてもいいですし、元の論文のようにあらかじめデータがある場合には、最初の文字をカウントして中央値を得るという方法で平衡処理をなくしています。

404 Blog Not Found:algorithm - 基数木 + 平衡二分探索木 = 三分探索木

比較

その連想配列の実装手段はいくらでもあります。B木も、二分木も、あるんだよ。キーと値のペアを並べただけの配列やリストだって立派な連想配列ですが、それでは値にアクセスする都度線形探索しなければなりません。二分探索木ですらO(log(n))なところに登場したのが、配列と同じくO(1)アクセスをものにしたハッシュテーブルでした。awkで先鞭をつけperlで人気が爆発したそれが連想配列の別名となったのは「お手柄だよ、Wall」なのですが、おかげで他の実装方法が「特殊化」してしまったことも否めません。

404 Blog Not Found:Algorithm - 連想配列の実装としてのハッシュはオワコン?

ハッシュ法はデータを高速に検索できる優れたアルゴリズムです。データを検索するだけならば、二分探索木よりもハッシュ法が優れています。ですが、二分探索木にはハッシュ法にはない長所があります。二分探索木はデータの大小関係で構成されているので、左の木をたどることで最小値を、右の木をたどることで最大値を簡単に求めることができます。ハッシュ法で最大値や最小値を求めるには、すべてのデータを調べなければいけません。また、二分探索木では通りがけ順でデータを出力すれば、ソートされた結果を得ることができます。データの大小関係を処理する場合は、ハッシュ法よりも二分探索木を選ぶといいでしょう。

M.Hiroi’s Home Page / お気楽 OCaml プログラミング入門

2010-12-20

OPT_PARAM ヒント句で任意の SQL 実行中のみ一部の初期化パラメータを変更する

OPT_PARAM というヒント句を使うと、その SQL の実行中のみ初期化パラメータを変更することができるらしいです。

OPT_PARAMヒントを使用すると、現行の問合せ中にのみ初期化パラメータを設定できます。このヒントは、パラメータOPTIMIZER_DYNAMIC_SAMPLING、OPTIMIZER_INDEX_CACHING、OPTIMIZER_INDEX_COST_ADJ、OPTIMIZER_SECURE_VIEW_MERGINGおよびSTAR_TRANSFORMATION_ENABLEDに対してのみ有効です。たとえば、次のヒントは、ヒントを追加した文のパラメータSTAR_TRANSFORMATION_ENABLEDをTRUEに設定します。

SELECT /*+ OPT_PARAM('star_transformation_enabled' 'true') */ * FROM ... ;

文字列パラメータ値は、一重引用符で囲まれます。数値のパラメータ値は、一重引用符で囲まずに指定されます。

Oracle SQLの基本要素

OPT_PARAMヒントを使用すると、現行の問合せ中にのみ初期化パラメータを設定できます。 このヒントは、パラメータOPTIMIZER_DYNAMIC_SAMPLING、OPTIMIZER_INDEX_CACHING、OPTIMIZER_INDEX_COST_ADJ、OPTIMIZER_SECURE_VIEW_MERGINGおよびSTAR_TRANSFORMATION_ENABLEDに対してのみ有効です。 たとえば、次のヒントは、ヒントを追加した文のパラメータSTAR_TRANSFORMATION_ENABLEDをTRUEに設定します。

SELECT /*+ OPT_PARAM('star_transformation_enabled' 'true') */ * FROM ... ;

文字列パラメータ値は、一重引用符で囲まれます。 数値のパラメータ値は、一重引用符で囲まずに指定されます。

コメント

Staring in Oracle 10g release 2, Oracle introduced the opt_param SQL hint, without documentation. It appears that the opt_param hint is very similar to the "alter session" method for changing parameters, but it only applies to that specific SQL statement.

Troubleshooting tip! For testing, you can quickly test the effect of another optimizer parameter value at the query level without using an alter session command, using the new opt_param SQL hint:

Oracle opt_param SQL hint tips

製品マニュアルに登場するのは 11g からですが、10gR2 から存在していたようですね。