misc.log

日常茶飯事とお仕事と

DB

SQL Server、OpenQueryでのSQLは文字列連結などが使えない?

SQL ServerからOracleにリンクテーブル経由でアクセスしていろいろデータを持ってくる処理を作成中。サーバー名やらスキーマ名やらをピリオドでつないだSQL記法だとインデックスが使えず遅いため、SQL ServerのOpenQuery命令でSQLごとOracleに渡し、Oracle側…

Oracle、to_charで'00000000'に変換したあとのsubstrで桁がおかしい?

Oracleのシステムで、「20160825」のようにnumber型で年月日情報持っているというテーブルがあり、これを別RDBに移植するという作業をやってます。で、このデータを扱う処理では下記のようなto_char処理で年月日を「2016/08/25」に変換していました(下記サ…

ASP.NET/ADO.NETからの実行だと遅いストアドプロシージャ問題、とりあえず解決にめど

昨日書いたこれ……www.backyrd.netSQL Server Management Studioから実行すると1~2秒で結果を返すストアドプロシージャが、なぜかASP.NETのWebアプリから実行すると4分~5分もかかるという問題。とりあえず速度差が無くなったので報告。 対応案 Stackoverflo…

SQL Server、ストアドプロシージャ実行計画のキャッシュを確認する(メモ)

メモです。忘れないように。 SQLサンプル SQL Serverのストアドプロシージャ、実行計画のキャッシュ情報を調べるSQL例。 select * from sys.dm_exec_procedure_stats where object_id='2049442375' order by last_execution_time desc select * from sys.dm_…

Webアプリから実行すると遅いSPが、SSMSからだと速い

※一応解決。最新情報は → http://www.backyrd.net/entry/20160810/1470796194 ちょっとメモ。とあるストアドプロシージャが、Webアプリ(ASP.NET、ADO.NET経由)で実行するとタイムアウトしたりしなかったりなのですが、SSMS(SQL Server Management Studio…

自動生成されたユニークキーをSQL Serverで扱う場合の注意

何かのシステムが吐き出したキー文字列をSQL Server上でキーとして利用する場合、照合順序に気をつけましょう。特にアルファベットを多用したキーの場合、キー重複でやられる可能性があります。SQL Serverで日本語を扱うDBを作った場合、たいていテーブルや…

PostgreSQLの日付型について備忘録

仕事で調べたことをメモしておきます。 年月日時刻を保存する場合につかうtimestamp型ですが、(A) with time zone (B) without time zoneの2通りがあります。 timestamp with time zone DB内ではUTC(協定世界時)で保存。 呼び出しや書き込みの際は処理するク…

SQL Serverの照合順序、略号の意味

SQL Serverの照合順序設定についている「CI_AS」とかって「Case Insensitive」「Accent Sensitive」の略だったのですね……気になるようできちんと調べたことがありませんでした。納得です。こちらのブログで説明されていて知りました。 SQL Server 照合順序の…

文字コード関連の過去エントリー

なんか自分よりずっと前からウェブ関連やってる人たちが全然文字コードとか気にしてなくてノウハウも持ってなくてちょっと参ってるので、とりあえず過去に自分が書いたものを列挙しておきます。何か聞かれたときにさっと調べられるように。 文字コード全般 w…

PostgreSQLのデータベース容量を調べる

お仕事でちょっと調べることになったのでSQLを貼っとく。 select datname, pg_size_pretty(pg_database_size(datname)) from pg_database order by pg_database_size(datname) desc; とりあえずこれでとれるはず。

SQL Server のText型に対するInsertに関する制約は?

お仕事メモ。SQL Server 2012上に用意したテーブルのText型カラムに、長い文字列を突っ込もうとしたところ「入らない」という事態が発生。書き込み処理はLinux上で稼働するPHPから。疑うべきポイントはドライバやSQL Serverの設定やらいろいろありそうなので…

SQL ServerからImage列の内容をファイルとして出力する

SQL ServerのImage型にバイナリデータが突っ込まれている場合、それの内容を見たいと思っても出す方法が見当たりません。先日、そういうデータの取り出し作業があった際はVB.NETでツールを作ったのですが、どうやらSQLからbcpコマンドを無理やり実行する方法…

DTSの定義情報をVisual Studio 2008で確認する(断念…)

結論からいうと、自分の作業環境ではできませんでした。念のため試したことを記載しておきます。参考まで。古いシステムの刷新プロジェクトで、SQL ServerのDTS(Data Transformation Services)が利用されていたので、その内容を見たいのですが…。手元にあ…

PowerCenterのバルク転送モードはSQL*Loaderを使う?

PowerCenterでOracleを転送先にしたデータ転送を行おうとした際に、「索引が定義されています」というエラーメッセージが出てデータ転送に失敗するという現象が発生。調べてもらったところ、データ転送時の設定で「バルク(bulk)」が指定されているとこの現…

SQL ServerからExcelにエクスポートすると先頭空白のデータから空白が消える?

現象等厳密に把握できていないので、とりあえずメモ書き。SQL Server 2012のManagement Studioから、エクスポート機能でテーブルの内容をExcel 2007形式にエクスポートしたところ、先頭が半角空白のデータから先頭空白が消えるという現象がでてしまいました…

PostgreSQLのバージョン情報を確認する

いつも微妙に忘れてて調べなおすのでメモしておきます。すでに動いているPostgreSQLのバージョン確認ですが、下記のSQLを実行すれば取得できます。 select version()これでとれる情報はこんな感じ。 PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled…

CodeIgniterのDB処理でLike検索を行った場合のバグ?

※CodeIgniter 2.1.4での話です(←今現場で使っているのがこれなので…)PHPの開発フレームワークであるCodeIgniterで、Like文を使った検索処理を行った際に内部で生成されるSQLがおかしくなるケースがあることがわかりました。とりあえず忘れないようにメモ。…

だれだよvarcharで宣言したのは。ユニコード文字がDBに入らない

SQL Serverを使った古いシステムの移植作業でDBの定義はそのまま使いまわすということで作業を進めていたのですが、なぜか投入した文字データが化ける。よくよく見てみると型宣言がvarcharになっていました。これですが、SQL Serverだと varchar : 可変長文…

DataTable.Mergeでエラーが出る

CSVで一覧表を出力するASP.NETのアプリで、ちょっと見出しの名前を変えたらエラーが出てしまってしばらく悩みました。 制約を有効にできませんでした。行に入力できるのは、Null 以外の値、一意な値、 あるいは外部キーですが、この制約の違反が 1 つ以上の…

PostgreSQLでの文字列検索に関するメモ

PostgreSQLで、複数テーブル、列にまたがる複数キーワードによる部分一致検索を行う必要があり、ちょっと調べもの。対象は数文字の項目から1000文字を超える長文までさまざまという条件であるため、正直、「速い検索」が実現できるかどうか不安。関連する情…

SQL Serverのストアドファンクションで引数を省略する……使いづらい(笑

SQL Serverのストアドプロシージャでは、引数宣言の際にデフォルト値を設定することで引数の省略が可能になります。たとえばこんな感じ。 @KEYVALUE int, @OPTIONVALUE int = 1 ストアドファンクションも同じように宣言できるのですが、省略宣言した場合でも…

SQL Serverのインデックスサイズは1件900バイトまで

とある設計資料で、巨大な可変長文字列「だけ」のテーブルで、その列が主キー設定されていました。主キーということはインデックスが作成され、インデックス自体にはその内容が転記されるかな?と思ったため、「これはインデックスサイズでかすぎてアウトだ…

PostgreSQLのbytea列にバイナリデータを突っ込む

結論。HEX化したデータをファイルとして取り込もうとしてもうまくいきません。権限が足りませんでした(そして権限を増やせる環境ではないので却下)。どうしたかというと、 事前にText型だけを持つ一時テーブルを用意する。 Vimのxxdコマンドを使ってHEX化…

SQL Server→PostgreSQLのテーブル変換

お仕事で、SQL ServerからPostgreSQLへのDB移設を行う必要が出てきたので、具体的な方法等について確認中。とりあえず、公式コミュニティで関連資料やツールをまとめられていたのでそこを参考にしています。 下記リンクに各種DBとの変換に関する情報がまとめ…

Windows Server 2008 R2上のPHPからSQL Server 2000に接続する

7月に、Windows Server 2008 R2上で動くPHPで作ったアプリから、SQL Server 2000にアクセスできるか?というのを試していたのですが、試行の過程を記録していませんでした。簡単ですがメモっておきます。多分あとで自分が使うので。発端については7月15日に…

PHPからSQL Server 2000に接続する(2015年にw)

2015年に関与した案件で、客先で稼働を続けるSQL Server 2000にPHPからアクセスできるのか?という話が挙がり、調べた情報が発掘されたのでメモしておきます(発掘日: 2021/10/21)。 必要なドライバー等 SQL Server 2000に最新のPHPから接続するには、汎用…

PHPからSQL Server 2000へ接続する

表題の通り、PHPからSQL Server 2000に接続するシステムの実現性についてちょいと調べないといけないのでメモしておきます。今更SQL Server 2000かと思われるかもしれませんが、実際にはまだ稼働しているものはいっぱいあるんじゃないでしょうか。というわけ…

SQL Serverをメンテする作業でAccessを使わない理由

仕事でSQL Serverのデータを確認したり、変更したりすることがあるのですが、この作業にAccessを使う人が結構多くて困っています。いや、できる、できないでいうとAccessで作業はできますし、便利なのもわかるのですが、厳密な調査や確認作業では使いづらい…

SQL Serverのサーバー間ストアドプロシージャ差異調査

ストアドプロシージャを使った開発で、ストアドプロシージャのソース管理や変更管理がうまくいってません。設計資料にも記載が無かったり、そもそもストアドプロシージャでやってるのか.NETでやってるのかも資料上明確でないという状況。というわけで、結構…

Time Based SQL Injection、面白いですね

何に情報を持たせられるか、という観点で考えていくと、データを伝える方法は画面出力だけではないんですよね。 Time-based SQL Injectionは意外に実用的だった/徳丸浩の日記 http://blog.tokumaru.org/2015/04/time-based-sql-injection.html 条件に一致す…