Oracle

予約語と同じロール名を含むダンプファイルのインポート

IMPツールのオプションにGRANTSというものがあり、これは権限をインポートしてくれる(デフォルトはY)。ところがどうも予約語と同じロール名の場合は(ユーザ名も?)ちゃんとインポートしてくれないようだ。 つまりダブルコーテーションで無理やりロールを…

システム日付を固定する方法

OracleではSYSDATEの戻り値を常に同じ値にすることができる。 alter system set fixed_date = "2005-06-29 11:46:50" これで、SYSDATEの戻り値は常に2005-06-29 11:46:50に固定される。これと同じことをDB2でやりたいのだが、できるのだろうか。 なぜやりた…

ORA-12514のなぞ

わからん ORA-12514: TNS:listener does not currently know of service requested in connect descriptor ずっと接続できていたのに唐突に接続できなくなることが昨日今日で2回。環境はOracle10g(Win版)クライアントはWindowsXPと2003サーバ(両方で一回…

インスタンスは起動しているのにEnterprise Managerでログインしようとするとインスタンスが停止していると言われる件について

Oracle10gをローカルにインストールし、startupでインスタンスを起動したのにEnterprise Manager(10gからWebになったやつです)でつなげようとしたらつながらないという現象と一日戦っておりました。 どっかのログを見ると、SYSMANとDBSNMPユーザあたりのア…

ファイングレイン監査

ファイングレイン監査という機能を使うと、テーブル、カラム単位でアクセスを監視することができます。とても簡単。DBMS_FGA.ADD_POLICYというプロシージャに、監視対象を与えて設定。あとはアクセスのたびに、SYS.FGA_LOG$にログが書かれるという寸法。 CRU…

発行されたSQLを調べる

誰かの作った既存のプログラムがどんなSQLを発行しているかを調べようとしています。方法としては二つありますかね。 1) JDBC発行時にログを書く コネクションは外部から渡しているので、JDBCをラップしてログを吐かせるという手はあるかと思います。 参…

utPLSQL

http://oracle.oreilly.com/utplsql Oracle PL/SQLのテスティングフレームワークがあったみたい. いまはC#側でプロシージャとファンクションを全部ラップして,NUnit側でテストしてるんですが,果たしてこの方法が良いのかどうか.まあ,ちゃんとテストでき…

OracleCommand(ODP.NET)とOleDbCommand(OleDB)のトランザクション内での挙動の違い

トランザクション内でIDbCommandを使うとき,ODP.NETのOracleCommandだとそのまま行くのですが,OleDbCommandだとIDbCommand#Transactionにトランザクションをセットしないと次の例外が投げられる模様です. Execute は、コマンドに割り当てられた接続が保留…

.NETでOracleアクセス

ふだんはOracleが提供しているODP.NETを使っているのですが,ちょっと別のプログラマが書いた部分を引き継いだら,普通にADO.NETを使っているようです. 書き換えられるかな. IDataReaderのreaderから,GetSchemaTableを取得して,中を調べてみると,Oracle…

優先順位で寄せる

こういうテーブルのデータ コード,ソース,タイプ 001,インターネット,A 001,インターネット,B 001,街頭,A 002,インターネット,C 002,街頭,A 002,電話,B 003,電話,B 003,電話,C から コード,ソース,タイプ 001,インターネット,A 002,インターネット,C 003,電…

集計地獄.

うーん,ENUM型がほしいなあ.次みたいなDBのテーブルがある 顧客テーブル 顧客コード,希望商品コード A,01 B,03 C,04 D,01 (一意キーは顧客コード.各顧客コードに対して希望商品コードはひとつ) アンケートテーブル 顧客コード,希望商品コード A,01 A,05…

改行の入ったデータをロードする

エクセルをコピペするとタブ区切りになってくれてとても便利なので,エクセルでマスタを管理して,SQL*LoaderでOracleにロードしています.で,セル内改行の入ったテーブルで同じようにコピペをするとそのセルは勝手に引用符に囲まれてデータとして貼り付け…

ENUM型,SET型

MySQLにある特殊なデータ型.いちいちマスタテーブルを切ったり,複数フィールドを用意したり,中間テーブルを要したりしなくて良いので,Oracleでもこういうの使えると楽なんだがなー.

DataAdapter#Fill でInvalidCastException

何が原因なのかよくわかりません.NUnitのテストクラス内で,DataDapter#Fillが「適切なキャストではありません」という例外を投げてDBからデータを取得してくれません. おなじソリューションでもテストクラスじゃないのは問題なくアクセスできて居るんだけ…

データがNULLならSYSDATEを,ある場合はDATE型に変換して投入する方法

データによってロードするデータを変えるにはdecodeを使って場合分けをします.たとえば,col1というカラムなら col1 "decode(:col1, NULL, SYSDATE, TO_DATE(:col1,'YYYY-MM-DD HH24:MI:SS'))" という感じ.

SQL*Loader-605が発生してロードできない場合の解決法

SQL*Loader-605: データに依存しないOracleエラーが発生しました -- ロードが停止しました。 オラクルローダで上記のエラーが発生する場合は表領域のサイズをチェックします.いっぱいになったときとかに起こります.自動拡張にするか,最大値を増やしてみる…

毎週毎週,タブ区切りテキストのデータをOracleのデータベースに登録する.当初いらないとされていたデータを,既存のテーブルの追加カラムとして保存しておかなければならなくなった.テキストデータは全部とってあるのでそのデータを反映させればできるこ…

カラムのリネーム

行おうとするとORA-14155が発生します. 調べるとどうやら9.1以前のOracleでは直接修正は出来ない模様.新規カラムを追加して,データをコピー,旧カラムを削除ってのをするしかないらしい.めんどい. (追記)ちなみにパフォーマンスのことは考えに入れて…

〜の問題

うおっ.すごくありがちな現象が起きてます.「〜」の文字化けです. OracleはSorarisに入っていてキャラクタセットがJA16SJISです.ところがこいつからデータを取ってくると文字化けがおきます.これはWindowsNT系が使っている,MS932というコードが「〜」…

文字列フォーマッティング

数字をn桁でゼロ詰めした文字列に変換するのはどうするのだろうか. nがあらかじめ分かっていれば TO_CHAR(num, '000000000');と書けるので,桁数指定部分に0をn文字列を埋め込めばいいのかと思うのですが,同じ文字列をn個連結する関数はないのかしらん.ま…

ファーストコンタクト

PL/SQLなんて初めて書きましたよ.簡単なことが全然分からんです.配列の添え字が1から始まるんですね(OptionBaseとか指定できるのかなあ).だいたい配列といっておきながら要はテーブルみたいなもんなんでしょ.Oracle特有なのかどうかもよく分からない…

SQL*Loaderのコミットポイント

SQL*Loaderではバインド配列という配列にいったんデータが入り,それがインポートされていく形になっています.デフォルトだとこのバインド配列のサイズで自動的にコミットされてしまうのです.コミットポイントを無制限にし,すべてのデータが正しく入った…

SQL*Loaderで順序を使う方法

このところ,データのインポートの負荷テストをずっとしてます.外注さんが作った仕組みで50万件のテストデータをインポートするのに17時間かかるのを,SQL*Loaderで行うと25分で終わってしまうのを知りショックをうける.まあ,作ったものは別に機能がいっ…