2008年3月21日
ADO + ORACLE SEQUENCE で値が2ずつ増える
VBAからオラクルのSEQUENCEに対し、 .NEXTVALを発行するとなぜか2づつ値が増えていく事象が発生。 SQL*Plusから実行すると1ずつしか増えない。
CREATE文は下記の通り。
CREATE SEQUENCE SEQ_TEST
INCREMENT BY 1
MINVALUE 1
MAXVALUE 99999999
START WITH 1
NOCACHE
CYCLE
ORDER;
「INCREMENT BY 1」で増分値を1にしているし、「NOCACHE」も指定しているので飛ぶこともないし・・・。
おかしいなと思っていたらこちらのサイトでヒントを見つけました。→「電撃羊の'あしあと'」
oo4oで接続したとき、やはり2個飛びになるとのこと。これをヒントに下記の通りのパラメータとして正常に動作する様になりました。
Dim rst As
ADODB.Recordset
Dim strSQL As String
Set rst = New ADODB.Recordset
strSQL = "SELECT SEQ_TEST.NEXTVAL FROM
DUAL"
rst.Open strSQL, GetRDBConnection(),
adOpenStatic, adLockReadOnly
修正前はそれぞれ「adOpenDynamic」「adLockOptimistic」を使用していました。
SEQUENCEを使用するときは、パラメータを変えないとだめそうですね。
↓クリックして頂けるとうれしいです(ワンクリック詐欺ではないです(笑))
人気blogランキングへ
日本ブログ村へ
投稿者 danna : 12:54 | コメント (0) | トラックバック
2008年3月12日
Oracle10g を Windows Vista で動作させる
システムの開発では、実際のプログラムができるまでは紙の資料で画面や帳票の説明をすることが多いのですが、 ユーザ様からすると実際の画面を見ないと動きがわからないということがよくあります。
今回も、Oracle10gで作っているシステムを、急遽お客様先にお見せすることになったのですが、デモPCのOSは 「Windows Vista Business」。クライアントソフトは10.2.0.3からVista対応したようですが、 サーバ側は未対応。(11gでは対応されるのでしょうか・・。)
だめもとで無理矢理インストールしてみました。
1.Oracle10g(10.2.0.1) Standard Editionをインストール。
2.10.2.0.3パッチを適用。
サポート契約していないと入手できません。
3.Windowsファイアーフォールを「無効」に設定。・・・これは必要かどうかは疑問。
プログラムを動かしてみると・・・、動いた!
とりあえずデモはこれでいきましょう。お客様の前で動かなかったらどうしよう(泣)
開発及び本番はWindows2003サーバ上で動作させるので問題ないのですが、 オラクルを使っているとデモの時はサーバーを持って行くわけではないので困りますよね。みんなどうしているのでしょう。 SQLServerだったらExpress Editionがあるので良いのですが。
※注意
オラクルも保証していませんし、真似して障害・ 損害が発生しても私は責任を負いかねます。自己責任でお願いします。
↓クリックして頂けるとうれしいです(ワンクリック詐欺ではないです(笑))
人気blogランキングへ
日本ブログ村へ
投稿者 danna : 00:00 | コメント (0) | トラックバック
2007年11月22日
AccessでSQLServerへのリンクテーブルを作成する
Accessで他DBへのリンクテーブルを作成する際、手動で作るには何の問題もないですが、 PGでリンクテーブルを作成する場合があります。
先日プログラム開発をしていたら、SQLServerへのリンクテーブルを作成する際、SQLServer認証だと接続の都度、 ユーザID、パスワードを入力するダイアログが表示されてしまうことが判明。
実行したソース
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Set defMyTblDef = dbMyDB.CreateTableDef("リンク名"))
defMyTblDef.Connect = "ODBC;DSN=" + p_strDatabase
If p_intCertify = C_CERTIFY_WINDOWS Then
' Windows認証
defMyTblDef.Connect = defMyTblDef.Connect +
";Trusted_Connection=Yes"
Else
' SQLServer認証
defMyTblDef.Connect = defMyTblDef.Connect +
_
";Trusted_Connection=No" + _
";UID=" + p_strUserName + _
";PWD=" + p_strPassword
End If
' リンクパスワードを保存する
defMyTblDef.Attributes = dbAttachSavePWD
defMyTblDef.SourceTableName = "テーブル名"
dbMyDB.TableDefs.Append defMyTblDef
'TableDefコレクションを更新
defMyTblDef.RefreshLink
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
赤字の部分を入れてやるとパスワード入力の画面が表示されません。これは手動でリンクテーブルを設定するときに「パスワードの保存」 をチェックしたのと同じ状態になります。
解決して良かった!
参考ページ→SOHOプログラマのぼやき
↓クリックして頂けるとうれしいです(ワンクリック詐欺ではないです(笑))
人気blogランキングへ
日本ブログ村へ
投稿者 danna : 12:45 | コメント (0) | トラックバック
2007年11月 9日
【Oracle】パケットライター障害
最近技術ネタがすっかり少なくなったと反省しきりのだんなです。
人( ̄ω ̄;) スマヌ
ということでたまには技術ネタを。
先日、 客先に行っている同僚からOracle10gクライアントをインストールしたPCでSQLPlusを使ってDBに接続しようとしたところ 「ORA-12571:TNS:パケットライターに障害が発生しました」 というメッセージが表示されたと電話がありました。
状況としては、
1. Oracle8.0.?クライアントがインストールされているPCにOracle10.2.0クライアントをインストール
2.ウィルスセキュリティZEROがインストールされている。
3.WindowsXP
です。
ネットで調べたところ、どうも2が怪しい。同じような事例が発生している模様。 早速サービスを止めてもらったがそれでも改善しませんでした。
次に疑ったのは1。8.0.?クライアントが悪さしているのでは?と、 いうことで10.2.0クライアントをアンインストールして8.0.?のSQLPlusで接続を試みましたがやはり 「パケットライター障害!」
そこで8.0.?を消して、10.2.0を入れようということになったのですが、アンインストールの方法がわからない。 エクスプローラーでフォルダ毎削除しようとしてもファイルが使用中とのことで削除不可。
しようがないのでWindowsをセーフモードで立ち上げていただき、フォルダ毎削除。
その後10.2.0を再インストールしてもらい無事接続できるようになりました。
ヘ( ̄▽ ̄*)ノ・ ・.♪ヒャッホーイ♪.・ ・ヾ(* ̄▽ ̄)ノ
そもそもXP+Oracle8クライアントというのはNGだと思いますけどね。
この方法、アングラすぎます。 真似して損害があっても当方は責任を負いませんので、同じことをやられる場合には自己責任でお願いします。
↓クリックして頂けるとうれしいです(ワンクリック詐欺ではないです(笑))
人気blogランキングへ
日本ブログ村へ
投稿者 danna : 09:28 | コメント (0) | トラックバック
2007年10月24日
【データベース】銀行マスタを作成する際に便利なサイト
システム開発をする際に銀行情報をマスタ化する事はよくありますが、データをどうするか問題になります。全銀協から有償でデータを買えるのかも知れませんが、ネットでもファイルをダウンロードできるサイトがあります。
データを保証しているサイトではないので、使用はあくまでも自己責任で御願いします。
↓クリックして頂けるとうれしいです(ワンクリック詐欺ではないです(笑))
人気blogランキングへ
日本ブログ村へ
投稿者 danna : 13:43 | コメント (0) | トラックバック
2007年10月 1日
オラクルDBの不具合
神戸新聞のシステム障害はオラクルDBの問題、修正プログラム配布へ
神戸新聞でシステム障害で新聞の編集が出来ず京都新聞にバックアップを依頼したというニュースが先日ありましたが、これはオラクルデータベースの不具合だったようです。
統計情報の採取処理(analyseコマンド?)を実行した後、shutdown abortを実行するとDBが起動しなくなる事があるようです。
実際の運用でshutdown abort(DBの強制終了)をする事があるんですね。せめてshutdown immediateですよね。恐い運用です。
↓クリックして頂けるとうれしいです(ワンクリック詐欺ではないです(笑))
人気blogランキングへ
日本ブログ村へ
投稿者 danna : 15:43 | コメント (0) | トラックバック
2007年9月12日
ODBC設定の自動化
odbcconfコマンドを使用すると、バッチファイル等から設定できるようです。
参考サイト:patagonの日記
VB/Cから実行するにはSQLConfigDataSource()APIを使用します。
・VBサンプル(Windows認証の場合)
Private Const ODBC_ADD_DSN = 1 ' Add a new data source.
Private Const ODBC_CONFIG_DSN = 2 ' Configure (edit) existing data source.
Private Const ODBC_REMOVE_DSN = 3 ' Remove existing data source.
Private Const ODBC_ADD_SYS_DSN = 4 ' Add data source
Private Const ODBC_CONFIG_SYS_DSN = 5 ' Configure (edit) data source
Private Const ODBC_REMOVE_SYS_DSN = 6 ' Remove data source
Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" (ByVal _
hwndParent As Long, ByVal fRequest As Long, ByVal _
lpszDriver As String, ByVal lpszAttributes As String) As Long
Public Function CreateDSN(p_strServerName As String) As Long
Dim ret As Long
Dim Driver As String
Dim Attributes As String
Driver = "SQL Server" & Chr(0)
Attributes = "DSN=" & g_strDatabaseName & Chr(0)
Attributes = Attributes & "Database=" & g_strDatabaseName & Chr(0)
Attributes = Attributes & "Server=" & g_strServerName & Chr(0)
Attributes = Attributes & "Trusted_Connection=Yes" & Chr(0)
' 削除
ret = SQLConfigDataSource(0, ODBC_REMOVE_DSN, Driver, Attributes)
' 追加
ret = SQLConfigDataSource(0, ODBC_ADD_DSN, Driver, Attributes)
CreateDSN = ret
End Function
サンプルはSQLServer用ですが、他のDBでも同じように実行できると思います。パラメータは違うでしょうが・・・。
↓クリックして頂けるとうれしいです(ワンクリック詐欺ではないです(笑))
人気blogランキングへ
日本ブログ村へ
投稿者 danna : 03:00 | コメント (0) | トラックバック
2007年8月29日
@@IDENTITY
IDENTITY句が指定されているテーブルに新規レコードをインサートした後で設定された値を取得したいときに@@IDENTITYで取得できます。
VBA(ADO使用)で、下記の通り記述します。
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = コネクションオブジェクト
.CommandText = INSERT文・・・・①
.Execute
End With
Set rst = New ADODB.Recordset
rst.Open "SELECT @@IDENTITY ", コネクションオブジェクト, adOpenDynamic, adLockOptimistic・・・・②
②のSQLに①のINSERT文も一緒に書いていたら、データは挿入されるんだけどレコードが4件作成されてしまいました。INSERT文と@@IDENTITYを分けたらうまくいきました。原因を追及している暇がなかったのですが、一緒じゃダメなのかな。
↓クリックして頂けるとうれしいです(ワンクリック詐欺ではないです(笑))
人気blogランキングへ
日本ブログ村へ
投稿者 danna : 16:11 | コメント (0) | トラックバック
2007年8月16日
IDENTITY項目に明示的に値を設定する方法
SQL Serverで項目に自動採番するようIDENTITYを設定している場合、通常のINSERT文を実行するとエラーになってしまいます。
下記の手順が必要。
・INSERT句で項目名を全て列挙する。
・SET IDENTITY_INSERTを使用する。
(Ex) Fld1がIDENTITY項目の場合。
SET IDENTITY_INSERT テーブル名 ON
INSERT INTO テーブル名 (Fld1, Fld2, Fld3) VALUE (1, "あいう", 123);
SET IDENTITY_INSERT テーブル名 OFF
Access2003 VBA + ADOで動作確認済。
参考サイト:
↓クリックして頂けるとうれしいです(ワンクリック詐欺ではないです(笑))
人気blogランキングへ
日本ブログ村へ
投稿者 danna : 14:34 | コメント (0) | トラックバック
2007年7月12日
SEQUENCEのインポート
impコマンドでFULL又はユーザ指定でインポートする場合、対象のスキーマに同名のSEQUENCEオブジェクトが存在すると、順序は上書きされません。
もし、ダンプファイル内のデータで置き換えたいのだったらインポート前に予めSEQUENCEを削除しておく必要があります。
これを知らずに、昨日ポカをやってしまいました。(泣)
↓クリックして頂けるとうれしいです(ワンクリック詐欺ではないです(笑))
人気blogランキングへ
投稿者 danna : 09:12 | コメント (0) | トラックバック
2005年5月 6日
最終レコードが重複する
CreateDynasetで作成したOraDynasetオブジェクトで、取得したデータの最終レコードが重複してしまう事象がoo4oのバージョンにより発生する。(8.1.6.0.0で出るのは有名らしいが、9.0.1.1.1.0 で事象発生)
取得したデータ件数が、レジストリに登録されているFetchLimitの倍数になると当該不具合が発生するらしい。
CreateDynaset後、RecordCountをGetすれば改善されるとのこと。(確かに改善。但し、データ取得件数もぜんぜん変わってしまった)
そういえば、6年前に担当していたシステムでまだ7.3の頃同じような事象が出て、下記のような対処をした記憶がある。
CreateDynaset→MoveLast→BOF, EOF判断→MoveFirst
データ件数が多いと最後まで移動する関係上、スピードが遅くなる場合があるので注意。
投稿者 danna : 14:50 | コメント (0) | トラックバック
2005年4月27日
ログインが遅いと感じたら・・・
Windowsで遅いと感じたら、sqlnet.oraファイルの下記設定を見直してみましょう。
SQLNET.AUTHENTICATION_SERVICES= (NTS)
となっていたら、NTSをNONEにすれば改善されるかも。
有名な事象なので、ぜひお試しあれ。
投稿者 danna : 16:55 | コメント (0) | トラックバック
2005年4月19日
【ORACLE】FAST_START_MTTR_TARGET
FAST_START_MTTR_TARGET初期化パラメータにはDBがクラッシュした際のリカバリタイムの目標時間が設定できるが、この機能はEnterprice Editionじゃないと使用できないという驚愕の事実が判明。
<参考文書>
投稿者 danna : 10:55 | コメント (0) | トラックバック
2005年3月23日
マシン名又はIPアドレスの変更
【環境】
Oracle9i Database Release 1 R9.0.1
オラクルのプロセスがすべて停止している状態で実行
【手順】
Oracle Databaseが導入されているマシンでマシン名を変更した場合、下記ファイルの変更が必要。
・tnsnames.ora
・listner.ora
Oracle Intelligent Agentを使用している場合には下記の設定も必要
・$ORACLE_HOME\network\agentディレクトリ内の*.qファイル及びservices.oraファイルを削除
・$ORACLE_HOME\network\admin\snmp_ro.ora及び$ORACLE_HOME\network\admin\snmp_rw.oraファイルを削除。
Windowsでオラクルがインストールされているマシンをドメインに参加させたときは、sqlnet.oraのSQLNET.AUTHENTICATION_SERVICESの設定がNTSになっていると下記のエラーメッセージが出てデータベースに接続できない場合がある。
TNS-12638:資格証明の取出しに失敗しました
その場合には、
SQLNET.AUTHENTICATION_SERVICES=NONE
にすればOK。
投稿者 danna : 13:20 | コメント (4) | トラックバック
2005年2月22日
共有プールのフラッシュ
ALTER SYSTEM FLUSH SHARED_POOL;