Microsoft SQL Server 総合スレ 12
Microsoft SQL Server (Transact-SQL) の総合スレッドです。
・Microsoft 公式サイト
http://www.microsoft.com/japan/sql/ 前スレの993だけど、ここにラージオブジェクト データ型はでてくる
https://msdn.microsoft.com/ja-jp/library/ms187752(v=sql.120).aspx
intやcharと同列で語るもんじゃないのはわかってるよ
なにを指摘したいのかわからん。前スレでも書いたがストアドの引数に使うことのデメリットは知らんぞ
普通のテーブルの列で使ったら1ページ8KBの話に関わるから必要な場合を除き乱用すべきじゃないのは言えるが >>3
お前さんが「LOB型」とかいう俺様用語を使うから
みんなOracleのCLOB型/BLOB型の話かと思って話が混乱した
(「LOB型」でググったらOracleばかりだ)
最初から「ラージオブジェクト データ型」と書いていたら
混乱は避けられたかもな >>3
それ型じゃないよ
ちょっと上に
> SQL Server では一部のデータ型は、格納の特性に基づいて次のグループに分けられます。
ってあるようにグループの名前みたいなもんだから >>4
ああ、最初にLOB型を言い出した前スレ989は俺じゃない(993や995が俺)んだけど、あれへの突っ込みって分かってて突っ込んでる的なやつだったのか
すまんすまん、LOBがなんのことか分からずに素でLOB型ってなにと聞いてるもんかとばかり思った
つかIDないと不便だ、スレ建て時のワッチョイの付け方はわかるんだけどな
>>5
知ってるということを書いたつもりだったんだけどな
そこのMSDNの内容見てそれが読み取れないほど日本語能力に不自由はしてないぞw 何を言いたいのかよくわからんけどスレを跨いでまで引きずるほど悔しかったことはわかった 俺から言いたいことは別にないよ
LOB型云々はいい出した989にいってくれ やたら遅い処理があると思ってトレース見てたんだけど、リンクサーバー経由で前方一致like検索されると、データ全件取得するSQLが流れてるように見える。
なんだこりゃ?
バージョンは2016のsp1 ユーザー定義テーブル関数の中で
SET @p = SELECT A FROM B
みたいな感じで、テーブルの中のデータを変数にぶち込みたいんですが、エラーになってしまいます。
どうやればいいでしょうか? selectが複数レコード返してもエラーにならない罠 プーリング接続についてお尋ねします。
ファイアウォールで一定時間アクセスのないTCP接続を切るようにしている環境下で、プールされていたsqlserverのセッションが切られて、次回接続時にエラーになることってあるんですか?
つまり、自分のセッションがプールされているはずなので無条件に使いにいく動作をしているのであって、あれば使いなければ新たに作るわけではないという事でしょうか? SSMSのクエリウインドウはどんなに長い文字列貼り付けても折り返されないみたいですが
10億文字ぐらいの文字列でもやはり折り返されずに1行で表示されるのでしょうか? ROLLBACK TRANSACTION
をやっても元に戻せない場合ってありますか? シーケンスとか戻らんはず
SQL SERVERで暗黙的にコミットするのなんかあったっけ シーケンスとか戻らんはず
SQL SERVERで暗黙的にコミットするのなんかあったっけ >>22
戻らないと言うかたいていのDBMSはDDLの前後でコミットするから DDL?ロールバックで戻るよ?DROP とかTRANCATEとか。 当たり前だがBEGIN TRANしてないと戻らんぞ
Oracle長かったから
SQL ServerはBEGIN TRANしておけばDROP TABLEもTRUNCATEも取り戻せてびびった DB破損させる可能性はOracleの方が高い
バックアップ取得失敗してると死ぬ Accessはインデックスが壊れてしまった場合、[データベースの最適化/修復]を行うと治りますが
SQL Serverにもそういうコマンドがありますか? indexの断片化とか気にしたことなかった
やばいかな? ★★★貧富格差解消の為には、累進税の税率を国民投票で決めるべきである★★★●
http://jbbs.livedoor.jp/stud●y/3729/storage/1069408696.ht●ml#47
この掲示板(万有サロン)に優秀な書き●込みをして、総額148万円の賞金をゲットしよう!(*^^)v
http://jbbs.livedoor.jp/stud●y/3729/ →リンクが不良なら、検索窓に入れる! 断片化もそうだけど統計情報はちゃんとやらんと泣く
インデックスヒント入れてればまあごまかせるけど、フルスキャンしいのNestedLoopしいので時間かかるわCPUぶんまわるわとひどい目に遭う SSL通してインターネット経由で使うのはありですか? VPNではなく、SQL ServerのSSL使ってポート固定でFW に穴開けて、という想定です SQL Slammerなんてのが流行ったことあったらから
FWで接続元絞れるんならまあ セキュリティがSQLServer自身の認証頼りになるからおススメしない
特定IPのみ接続可とかやるくらいなら素直にVPNにしとけ >>41
なぜかあなたのようなことを言ってしまう方が大勢いますが、明確な理由を説明できないでしょう? 明確な理由も何もフロントの認証より危険なのはちょっと考えればわかるだろ
Webアプリの認証突破されてもまだDBまで到達されない方法はあるが
直でログインされたらもう終わりだ >>43
それ単にWebアプリケーションサーバが挟まる構成を取る意味がわかっていないひとの理屈だよ。 >セキュリティがSQLServer自身の認証頼りになるからおススメしない
個人的にはこの意見に同意するんだが
実際それでどれほどの危険があるかだろ
ありなしの基準をはっきりさせんと何とも言えんわな
SQL Azureのセキュリティってこれしかないんじゃね Azureはサブネットで隔離すりゃ行けるんじゃないの知らんけど だいたい管理者ユーザーを使わせるわけでもないのに騒ぎすぎなんだよな。 SQLの認証にセキュリティホールがあるかどうか、って話だよな そういや3回失敗したら垢ロックみたいなのはないのかね
あっても解除どうすんのとは思うが 普通のSQL Serverなら、パスワードポリシーでロックアウト出来んじゃね
Azureはどうだかしらんが 結局のところ守りたいとこまでの壁を1つにしますか2つ以上にしますか、ってとこじゃないの?
詳しくないから見当違いかもだけど AWSだとサブネットで制限できると思った
Azureは知らん サーバー再起動したら、夜に2時間で終わってた処理が4時間ちょいかかるようになった
dm_exec_query_statsみてもこれだというのが特定できなかったんで、とりあえず統計情報更新とインデックス再構築かけたけどかわらん
パフォーマンスカウンタとってたんで比較すると
・CPU使用率は2時間ave80%だったのが4時間ave80%に
・ディスクIOはPhysical diskのキューも読み書きバイト数も1秒あたりの数値が半減、IO Latch waitも1秒あたりの待ち時間が半減
・メモリはmax、minで割り当てを固定(物理RAMの8割)、Buffer Managerのデータキャッシュをグラフでみると、2時間の挙動がまんま4時間に引き延ばしたかたちに変わった
・ロック待ちのカウンタみると1秒あたりの平均待ち時間が倍増←たぶんここの原因が問題
考えられること、他にみるべきところあったら教えてほしい
どう推論するか悩み中です リコンパイル指定掛けないと統計反映されないとかいう話なかったっけ
それでロック街増えるかはわからんが >>60
アドホッククエリが多すぎるのかキャッシュが1日保たないのでそれはないです
と、書いて気付いたけどプランが変わったとかは考えにくいな
ほぼ毎日コンパイルされるのは前と変わらんし・・・まじでハード絡みなのか、異常があったら通知されるはずなんだけどな、、 手動で止めてたサービスが再起動で動いてリソース食ってるとか
WindowsUpdateとかウィルス対策ソフトとかあやしい >>58
OSを再起動したかの、SQL Serverを再起動したのか、どちらなのか? >>62
サービスの確認はしてないですが、日中は全然負荷かかってないのでリソース喰ってるとかはたぶんないです
メモリはSQLServerに固定で80%分与えてるんで空き10数パーしかないですが(とはいえ10GB前後くらいは空きあり)
>>63
OS再起動です。再起動した部隊に聞いたらOSのパッチ当てたとのこと(OSはWin2012)
そっちの確認が先だった、なに当てたか確認します。 年明けののIntelCPU脆弱性のやつだったらめちゃ遅くなるぞ SQL serverのライセンスに関する質問です。
データベースにSQL serverを使用している
業務アプリケーションソフトがあります。
本部のWindows10のパソコンにSQL server を
インストールし、スタンドアロンでアプリを
動かすのですが、このパソコンで作成した
データをエクスポートし、支社のパソコンに
インポートして使用します。
支社のパソコンにもSQL serverがインストール
されており、スタンドアロンでアプリを動かす
ことが出来ます。
この場合、各パソコンにインストールする
SQL serverは全て無償版で問題ないのでしょうか?
それとも、正規版が必要でしょうか?
正規版が必要な場合、CALは必要でしょうか?
各パソコンはネットワーク接続されていますが、
SQL serverの使用形態は各パソコン個別で、
他のパソコンのデータベースを参照するような
ことはありません。
よろしくお願い致します。 >>66
最新版なら無償版で問題ない
ファイルサイズ10Gの制限だけ気をつけろ どうでもいいけど、無償版の対義語が正規版ってお前... 無償版てExpress Editionよね、それなら商用利用可能だしだいじょぶ
他のEditionならライセンス必要(Developerは商用利用不可) sever osじゃないosでの、他ノードからのアクセスもokだっけ? それはダメ
なおMySQLやPostgreSQLでもダメな模様 それはどっちかっていうとOSのライセンスの問題だからな
この質問はスタンドアロンでやってるからセーフだろう >>74
原則ダメじゃなかった?
プリンタとかの接続は許可されてるけど >>75
例外的にOK
IISもそう
データベースサーバーはダメ
IIS経由のデータベースとかは知らん 考えてみたら、mdbファイルとかSQLiteとかをIIS経由で使うのはOKてことになるのかな
なんだかな でも小規模な会社でもなけりゃだいたいのところは買ってるんじゃないの
ファイルサーバにしたってCAL不要のWindowsStorageServerじゃスペックきついし
サーバ毎に必要なわけじゃないしユーザ分なりデバイス分なり買うもんじゃないのかな >>79
すまん
Windows Server CALの話に乗っかったつもりだったがクライアントOSの話だったね 【悔日企業ヘイトバンク】 父は犬、兄は黒人、白戸は白洲、私たちはあのCMを見るたびに侮辱されていた
http://rosie.5ch.net/test/read.cgi/liveplus/1545098183/l50
I T 業 界 の B T S 問 題 浮 上 ! DECLARE @TABLE TABLE = TABLE01;
SELECT * FROM @TABLE;
みたいなことは出来ないです?
同じ構成のテーブルを条件で切り替えて使えないかなと。
sp_executesql を使って SQL を文字列で合成する方法は知っていますが、正直めんどくさい。。 ・SQL Server Express自体の接続数は無制限
・Windows 7、8、10 OSにインスコの場合、接続数は20まで
・Windows Server OSにインスコの場合、接続数はCALに依存
らしいぞ。
sql server express 接続数 windows10 ググれ システムエグゼ
苦情申し立てダイレクト窓口
代表取締役社長 酒井 博文
h-sakai@system-exe.co.jp
専務取締役 大場 康次
yohba@system-exe.co.jp
専務取締役 後藤 清孝
kgotou@system-exe.co.jp
取締役 藤林 隆司
rfujiba@system-exe.co.jp
rfujiba2@system-exe.co.jp
取締役 荻野 弘昭
h-ogino@system-exe.co.jp
取締役 新船 幸広
arafune@system-exe.co.jp
arafune_PJ@system-exe.co.jp
監査役 白銀 亨
sirokane@system-exe.co.jp LDHから新発売の「EXSUPPLI BLOCK」「EXSUPPLI PARTY」ゼビオ・ヴィクトリアの全店舗で11月29日(木)発売開始! select *
from テープ゛ル
where 日時>getdate()
みたいな感じに getdate() を使ったとき、
1行ごとに(その瞬間の)getdate() と日時が評価されるのか
SQLが走り始める瞬間のgetdate()を得て、その単一の値を使って評価されるのか、どっちでしょうか? >>87
後者は保証されてないはずだから前者じゃね >>87
それは動作不明、意図が曖昧だからやらない。あらかじめ日時を取得してから条件値として用いるのが普通。 >>87
同じ結果が返り続ける関数を延々と使うのは開発者としてありえない。時間がすぎて変わることを想定しているのかどうかもSQLから読み取れない。 何万行入ったテーブルに select *,getdate() from table やるとgetdate()の結果は全行同じだから後者と思われ 一応1300万行超のテーブルで確認したけどgetdate()の結果は全行同一でしたw getdateは非決定的関数のはずだが、実行計画次第で1回しか評価されてないのかも ただの読み取り一貫性を保つためだと思うけどな。SELECTをし始めた時点と条件の日時が異なったら、結果のデータをみたら一貫性があるのかどうかわからなくなる。
こんなSQLを書くやつはプログラマではない。 >>95
読み取り一貫性ってどういう意味で使ってるんだ?
その理屈だとたとえばRAND関数で評価してもすべて同じ数値で評価されるのか? >>96
RAND関数そのものが常に同じ値を返す関数だとわかってる? RANDは評価するたびに違う値を返す
select RAND(),RAND() とかやればあきらか
GETDATEも同じ値を返すとは限らない非決定的関数
ただ手元で試した範囲では、>>91のようなSQLだとComputeScalarの実行回数が1回になる
つまり、関数が1回しか評価されていないから、同じ値なのは当然
これは保障された動作じゃないはずだから、それらの関数が同じ値を使う保証はないと思うが
ないとは言えないはずだが、実際に複数回評価される状況があるかどうかわからんな
パーティション分割されたテーブルとかでパラで評価されるような状況だと違う結果にならないか誰か実験してみれくれ >>100
ベテランプログラマのなかにもループの中で今日の年月日を取得し続けるやつがいるからなあ。
しかもそれ日次バッチ処理w そりゃベテランにもアホはいるだろ
たいてい淘汰されるんだけどお前ん所が生き残れる環境だっただけ カラムストアインデックスの検証したけど、単一の表にアクセスするだけのSQLだと劇的な効果出たけど、複数の表を結合した複雑なクエリには無力だった。これって常識? >>103
全部ひとつのテーブルにまとめてしまえばよいw >>105
リレーショナルデータベース完全否定やん 実際縦集計速くするための仕組みだから
そういうテーブル設計が正解でしょ
必要な項目が全て存在する集計用データマート VPSにSQLServerをインストールして、外部接続可能な設定はしました。(パワーシェルでポート指定で疎通確認済み)
また、SQLServer認証も設定済みです。
@@servernameで取得した名前が db1
VPSのアドレスが1.1.1.1
開放したportが1433
だとして、自宅のPCのSSMSからVPS上のdb1に接続するには、サーバー名にはどのような記入をすれば良いのでしょうか? >>110
デフォルトインスタンス(MSSQLSERVER)なら
VPSの外向けグローバルIPだけでOK
VPS側のファイヤーウォールで自宅側ルータのIPに絞っとかないと
アタック受けるから注意しろ >>111
無事、接続出来ました。セキュリティの件もアドバイスありがとうございます。 >>113
ただのインデックス付きビューではたいして変わらないだろう。
SQL Serverはマテリアライズドビューが最新版でもないのかな?
そのときの最新の一貫性のとれたデータが必要でないなら、更新がかからない時間にでもコピーを作っておけばよい。
または目的のSQLを更新がかからない時間に実行して結果を取得しておく。 いったん対象範囲を#テーブルに切り出して、それにインデックス張って・・・ってのは時々やる ツイッターやネットでテクノロジー犯罪と検索して、まじでやばいことを四代目澄田会の幹部がやってる(アメリカではMKウルトラ計画)
被害者に対して暴力団以外にタゲそらしをしてるがやってるのは暴力団で普段外に出ることが少ないため遊びで公共の電波と同じような電波を使って殺人をしてる
統失はほとんどが作られた病気で実際は電波によって音声送信や思考盗聴ができることが最近明らかになりつつある
警察や病院では病気としてマニュアル化されてしまっているのが現状で被害者は泣き寝入りしてる
被害者がリアルタイムで多い現状を知って、被害者間でしか本当の事だと認知できていない
実際にできると思われていない事だから、ただの幻聴ではない実際に頭の中で会話ができる
できないことだと思われているからこそ真面目に被害を訴えてる
海外でも周知されつつあることを知ってほしい。
このままだとどんどん被害が広がる一方
#テクノロジー犯罪
#四代目澄田会
#拡散希望
[参考]
https://black.ap.teacup.com/yamisiougn01/6.html
https://tekunoroji-hanzaihigai.jimdo.com
https://blogs.yahoo.co.jp/patentcom
https://twitter.com/celesty_cs 👀
Rock54: Caution(BBR-MD5:f70dfdc711a7c6ae6accccb939f27fbf)
https://twitter.com/5chan_nel (5ch newer account) not exists句とexcept演算子ってほぼ同じものでしょうか?
どちらかがあればもう片方は無くても特に困らないですかね? >>118
求める結果が同じあればまだいいが、2つはまったくの別物。 「ユーザー定義データ型」ってのがあると思うんですが、
そいつを含んだものを C# 側から ExecuteReader() とかで SELECT 取得したとき
各列のユーザー定義データ型を調べる手段ないでしょうか。
CREATE TYPE [dbo].[JAN13] FROM [char](13) NOT NULL
みたいにして、この列を含んだ行を SELECT したとき
char[13] じゃなくて [dbo].[JAN13] という定義名を得たいのです。 同じバージョン間でバックアップ、復元を行っていますが
何故かバックアップを作成した時点ではなく少し前の状態で復元されてしまいます
フルバックアップしたものと聞いているので最新の状態で復元されるものと考えていますが
バックアップの取り方に問題があるのでしょうか?
ちなみに復元する側はDBを一旦削除してから復元しています 自己解決しました
復元の際にタイムラインでバックアップポイントを最新に指定していなかったことが原因でした
デフォルトで最新になるものだと思い込んでいました SQL Server で SSD 使ってる方おられますか?
書き換え可能回数も随分と伸びたと聞くので、そろそろ大丈夫なのかなぁと。
HDD も併用するんなら、トランザクションだけ HDD に逃がしたほうがいいですかね? >>123
SSDの寿命って突然死するのか?
なんにしてもデータ保護考えたら単一ディスクはあり得んし >>123 は単にSSDを使ってもよいのかどうかという質問なんだろうね。スマートフォンのストレージがHDDでないことに疑問を持たないのかね? スマートフォンはSSDだったのか?
てっきりメモリかと思っていた コンシューマー向けのTLC/QLCを使うなんてことがなければいいんじゃないかとは思うが
3DXpoint高いお… >>125
目的は高速化しかないと思いますが・・・
投資の優先順位は
メモリー>ストレージ>CPU だと思ってます。
メモリーマンタンなので、次はストレージをと データベース丸ごとキャッシュに乗るべきと思って
96GB まで積み増したのですが、最近はストレージへのアクセスが増えてしまったので。 >>133
メモリ上のバッファキャッシュが多ければ、ストレージのIOデータ量も増える。
データ量が大きくなって遅くなっていることをハードウェアでどうにかしようとするのは根本的な解決になっていない。 データ量が増えてメモリを食うようになった⇒ストレージへの I/O が増えた状態への有効な対処法ってどんなのがあるんだろう。
素人な自分としてはこれは本気で知りたい。
まえに環境の検討をやってたときに、 tempdb を SSD 上に置いたことはあった。
結構かなり速かったよ。本番環境でやっていいかどうかは知らないけど。 >>135
まずは無駄な検索とか更新をしてないかとか
インデックスがちゃんと効いてるかの確認
あとは物理的に複数のデバイスに分割してI/O処理を分散する
そのとき各デバイスで片寄らないように配置するキーを上手く選ぶとか データが増え続けても性能問題は起こらないという発想がおかしい。
性能問題が発生してSSDにするというのは、その場しのぎでしかない。 >>136
ああなるほど。
ひとつのストレージの上でなんとかすることしか考えてなかったよ。
参考にします。ありがとう。 DB初心者なんですが、質問させてください。
最初のSQL Serverをインストールし、DB・テーブルの作成、レコードの挿入・更新・削除までやってみました。
次にプログラムからSQL Sv.を操作してみようと思い、C#からレコードやテーブルの操作をしてみました。
ここで気づいたのですが、実運用においてプログラムからDBを操作するケースって、基本的にはレコードの操作くらいでしょうか?
というのも、DB・テーブルの作成はシステムを構築する際には技術者がSSMSなどで行いうと思いますが、
プログラムがやることってシステムが稼働する段階になって、
ユーザーの操作に従ってレコードの挿入・更新・削除くらいかなと思いましたので。
DB技術者の先輩方、よろしくお願いいたします m(__)m >>139
一時テーブルを作るとか普通にあるけど?
てか、一番多いのは検索だと思うぞ >>140
一時的テーブルってどんなケースでしょうか?
自分がイメージしてるのは↓みたいな感じですが、実際こんな感じでしょうか?
例えば商品を扱う時に
◆登録時
商品(+カテゴリ)のレコードを追加、
もしくは既存レコードの数量を更新
◆検索
SELECT 〜 WHERE で商品検索。
表示されたものを並べ替える時に、上記SELECT分に ORDER BY 〜 を追加。 SQL serverをデータベースに使用している業務用アプリを
Windows7+SQL server 2008R2EXPRESSの環境で動かして
いましたが、今回、Windows10+SQL server 2016EXPRESSに
移行したところ、途端にアプリの動きが重くなりました。
いろいろ調べた結果、移行時に、SQL server 2016に2008R2の
データベース完全バックアップを復元した際に互換性レベルを
「2016」にしたことが原因で、これを「2008」に下げるとサクサク
動くようになりました。
そこで質問ですが、SQL server 2016EXPRESSに復元したDBの
互換性レベルを「2008」で動かしても特にリスクはないでしょうか?
そもそも互換性レベルは「2016」で動かす方が望ましいのでしょうか?
よろしくお願い致します >>142
調べたから見たはずだけど、2016を2008互換で動かしていたら、ただの問題の先送り。 >>142
暫定的にはいいけど、そのままだと次のバージョンアップの時に苦労するぞ >>143
>>144
ありがとうございます
さらにテストをしたら、互換性レベル2014までは正常に動きますが、
2016になった途端、動きが極端に重くなることが分かりました
問題の先送りにしかならないにしても、暫定措置としては、
なるべく互換性レベルは高い方がいいでしょうか?
それとも、2016でなければ、2008でも2014でもさほど変わりませんか? >>145
本当に互換性に問題のある使い方をしているのかどうかを調べるのが基本だよ。 >>145
便所の落書きに判断を求めるなよ
正攻法なら最新に合わせて改修するだけだし
コストがかけられないなら確実に動作する状態でリプレースを待つだけだろ そもそもそれホントに互換性レベルの問題なのか?
2016出てだいぶ立つから、メジャーな問題ならもっと話題になってると思うが 実行プランに影響するから>>142の環境だけで発生するとかもあり得る その後、同じ業務用アプリケーションで、以下のような環境移行を行い、
サーバ:Windows server 2008R2→Windows server 2016
SQL server:SQL server 2008R2→SQL server 2017
クライアント:Windows7→Windows10
互換性レベルをSQL server 2017にしたところ、やはり動きが
極端に重く(遅く)なり、互換性レベルをSQL server 2014に
下げると正常なスピードになりました
データベースがSQL server 2014までは互換性レベルなんて
意識したことなかったけど、SQL server 2016以降において
急に引っかかるようになった感じですね >>150
だから製品の何が変わったのかマイクロソフトの情報を見ているのか? どこのSQLで遅くなってるかとかの確認もしてないんだろ? 例えばどんなSQLがどのくらい遅くなったのか、そのときの実行計画は同じなのかぐらいは調べてさらせよ 確か遅いSQL一発で出せるやり方あったよな
事前にフラグ立てなきゃいけなかった気もするが 言っておくが彼はSQLが遅くなったとは一度も書いていない。 そもそも何も書いてないから切り分けろって言われてるんだが… DBでSQL実行が遅くなる以外に何が遅くなるって言うんだ…? >>160
可能性は低いだろうけど接続に時間がかかるようになったとかメモリー足りなくてスラッシング起きてるとか まあまずはなにがどう遅いか調べんと話にならん
あとはリストアしてからなにしたかだな
ほんとに互換性レベルだけで遅くなるとは思いにくい >>164
DBの機能が遅い以外何があるってんだよハゲ >>165
データベースは外部からSQLが発行されなくても、ただ動いているだけでもメモリ上のデータを定期的にファイルに書き込む。余裕があればファイルからデータを読み込む。
いっぱいあるがとにかくデータを失わない、データの整合性がとれなくならないようにする処理等があるんだよ。 >>166
で?
それはDBの機能じゃねえのか?
大体そんなバックグラウンド処理なんて四六時中走ってねーよこじつけんな Express版でオンラインバックアップ取る技ってないの? DBエンジニアの業務ってどんな感じですか?
↓みたいなイメージで合ってます?w
設計時:忙しい。責任重大。
開発中:DBのインストールやテーブルの作成が済めば、トラブルなければ特にやることない。
※開発中はC系のエンジニアなどがPG内にSQL文を書いてあれこれやるのをイメージしてます。
運用時:トラブルなければ特にやることない。
よろしくお願いいたします。 >>171
インフラ寄りなのか、アプリ寄りなのかでまったく違う。
ただ本来はどちらにも深く関わるのがまっとうなデータベースエンジニア。 ソフトの応答時間って結構重要なのに後回しにされがちなのね。
最後の最後で死にそうな顔して調整しまくってる DB エンジニアさんて結構ありがちと言うか。。。 >>173
そういう区別もあるんすね。ありがとうございます。
ちと調べてみまふ。 >>174
開発の上流から下流までチェックし続けないと、クソみたいなDB設計とクソSQLのてんこ盛りで、データ量が多いシステムだと死ぬ。 メンテナンスプランによる、インデックス再構築、統計の更新、完全バックアップあたりの
処理は毎日やってますか?
毎日やるのはバックアップだけですか? SSIS使いたいんだけど、SSDTをインストールしないといけない。
これは手持ちのクライアントPCにできないのかな?SSMSみたいに。
インストーラ立ち上げると「SQLServer データベース」が必須になっているよ。 >>177
完全バックアップ以外は週一でいいんじゃないの?
もちろん、DBのサイズや用途にもよるけど。たしか、ウィザードはそんな(週一)がデフォルトだったと思う。
うちは完全バックアップを毎日とっている。 >>178
SSISはSQL Serverが必要というよりは、Visual Studioが必要なんだよ。
Visual Studioは入ってるのか? >>178
SQL Serverは伝統的にサーバーソフトウェア、クライアントソフトウェアを作り分けていない。 >>180-181
サーバのリソース食うのは避けたいので、クライアントでパッケージ作成したかったの。
慌ててVS2019のCommunityインストールしてSSDT入れたら
要求されたメタファイル操作はサポートされていません。 (0x800707D3)
(涙) 最近VSCodeでSQL書いてるけどこれすげえいいな
補完もするし複数列にCASTだのISNULLだのつけるとき
マルチカーソルが便利すぎる
SQL発行の結果が帰ってくるのはManagement Studio
のが速いけどVSCodeのが起動速いし
実行計画見るときぐらいしかSSMS使わんくなった >>150
リプレース時の互換性レベルの変更は危険。
チューニング済みの SQLほど実行計画ボロボロになる。 ロール作成しようとしてるんだけど、Viewに対しては全DDL,DMLを許可し、Tableに対してはそれらを許可しない、っていう内容。
公式サイトをずっと見てるんだけど、オブジェクト単位で設定しないとダメなんだろうか。 なんかのソフトにバンドルされてるSQL serverてそれ単体でも使うことができる。
例というとPCに弥生会計をインスコしたらSQLserver2014SP2 ExpressEditionてのがインストールされたんだが。
同じPCにwordpress入れようと思うんだが、このSQLserver兼用できるのかな? ログインの認証周りが大丈夫ならいけるのでは
というかExpressインストールされるのはいいが、saにパスワード設定されていたら泣く 普通はWindows認証でadministratorで入れる 189ですが、1台のPCにSQL serverと弥生会計いれて、もう一台のPCに弥生会計を入れて、
2個の弥生会計からSQL serverをつつく作りになってるんだけど、
こういう場合て、ネットワークて同一セグメントで使うもの?
弥生会計の取説だと「同一セグメントで」て書いてあるんだが、ためにしもう一台をVPN接続越しで接続してみたり
SQL serverをAWSに置いてみたら激重になったんだが、DBてそういう使い方しないもの? >>195
今時の回線事情考えたら
DBの問題じゃなくアプリの設計の問題の可能性のが高い >>195
実際にできるできないはあなたの会社のセキュリティポリシーによるけど、
vpnで直接連携なんて怖くてやらない
同一セグメントでないとダメかといえばそんな事はない
しかし、FW、L3SWの設定はもちろん必須 弥生はどうか知らないが、SQL ServerをVPNの向こうに置いてもそれほど遅くならないよ。 AWSってSQLサーバのサービスをやってくれるの? >>196
アプリ設計の問題みたい。
https://yayoi-k.jp/yayoi-network/vpn/
DBを1拠点だけで突く設計みたい。複数拠点の場合はリモートデスクトップだ。 5席規模のデータ入力で
SQL Server Express使おうとしたら
「無償版とか信用ならん!!!」
って言って上司がライセンス購入しようとして聞かない
その割にベンダーからの見積もり30万って見て
高すぎ!安くして!と言ってくる
なんとかなりませんか、、、 >>201
「お前はバカか」と言ってやれ。
無償版が信用ならんのなら、オープンソースは全部だめ。
アンドロイド携帯もルータもNASもオープンソースだらけだぞってね。 >>201
言ってくるってお前の立場は何なんだよ
値段の文句は見積もり出したベンダーに言えよ >>203
おそらくベンダーのソフトの見積もりは妥当なもんだと思うよ。
作業料金とかの方でぼった食ってる場合が多い。 >>201
なぜSQL-Server Expressを入れようとしてる奴がベンダーから見積もり取ってるんだ?
普通にMSから直接買えばいいだろ
5席ぐらいならCAL入れても20万もかからん
https://www.microsoft.com/ja-jp/sql-server/sql-server-2017-pricing >>205
20万でも高いとか言われそうな案件の悪寒 >>201
だが皆レスありがとう。
こんだけ来るとは思ってなかったw
俺は案件に絡んでなくて
アドバイスを求められてるだけなんだ。
だからExpressを勧めた。
Expressを信頼できない無償版と言ったのは上司。
見積もりを取ったのは別の社員。
確かに作業費等々でボッタ食られてることも
伝えたんだけど金のこと言うなら
Express使えよって思ってさ… 経験浅いので教えて欲しいのですが
ストアドの中でテーブルAにデータをINSERTしているのですが
エラーが起きるとロールバックされて消えてしまいます。
これを消える前に取得する方法はあるでしょうか?
例えばロールバックされても消えない特殊なテーブルB(構造はAと同じ)を作っておいて
このテーブルBにもINSERTしておくとかは出来るのでしょうか?
そもそもそんなテーブルは作れないのかもしれませんが・・・ >>208
コミットすりゃいいんじゃね?
てか、何もしてなきゃinsert自体が成功してたらその後のエラーでロールバックなんてしないはずだが… >>208
問題なければINSERT直後にCOMMITしてしまうか
そもそもトランザクション処理をしなければ良い ストアド内ならエラーキャッチしてうにゃうにゃできるかもしれんが
まあトランザクションの設計が悪いな システム自体が巨大でストアドを入れ子で何階層も呼び出していて、割りと下位のストアドでエラーが起こっているのです。
業務データが壊れる可能性があるので中途半端な状態でコミットはできないです。
そもそも何階層目でトランザクションが開始されてるのかもわかりません・・・ >>207
Expressはdbのサイズが10GBまでという制限もあるから、そもそも収まるのかという話もあるけどね
アプリケーションのデータ格納用としては結構使われてるし、実績的には申し分ないよ
だけどサポートや問い合わせは受けられないので会社のルール的に保守契約できないものは採用できないって事はあるよね >>213
要件次第
Expressの1番の制限は>>214の言うDBサイズ
まあ10GBってそこそこのサイズだしインスタンスは複数作れるので工夫次第である程度回避できたりするけど
あとは使用するメモリーが制限されてるとかフェイルオーバーができないとかあるから自分で https://docs.microsoft.com/ja-jp/sql/sql-server/editions-and-components-of-sql-server-2017?view=sql-server-ver15 とかを見て判断すればいい そもそもそのテーブルの値をとってどうしたいんだ?
まあざっと思いつくと
エラーの出るところだけ子トランザクションにする
エラーキャッチしてなんとかする
@変数にとっておく
事前にコミットする
そんなとこか
思いつきだから実際どうかはそれぞれ試して決めろ
ストアド内から別トランザクションはちょっと難しいし、出来てもやるべきではない
ロールバックされないテーブルとかもない(シーケンスとかはロールバックされないけどな) いつのまにか、SSMSでストアドのデバッグできなくなってるんだが
みんなどうしてるんだ? Standard版だと40万円以上するのがExpress版だと無料って
一体どうなってんの、この会社? SQLOLEDB、MSDASQL、SQLNCLI11
接続プロバイダどれ使ってる SQLOLEDB
どこがどう変わるかよくわからん
プロパイダごとの機能差とかだれかまとめてくれ Windows10でSQLServer2017ExpressのDATAフォルダがエクスプローラで開けなくなりました。
コマンドプロンプト等でどうかは確認していません。
UACで警告されるのは知ってたんですが、インストール直後のデフォルトの状態で、フォルダが開けませんでした。
同型機を2台設定していて、1台は開くことができました。
C:\Windows\Tempも同様でした。 途中で送信してしまいました。
会社のPCで別の担当がセキュリティソフトまでは導入済で、SQLServer2017Expressをインストールして動作確認しようとして気づきました。
管理権限のあるユーザでセットアップしていたつもりですが、VirtualStoreへのセットアップになっていたとかあるかもしれません。
本日から休暇になってしまって詳細に確認できていません。
直接SQLServerとは関係ないことかもしれませんが、どなたか解決策に思い当たる方いらしたらご助言ください。 開こうとしたフォルダのアクセス権確認する以外に何があるというのか >>233
>>230-231の質問者です。
質問を短く言えば「アクセス権確認する以外に何があるか」という質問です。
アクセス権はAdministratorsにフルコントロールがついていて、Administratorsに所属するユーザだったと思います。
セキュリティ以外にも、ファイルやフォルダの読み書きには、排他制御がかかることがあるから、何らかの処理中だと可能性があるとも考えていますが、再起動しても変わらなかったので、処理中の可能性は低いと思います。
ActiveDirectory環境なので、その不具合も考えられるかもしれません。
>>232
同じときに同じ仕様で購入したPCに設定していてということです。
一方は問題なく操作できて、もう一方がダメでした。
開梱時からの操作が同じかというと、異なっている作業が行われた可能性はあります。 そもそも2017EXPRESSのデフォルトのデータディレクトリってどこだ?
まあ、そこにインストールしたかどうかも怪しいけどな >>234
ADのアカウントに対してローカルの管理者アカウントが存在しているのか? >>236
そこは問題ないはず
2つのPCともにADの機能で該当ユーザに管理者権限を付与している
管理者権限じゃないとリモートデスクトップが使えない設定にしていて、リモートデスクトップも使えているから管理者権限はあることになる
個々のPCでセキュリティ設定すると漏れがあるからADのグループポリシーで設定するのを基本にしてます。 フォルダの所有者をAdministratorsに変えれ >>239
デフォルトだとLOCALSERVICEとかですかね
>>238
インストールした自分のアカウントがAdministratorsに所属するんで、Administratorsではないかと思いますが、確認してみます。
仕事納めの日に慌ててセットアップしていたので確認が不十分です。
年を開けたら振替出勤なんで、確認して報告させていただきます。 LOCALSERVICEのアクセス権はどうなってると? >>230
うろ覚えだけど、UAC効いていてAdministrator以外でアクセスしている(Administratorsのメンバーのユーザーではない)場合はUACを切るまたはAdministratorでアクセスしてみるとひらけるかも?
Windows10だとデフォルトではAdministratorが無効化されているので有効化してね(作業終わったら無用なトラブル避けるためもとに戻す)
開けたら管理用にグループ作ってフォルダにアクセス権に追加しておく
そして管理させたいユーザーをグループのメンバーにするとUAC有効にしてもアクセスできるようになる
サーバーOSでやっていた内容だけどクライアントOSでも同様のはず
間違っていたらゴメンネ >>242
UACは無効にしていたつもりですが確認してみます。
SQLSeverとCAMをインストールしていて、CAMは無効にしてと指示がありましたが、もしかするとSQLSeverインストール時は、UACが既定のままだったかもしれません。
Administratorでは試していないので確認してみます 試してないけど思いますかもしれません
話にならんな
そもそも特定のディレクトリが開けないってはなしで、本質的にはSQLServerの話じゃないし
開こうとしたフォルダに対する開こうとしたユーザのアクセス権確認するしか確認方法なんてないよ
なぜそのアクセス権になったかはその次の話だ Windows10でSQLServer2017ExpressのDATAフォルダがエクスプローラで開けなったと言った者です。
休み中に確認するつもりでしたが、手が回らず、休み明けになってしまい申し訳ありません。
結論から言うと何も問題無しにフォルダは開くことができました。
Windows10の設定には特に問題なかったようです。
他でも類似の不具合が確認されました。
明確にADの管理者から回答を得ていませんが、ADに何か不具合があるような感じです。
アドバイスを頂いた方ありがとうございました。
その他の方、スレ違いで失礼しました。 SQLServerをHyper-V上で動作させたときの不具合事例を一つ報告させていただきます。
今まで、WindowsServer2008のHyper-V上で動作させていたSQLServer2008R2を最終的にWindowsServer2012R2のHyper-V上のSQLServer2017にアップデートしたところ、著しくパフォーマンスが低下し、クライアントプログラムからタイムアウトが頻発しました。
Hyper-Vのメモリ割り当てを動的にしていたのがパフォーマンス低下の原因だったようです。
よくよく考えるとSQLServerは特に制限しなかった場合、許す限りのメモリを消費するので、仮想サーバのメモリを動的にしていても上限値まで使い切ってしまうので、初めから最大値を割り当てるべきでした。
ネットで多少情報はありましたが、皆さんもこんな不具合はあったことありませんか
SQLServerのパフォーマンス比較ってMSの許可なく公表できないことになってるから、あんまり情報無いんでしょうかね >>249
単純なバージョンアップだけだと著しく動作速度が遅くなるって話
バージョンアップで遅くなる話はよくあるけど普通は数パーセントレベルだと思うけど何百パーセントて感じで遅くなりました
Hyper-V使い慣れている方には当然なのかもしれなけど今回初めてだったもので上げてみました
2008にする前はVirtalServerだったんでHyper-Vに乗り換えた時は問題になりませんでした 一般的にそれは「単純なバージョンアップ」とは言わないと思うぞ >>251>>252
分かり難くてすみません
Hyper-V仮想マシンはそのままでしたよ
今回は、ホストOS2012R2上のHyper-V仮想マシンのOSを2008から2012R2に変えて
SQLServerは2008R2から2012R2に変えたって話です
ソフトのみ更新で、すごく遅くなったのでHyper-V仮想マシンの設定を変えました
3か月ほど前にホストOS2008のサーバから2012R2のサーバへ移動させました
その数年前がホストOS2003でVirtalServerでした
このくらい変われば物理構成変更と思うんですけどね Sqlserverのバイナリ型は例えば本当にバイナリだけをdbに入れるのでしょうか?
アクセスのOLE型みたいにOLE型ヘッダーを付け加えたりしないのでしょうか?
ファイルのバイナリだけを保存してくれればいいのですが。 >>254
そんなの製品の仕様で、データファイルを直にいじろうとするのがおかしい。 バイナリデータを格納したいってだけで、データファイルを直で弄りたいとか言ってないけど?
つかADO.NETスレの人か
出来るかできないかで言えばできる
あとFILESTREAMとかいう機能もある >>256
そうです。バイナリ型はつかったことないので手探りで調べています。
(1)適当なエクセルファイルをSQLで格納
例)副問い合わせでエクセルファイルをかきこみ
SQL
INSERT INTO [Test].[dbo].[BlobTable](Data)
SELECT BulkColumn
FROM OPENROWSET(BULK N'C:\work\Book1.xlsx', SINGLE_BLOB)
それからc#から読み込みファイルをかきこみ。
connection.Open();
command.CommandText = @"SELECT [Data] FROM [Test].[dbo][BlobTable]";//SQL Dataはバイナリ型
byte[] data = null;
data= (byte[])command.ExecuteScalar();//読み込み
string tmpdir = Path.GetTempPath();
var Tempfile = Path.Combine(Path.GetTempPath(), "tmp.bin");//テンポラリのパス設定 ファイル名はtmp.bin
System.IO.FileStream fs = new System.IO.FileStream(
Tempfile,
System.IO.FileMode.Create,
System.IO.FileAccess.Write);
fs.Write(data, 0, data.Length); fs.Close();
これをtmp.binとBook.xlsxを比較して(ファイルの中身がおなじことを
確認できました。PDFやWORDなどバイナリとしてSQLServerに
格納したかったのです。おさわがせしました。 sharepointはblob型でドキュメントファイル保存してたな ちなみにアクセスで失敗した点はおっしゃるとおりOLEのヘッダーを
削除しなければならないようです。マイクロソフトプログラミング
ASP.NET4のP140にかいてありますね。ためしていないのですが
書き込むとたしかに元ファイルとアクセスに書き込んだバイナリと比較すると
違うみたいですね。 データベースにバイナリデータ入れると
データベースが肥大化して扱いにくくなるぞ。バイナリデータは外部にもってデータベースには保存先パス情報だけもつほうがいい。 バイナリ項目を含んだSELECT文は取得結果に時間がかかる。
ローカルネットワーク内なら速度はでるだろうが
ルーター越えだとメチャクチャ遅くなりユーザーから遅いと文句言われるぞ データベースの中に突っ込むと権限とかバックアップとか移行とかがラクチンすぎるので
容量が許せば積極的にデータベース内に保管したい。 >>バイナリ項目を含んだSELECT文は取得結果に時間がかかる。
バイナリの部分はSELECT文に含まさなくても重いのですか?
>>データベースの中に突っ込むと権限とかバックアップとか移行
ファイル管理は便利ですよね
>>バイナリデータは外部にもってデータベースには保存先パス情報だ
はじめはそれがベターと思っていたのです。私も バイナリのフィールド含まなければSELECTは重くない
アプリケーション側でバイナリのフィールド含まないSELECT文で検索用一覧用データを取得して必要なデータ数件だけバイナリフィールド含んだSELECT文で取得すればいい 保存先パス情報って、20世紀じゃあるまいし・・・
クライアントからアクセスできる場所に置かないといけないと思うけど
アクセス権どうすんの? 必要ならアクセス権設定できるファイルサーバーに置くだけだろ
21世紀にもなって何をいってんだか ファイルサーバは読取専用権限にしないと変更されてしまうので
権限設定がめんどくさいのでWebサーバがいいかな
見たかったらパス情報からリンク先url作ってダウンロードさせるようにすればいいと思う 静的ファイルのような扱いではなさそうだからそれもどうなのかね? >>265
> クライアントからアクセスできる場所に置かないといけないと思うけど
サーバー経由で取得すればいいだけ
って言うかそういうシステム普通にあるでしょ システム運用で考えたらデータベースバックアップとっときゃそれで済むってのは楽なんだよな
ファイルサーバー用意するならファイルサーバーの運用を別に考えなきゃならん(言っても大したことはないが手間にはなる) 外だしのメリットは例えば画像ファイルをデータベースに保存したりすると画像ファイルの解像度を下げて空き容量を増やす事が出来なくなる。最近の画像ファイルは解像度高くサイズが大きいので増えてくると空き容量がすぐ足りなくなるよ >>271
解像度を落としたれば、落としてUPDATEしたらいいだけじゃないか
そもそも容量不足って、ファイルサーバーでも一緒じゃん。
足りなくなったらディスク増やすまでだろ。 SQL Server 2019 Developer が起動できなくなり、
データベースのmdfファイルもディレクトリ毎消えています。
イベントログには「SQL Server の評価期間が終了しました。」とあるのですが、
これは仕様ですか? >>273
> データベースのmdfファイルもディレクトリ毎消えています。
MSがそんな鬼畜な事するとは思えないが… そもそもdeveloperと評価版は別のはずだが
今のデベロッパーは登録しないと評価版とかになってるのか? すみません、mdfファイルは前のバージョンのディレクトリにありました。
Developer版を入れ直してアタッチしたら復元できました。
確かではありませんが、無料トライアルからダウンロードしたファイルを使用して
Developerをインストールしたから期限切れになったのかもしれません。
ありがとうございました。 >>276
VisualStudioとかだと登録しないと30日とかで期限切れになるのと同じじゃないの 当社拠点における新型コロナウイルス感染者の発生について
https://www.nttdata.com/jp/ja/news/information/2020/021400/
2020年2月14日
株式会社NTTデータ
当社拠点ビルに勤務している協働者1名が新型コロナウイルスに感染していることを本日確認しました。
本件を受けて、社員の健康と事業継続を保てるよう本社対策本部を設置し、所管保健所と連携を図り対応を進めてきました。その結果、感染者の当社拠点ビルにおける行動履歴と、14名の濃厚接触者が保健所によって特定されております。
感染者が発生したビルに対しては、本日時点で以下の対応を取っております。
当該ビルおよび周辺3拠点の関連部門に勤務する社員/協働者の在宅勤務指示 >>278
「自分ひとりが感染したために周囲に大迷惑をかける」
今みんなが恐れているのはまさにこれだな
コロナ自体は軽症で済むんだし むしろコロナとかのクラスターとデータベースクラスタがごっちゃになってワケワカメになりそう 同じ単語だけどDBクラスタのクラスタは
グループで1つのシステムとして機能するという意味が付加されるから
語源は同じでも意味は違う
集団感染って言えばいいところを
その語感から来る悪い印象を遠ざけたいがために
一般人に馴染みのない言葉を使う大本営体質はうんざりする 主任「ようやくA社へのクラスター導入を完了しました」
課長「おお、最後のX拠点もクラスターに入ったのか」
勘違い君「課長! 来週のA社への出張は遠慮します!」 質問なのですが
例えばtbl1テーブルに
fld1フィールドが'A'のデータと'B'のデータがある状態で
SELECT fld1 FROM tbl1 WHERE fld1 IN ('A','B','C','D','E')
を実行すると'A'と'B'が表示されますが
その逆に無かったほうの'C'と'D'と'E'を表示することって難しいでしょうか?
つまりIN句で指定したものの中で存在しなかったものを表示したいのです NOT IN ( 'A', 'B' )じゃダメなの? >>286
tbl1 -> foo
fld1 -> name
で読み替えて
select bar.name
from (values ('A'), ('B'), ('C'), ('D'), ('E')) as bar(name)
left outer join foo on bar.name = foo.name
where foo.name is null;
not exists使ってもいい >>287
それだと何も出ない
'C','D','E'を出力したいならデータとして持たないと駄目だから>>288みたいにvaluesでやるのが簡単 valuesってfrom文で使えるんだな、知らんかった SQLは存在しないデータを生み出すためのもんじゃないからな
まあ、'A'から'E'までとか、なんか別のマスタあるんじゃないのかね A~Eが入力で受け取るような値ならテーブル変数使う >>288
こんな書き方が出来るなんて目からウロコです!
スレにしばらく書き込みがなかったので不安でしたが即レス感謝します。
ありがとうございました〜! カーソルについて質問させてください
カーソルを宣言するときのSELECT結果は1件のはずなのですがループが二回走ります
ループ内ではINSERを行っていて、デバッグするとその新規レコードがフェッチされて二回目のループが走っているように見えます
カーソルをループした処理の中で作成したレコードって、カーソルに反映されますか? >>298
レスありがとうございます!
コードそのままは出せないので一部置き換えたものですがすみません
declare cur1 cursor for
select id, rireki_num, name, birth
from test
where name like '%太郎%';
open cur1;
fetch next from cur1 into @id, @rireki_num, @name, @birth;
while @@FETCH_STATUS = 0
begin
insert into test values (@id, @rireki_num + 1, '太郎 様', @birth);
fetch next from cur1 into @id, @rireki_num, @name, @birth;
end;
close cur1;
deallocate cur1;
このカーソル宣言部分のSELECTを単品で流すと1件のレコードしか取得されないのですが、
実際に動かしてみるとインサートした後のFETCHで@@FETCH_STATUSが0になってもう一度ループに入ってきます
説明が下手ですみません
何かご存じでしたらお願いします testから抽出してtestに挿入していて、SELECTの条件が合うならそうなるんじゃないの
もしかするとSQLServerの設定で防げる場合もあるだろうけど、挙動が分からない時は試してみるけどね
'太郎 様'を'次郎 様'とかにして試してみれば、すぐわかるんじゃない
素人の俺が意見するのもなんだけど、確認するのが確実じゃないかな >>300
確かにbegin tranつけないでinsertしてるし読めちゃってるかもね
既定値はauto commitだし >>299
仕様どおり
FORWARD_ONLY
All insert, update, and delete statements made by the current user (or committed by other users)
that affect rows in the result set are visible as the rows are fetched.
…
FORWARD_ONLY is the default, unless the keywords STATIC, KEYSET, or DYNAMIC are specified
STATIC
Specifies that the cursor always displays the result set as it was when the cursor was first opened, …
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/declare-cursor-transact-sql?view=sql-server-ver15
あとカーソル使わなくてもINSERT SELECTで対応できるケースだったりしない? >>300,301,302
教えてくださってありがとうございます
300さんに教えていただいたように試してみたところループは一回で終わりました
カーソルの挙動についてはいろいろなサイトで調べていたのですが、
カーソルの宣言時にSELECTした結果がカーソルのオブジェクトに入って、
フェッチはそこから一行ずつ取得しているというように読み取ってしまっていたので今回のSQLで大丈夫だと思ってしまっていました
こういった仕様なのですね
実際のSQLはループ内でIF分岐でいろいろと処理が別れているのでINSERT SELECTが難しいかなと思ったのですが、
もう少しやるべきことを整理した上でINSERT SELECTに替えることも視野に入れて見直してみようと思います
とても勉強になりました!皆さん本当にありがとうございました!! >>302
確かにカーソル使う処理は遅いのでまずはinsert selectで対処できるかを検討すべきやね >>303
カーソルオープンのことを、カーソルの宣言と言わないでほしい。
これだけで何を言っているのかわからない。 >>303
カーソルオープンで行われるのは結果セットの取得ではないよ。
フェッチ構文はなんだと思ってんの? >>306
INSENSITIVEやSTATIC付ければ
カーソルオープンで結果セットの取得が行われる
>>302に書いてるよね? >>307
別人だけど、それ知らんかったわ
まず使わんとは思うんだけど勉強になった 取得っていう言い方がなぁ
カーソルオープンで結果セットが生成されて、フェッチで取得される
っていう言い方のがよくね?
生成されているのが、静的コピーかキー情報のみなのか、実体はフェッチ時に生成してるのかの違いだろ >>309
確かに表現がよくなかった。カーソルオープンはレコードの特定で、レコードの値をコピーするのがフェッチ。
データベースや指定によってはカーソルのSELECT文の対象レコードがロックされたり、対象レコードのコピーが作成される。 SQL Serverでデータ量が少なければ、一時テーブルを使うのが無難かな。 Management Studioで
左側にオブジェクトエクスプローラ
右側にクエリウインドウが開いてる状態で
オブジェクトエクスプローラの幅を変えようと思って
オブジェクトエクスプローラ右端の境界線をマウスで左右にドラッグしても
うまく変わってくれないことが多いんですが、何が原因でしょうか? うまくいかないって具体的にどうなんだよ
OSとかSSMSのバージョンとか詳しく書けないのかよ
お前のマウスがぼろいだってオチな気がするがな 教えて下さい
環境
サーバAとサーバBがあって、それぞれにSQLServerが入ってます。
どちらもユーザ名、パスワードは同一で変更できません。
質問
サーバAのManagement Studio上からサーバBに誤って接続させたくないのですが
いい方法ないでしょうか?
(ユーザ名、パスワードが同一なので誤って接続&ログインで来てしまう)
例えばManagement Studio起動時のサーバ名選択なリストボックスに自身のインスタンスしか表示させないとか。 双方サーバで固定IPならSQLのアクセスをファイヤーウォールでブロックしてしまう。 >>318
サーバ名は(local)のみ使うことを徹底するでもいいかなぁ sa 使わず、別の保守用アカウント作って、それで SMSS したらいいんじゃね? WindowsファイアウォールでSSMSの外向け通信遮断とかで行けるんじゃね ファイアウォールじゃなくLogon Triggerでも制御可能
あとミスオペを防ぐにはコネクション別に色を変えるのは結構有効 >>323
それしらんかった
ありがとう、勉強になった >>326
コネクションのプロパティで出来るでしょ
ステータスバーの色が変わる
アドオン入れればもう少し違う箇所の色を変えたりできるかもしれない >>327
探したけど、その説明では...探したが、接続後では変えられないっぽい
サーバーへの接続ダイアログで、オプションをクリック
接続プロパティタブで、カスタム色を使用にチェックして、選択ボタンから色を選択
でステータスバーの色を変えれるようになった
セキュリティ的に絶対繋げたくないとかじゃなければこっちのが良いな
アドオン作れば色々出来るんだろうけど、アドオン作るための資料ってみたことないんだよなぁ なるほど
基本Visual Studiのエディタ部分だから、アドオンそのものはVSのアドオンなのか
あとは各種SSMSのオブジェクトのリファレンスさえあればなんとなる、かも
しかしまあ、日本語のドキュメントほしいよなぁ csvファイルからデータをインポートしたいのですけど、
読み込ませようとしたら、
全てvarcharの長さ50バイトに
なってしまいます。
実際のデータはもっと長い文字列の項目があります。
どうすればデータ長に合う長さで
読み込むでしょうか?
ちなみにcsvは先頭行から
データとなっています。 >>331
>読み込ませようとしたら
import wizardみたいので普通に設定できたと思うんだが違うやり方なんかな? ここはエスパースレではないので
せめてどうやって読み込ませたのかぐらいかけよ >>318
Management Studioに接続を登録して使うようにしたら良いと思うよ
> 例えばManagement Studio起動時のサーバ名選択なリストボックスに自身のインスタンスしか表示させないとか。
起動時のダイアログは表示しない設定にできるよ
誤って接続させないなら、これで十分じゃないかな
接続の登録は、エクスポートできるから、みんなで同じ環境にするのも簡単だよ csvからインポートしてるのですけど
数値項目のところにスペースのみとか、
スペース+数値文字列(リーディングスペースっていう?)は、
読み込み中にエラーが発生するようです。
という、ところまでわかりました。
次は、文字コード混在(932と1252)しています、というエラーに
悩んでいます。
csvを調べても932(シフトJIS)に
なってるはずなのです。
なにかアドバイスください! >>337
まずはcsvファイルをいくつかに分割したりして、エラーの原因の行を特定してみてはどうか
で、特定できた行と、使ってるBULK INSERT文なりbcpコマンドなりが出されると
悩みに効くかもしれない >>337
いったん文字列として別のテーブルに取り込めぱいいんだよ。途中をすっとばして一気にやろうとすれば何もかもたいへんになる。 >>338
>>340
コメントありがとうございます。
プログラムは詳しくありませんので、
csvインポートは、SSMSで
画面から指定してやっています。
いろいろ試してみます。 mssqlの物理設計の仕事をすることになりそうなんですが、この仕事って将来性ありますか? SQL ServerのDBAは供給が常に足らないから、仕事はあるよ。 職場のPCなんですけど、SQL serverをインストールしてないのに、
SSMSを使ってデータのインポートをするとテーブルが作られて、
クエリも実行できるのですけど、
SSMSをインストールするだけで、自動的にSQL serverが
インストールされるのでしょうか? >>344
SSMSはクライアントツールだ
SSMSのインストールではサーバはインストールされない
SSMSでどこにつないでるだよ WinPro+SQL2013+Excel2013で使えてたtime型が、
WinHome+SQL2019+Excel2019で使えなくなった SQLの実行ではエラーは起きないので、Excel側の問題だけど
OLEではレコードセットの該当列を見ると「複数のステップ」エラー
ODBCではレコードセットの何か(EOFとか)を見ると「数値の範囲」エラー 数か所だったのでchar(5)に変えたけど(hh:nn)
※書き込めない原因はこの行だったかーw char(5)か(hh:nn)のせいかな?
DB板でこれを半角で書けない意味はw https://docs.microsoft.com/ja-jp/sql/integration-services/import-export-data/connect-to-a-sql-server-data-source-sql-server-import-and-export-wizard?view=sql-server-ver15
>重要
>Microsoft OLE DB Provider for SQL Server と SQL Server Native Client は、
>SQL Server 2012 より後のバージョンではサポートされません。
>代わりに、ODBC ドライバーを使用します。
ほんと?
OLEDBもまだあったけど、一応最新の{ODBC Driver 17 for SQL Server}にしといた
名前がナンバリングってことは、次回買い替え時にまたメンテが必要… >>346
> SSMSでどこにつないでるだよ
会社のPCを見てないんですけど、
(localDB)SQLSERVERというような名前を設定したと思います。
この設定は、
「こういう文字列を設定するとできたことがある」
と先輩が教えてくれたものです。 >>352
Visual studio とか ASP.NET とかを入れてるんじゃね?
その他にもSQL-Server LocalDB使うアプリを入れるとインストールされたりする >>351
https://docs.microsoft.com/ja-jp/sql/connect/oledb/oledb-driver-for-sql-server?view=sql-serv
OLE DBそのものが非推奨になったのでその二つも非推奨になったんだが
OLE DBの非推奨が取り消された
だがそのドライバは非推奨のままで、新しいOLE DBドライバ使えってスタンス
まあ迷走してる感はあるが、新しめの使っとけば数年で使えなくなることはなさそう >>354
使えない先輩というか、この程度の知識でSSMSでクエリ発行する業務そのものが理解できん >>356
システムの事なんか全然知らず、サーバを構築したりすることもなく、
SQLでクエリーを作る作業者って想像できないわけじゃないよ。
でもトラブルがあった場合とかパフォーマンスが出ない時とかどうするんだろうなあとは思うな。 SSMSはVer18からストアドプロシージャのデバッグができなくなってたんだね
2008が残ってたからVer17を使い続けてたんだけど、現行は、VSDTを使えってことなのかな >>357
相手によってはとりあえず使えるように必要な設定を呪文として提供することならままあると思う。
その呪文をきちんと理解できるように自分で調べる、問題があるなら質問を返す、などの器量は受け取る側の問題じゃないかと。 >>355
おお、さんくす
2020/05/06 2018 年に OLE DB の非推奨が取り消しとなり、リリースされました。
2020/06/29 2012 より後のバージョンではサポートされません。 代わりに、ODBC ドライバーを使用します。
日付は逆だけど…
でも直観的に、「非推奨が取り消し」の方が強いイメージ
なのでMSOLEDBSQLに戻した
俺が1人で作ったシステムを社内政治都合で廃止しようとした連中が5000万かけてIBMに発注したことがあった
半年後、元のシステムを使い続けることに決定しましたと、会議で役員が宣言
IBMのが機能不足の上に遅くてどうしようもなかったらしい
廃止の取り消しは、強い技術的な壁を感じる
ODBC駄目だな、と思ったのは20年近く前だったかな
SQLの解釈が違うような、変な癖があった
あとちょっと遅かったかな
今回も、EOF見るだけで特定の列が起因のエラーが出るっておかしい気もする
OLEもバグってるけど、エラーの出方が素直(ただしメッセージは分かりにくい) 下請けのプロに凄いもん作らせて、社内の素人に「保守」させるという
よくあるよ
「誰でもできる」は買い叩きのためなの神話なのに、多数が心から信じてる様子
それがブラック社会
ただ俺の場合、凄過ぎて引き継げない >>361
その「保守」って大丈夫か?
データベースに限らずソフトウェアは、後からの要望で、あれ付けてくれ、これやってくれをいちいち聞いていると酷いことになる。
「××を行わないことを大前提で最適化している」なんて説明しても全然理解してくれなかったりする。 自分で作らない人は、後から注文しても普通に付け足すだけで済むと思ってる人多いよね
最初にどれだけ考えて設計してるか知らないから仕方ないけど 極度の属人性を受け入れられるんなら開発費を10分の1にすることだってそう難しいことじゃないんだよ
ベンダーに発注すると高くつくのは属人性を排除するために一見無駄に見えることに時間と金がかけてるから
ついでにそういう属人性が高いシステムのリプレース案件は
大手ベンダーとしてはやりたくない場合が多くてワザと高い見積もりを出すんだよ >>364
>そう難しいことじゃないんだよ
それw
そういうのが買い叩きのための神話
そういう嘘で多大な損害が出たり、人が死ぬ すまんが、SSMSってコピペ用の接続文字列表示してくれないんだっけ?
あれはVisualStudioのみの機能だったっけか・・・・? >>356
>>357
契約していた業者さんがずっと
SQL serverのメンテナンスやってくれていたのですけど、
6月末で契約が切れて、
それでもSQL serverを使うシステムが
残っていて、いくつかやることがあります。
全員がSQL serverはほぼ素人なんですけど、
やらざるをえないという状況です。
いろいろググりながら頑張ってみます! 文字列の最初にN’’と見かけるのですが、この最初のNはどういった意味があるのですか?
省略可能でしょうか? >>368
自己解決しました。
N’Unicode文字列’ということですね。 SQL serverをインストールしたのですけど、
一部のGUIが動かないので
他のPCと比べてみたら、
どうやらVisual Studio 2005のライブラリ(?)
というのがインストールされてないみたいです。
SQL serverのGUIで使ってるらしいですけど、
後からVisual Studio 2005のライブラリというのを
インストールする方法を教えてください
よろしくお願いします! すいません時代錯誤してました。
というか分かっておりませんでした
NetFrameWork 3.5というのをMicrosoftのサイトから
ダウンロードすればいいはずと聞きまして、
やってみます。
>>371
あのね、からかうだけなら
書かないほうがいいですよ。
「バカだから何も知らないくせに
マウントしたいんだろう、このFランの馬鹿がw」
と、みんな思ってますからw >>372
恥の上塗りはやめとけってww
SQL ServerやSSMSのバージョンも書かない上に
ライブラリの名前も正確に書けないようじゃまともに相手されなくて当然
必要なVC++の再頒布パッケージが入ってないならインストールに失敗してるんだよねそれ sqlserverのパッチは出たら積極的に当てた方がよい?
問題がなければほっとくべき? >>374
どういう種類のサービスに使ってるかとパッチの内容次第
セキュリティ系なら基本的に当てる 最近のは統合パッチ?になって選択出来ない
と思っていたが OS:Windows server 2016
DB:SQL server 2016 Standard Edition
SSMS:SQL server ManagementStudio17
上記環境でSQL server Management Studioに
設定したメンテナンスプランがスケジュール実行で
動きません。
・認証:SQL server認証
・メンテナンスプラン内容:データベースバックアップ
(メンテナンスプランウィザードで作成)
・ MSSQL13.MSSQLSERVER\MSSQL\Logにログの作成なし
・該当メンテナンスプランを右クリックして、履歴の表示を
選択しても、履歴の記録なし
・SQL server エージェント−ジョブ−該当メンテナンスプランを
右クリックして、履歴の表示を選択しても、履歴の記録なし
・該当メンテナンスプランを右クリックして実行を選択すると
正常に実行され、実行後履歴も表示され、ログも作成された
スケジュール実行するためには、何か特別な設定が必要なのでしょうか? >>380
> ・ MSSQL13.MSSQLSERVER\MSSQL\Logにログの作成なし
server 2016ならフォルダが違わない?
旧バージョンからのアップデートならあり得るけど、インスタンス間違えてないか すみません、教えて下さい。
クエリ実行時にエラーになったときに、
どのエラーコードだったらリトライすべきとかの標準的なガイドラインのようなものってあったりするのでしょうか? 要件は特に無いといいますか、聞けていないのですが、どのような手順で整理すべきでしょうか? エラーが出たら困るときにリトライすればいいんじゃね リトライしたらエラーが解消される可能性があるケースで
呼び出し側が1回でエラーを返されるよりも
複数回トライしてからエラーを返してほしいという要件に当てはまるものがあるかどうか
接続系じゃなくクエリ実行中のエラーでとなると結構絞られるとは思うが
運用開始前に対象をもれなく洗い出すのは現実的ではないので
運用開始後に簡単にリトライ対象を追加したり削除したりできるようにして
追加/削除の判断が迅速にできるような運用監視体制を整えておくほうが現実的 ロックタイムアウトでリトライすべきかどうかは要件次第だよね
普通はやらないと思うけど 単純にリトライするだけなら、ロック外れるまで待てばいいからじゃね >>389
手動リトライじゃなくコードで自動リトライするのは普通やらないって意味
対処を自動化したくなるくらいロックタイムアウトが発生するのは設計に問題がある可能性が高いのと
単純な固定delayだと同時実行性が落ちたり連鎖反応でエラーが頻発したりする可能性もあるから
デッドロックとかと似たようなもの サーバーリプレイスする場合の引っ越しはデタッチ→アタッチでおけ? >>392
この前それでやったらなんの問題もなかった >>392-394
リプレースするならバージョンアップはしないの?
システムデータベースをリストアとかやったことないんで
面倒なんで仮想環境を新しいサーバに移してからバージョンアップした >>395
システムデータベースなんて障害復旧以外では移行したことないっぺよ 移行はバックアップのリストアでやったほうがパフォーマンスが上がった感じがあった
デフラグみたいなのがされるんじゃないかな ??
バックアップ/リストアなら普通にデフラグされるでしょ 基本バックアップ・リストアが良いと思うが。
なにしろオリジナルファイルとは別にバックアップファイルができるというのが作業安心度が高い。 >>400
システムデータベースのバックアップは同じバージョンにしか書き戻せないでしょ?
新しいバージョンに直接書き戻すことできるの?
調べればどっかに出てるんだろうけど、単純だからインストーラのアップデートを使ってる >>401
システムデータベースって言葉の解釈が他と違う気がする
master,msdb,model等を指して話ししてる? >>402
> master,msdb,model等を指して話ししてる?
そうです。
他のPCに移すってことは、そう言うことでしょ?
その他に、レプリケーション用のDBも含むかな >>402
>>396が言われているのは、master,msdb,model等のことだと思ってレスしてましたよ >>403
>>404
じゃ俺が文脈読み間違えてるだけだね(´・ω・`)すみません とったバックアッップいつ使うの?
ユーザデータベースはわかるけど
システムデータベースをリストアするイメージが湧かない 単体で動かしてるなら再インストールして必要な分再設定のほうが簡単だがな “必要な分”が漏れなくすべてミスなく再設定できてるかどうかどうやって確かめるの? 大事なのは環境構築の作業ログはちゃんと残そうぜだっぺ >>408
>>392-393サーバーのリプレースでどうするって話がもと
うちはサーバを仮想化したから仮想環境を新しいサーバに移して、起動させるだけなんだけど
OSのアップデートとSQLServerのアップデートを実施したって話
>>412
作業ログって人の作業記録だとすると、理解できる人材が必要
手順だけを詳細に書いておいても、バージョンアップ等で手順が変わると役に立たなくなる
理解できて対応できる人が必要
仮想サーバの移行は単純だし、単純なOSやSQLServerのアップデートはウィザードに従うだけでできるから、これで良いかなと思ってるところ SQL Serverのバックアップの基本は論理バックアップなのかと眺めているけど、本当にそうだとすると大量データには不向きなRDBMSだな。 sqlserver を仮想化するって遅くなるだけでメリットが感じられないな。
テストの時スナップショットからすぐ戻せるとか
そんな事くらいしかメリットない。
サーバー移行も大きい仮想ドライブファイルコピーするのに休日返上で一気にやらないといけないとか大変そう。
バックアップなら完全バックアップ前日とってコピーして
おいて当日差分バックアップとってそれだけコピーすればいいから早くすむと思う >>413
それは移行計画とか手順書を作る前の検証段階レベルで起こる話だから問題ないでしょ?教育にもなる
ぶっつけ本番前提ならそれはそもそもとして体制に問題ありって事だよ イメージを戻すだけで済むようなシステムならもともと苦労なんかしないだろうに。 ちょっと困ってるので、詳しそうな人が多そうなここで質問
簡潔に言うとWindows10&WindowsServer2019+VS2019(ASP.NET,VB.NET)+SQLServer2019Expressでwindows認証接続してデバッグモードでプログラムは動作する。
それを発行してIISで参照するとDB接続に失敗する。
なんでだろう? >>420
どうして失敗しているのがわかったのか?
ありのままを知らせてくれないとわからないよ。 デバッグモードのときのあWebサーバは何なんだよ?
それはどのアカウントで動かしてるんだよ?
多分、IISのアカウントがWindows認証で認証できてないんだろ
今のIISのアプリケーションプールとか仮想アカウントで動いてるし
そのへんの仕組みちゃんと勉強する気がないならSQL Server認証でやっとけ IISすらろくに理解してないのがわかる質問だから、相手にしなくていいと思う。 MacのARM化に伴って、Mac+Docker+SQLServerみたいな組み合わせはできなくなりそうなんだけどさ
SQLServerってARM Linuxへの対応は計画にないもんなの? ARM版WindowsのWOWを流用したら可能性はある macは需要のなさから、いろんなものが対応していない。 シーケンスの現在値がなぜか10個ほど巻き戻っていたせいで重複した番号が使われてレコード追加しようとしたときに一意性エラーでシステムが落ちてた
同じシステムで使われる他のシーケンスオブジェクトは問題なかったのに1個だけなぜか巻き戻ってた
なんか似たようなことなったひといない?
教えてエロいひと SSMSから社外ドメインのサーバーのSSISに接続しようとすると、WINDOWS認証はできるのですが、SQL SERVER認証ができないためにログインできません。
これは仕様でしょうか? >>432
ありがとうございます。
SSMSのログイン画面でSSISに接続しようとすると、サーバー名を入れる前から、WINDOWS接続しか選べないのですが、これもポートですか?
データベースに接続する時には、WINDOWS接続とSQL SERVER接続が選べます。 そもそもそのサーバーでSQL SERVER認証する設定になってるのか? >>434
混合モードになっていて、DB接続は普通にできます。 仕様ってことでいいんじゃねぇの
知らんけど
DB接続できるならSSISDB使えば? Express版をいじってみてるんだけどさ
これ、データベースのホットバックアップをとった時って、バックアップ中に行われた更新はどうなっちゃうの?
自動的にリストアに必要なトランザクションログもバックアップに含まれたりするん? FULLバックアップならトランザクションログも含まれる いろいろいじってたらそうか、流石に無料版はトランザクションログのバックアップに制限があって、使いづらくしてあるわけか いやそんな制限ないだろ
バックアップまわりの制限って圧縮ぐらいじゃね
SQL Server触るの初めてなのか?まず復旧モデルってのを理解してるか? 正直、復旧モデルがいまいち理解できてない
理解しようと公式のドキュメントをなぞってたんだけど、そもそもExpressだとSimpleってのしか選べなくて続けらんなかったぜ Simple(単純)ってのは、ログを保存、バックアップしない運用
Expressでも単純しか選べないってことはなかったと思うけどな
インストール後でも変えれるから試してみ せんきゅー!
デベロッパーに変えたら使えたぜ、これでドキュメントなぞりができるが・・・・使えるようになったときに本番で使う金はねえ
もし使うとしてもAzureの月700円のやつになっちゃいそう ExpressでSimpleしか選べなかったバージョンって何?
あとOSも何? ごめんなさい
リカバリーモデルを選択する画面を間違えていました
確かにExpressでも選択できました SQL Server2016インストール後、IPアドレス変更した場合
特にする事はないのですか? >>447
DBエンジンそのものは問題なく動くはず SQLサーバーインストールする時にデータベースエンジンにしかチェック入れていないのにクライアント接続ツールとかが自動的にインストールされる理由を教えてほしいです スレを間違えてしまってこちらに誘導されてきました
SQL Server Developerエディションについて教えて下さい。
このエディションは開発用となっていますが、機能的にはスタンダードと同レベルで使えるのでしょうか?
また実稼働では使用不可とはおもいますが、ライセンス的にはどこでみわけてるのでしょうか?
使用していると定期的に確認メッセージが出たりするのでしょうか? 機能的にはエンタープライズだったはず
ライセンスはたぶん確認とかないと思う >>452
商用ではない非運用ならいいというもの
エンタープライズという名前にしてしまうと、商用で使ってしまう可能性があるから、エディション名を分けたのだと思う。 パッケージソフトをvpn環境でクラサバ運用し始めたのですがクライアントからだとメチャソフトの動作が遅いです。
見直すのはサーバーの性能?クライアントpcの性能?vpnの回線の速度?どこから見直したほうが良いでしょうか? SQL server2019を買って2017にダウングレードしようと考えてるんですが、やり方を調べると2017の媒体を自前で用意する必要があるのは分かったのですが2017のプロダクトキーも自前で準備するのでしょうか?
2017で持ってるプロダクトキーは他サーバーで稼働中のものしかなく、どちらもバンドル版です。 バンドル版のライセンス関係はその販売元に聞けってのが原則 「他サーバーで稼働中のライセンスを流用できませんか?」 ってバンドル版の販売元に聞くの?
アホか メディアとプロダクトキーを流用していいか聞くんだが?
ライセンスは2019買う前提だ
バンドル版じゃなければそれで行けるはずだが、バンドル版はいろんな条件が追加されてる可能性があるからな >>460
他のライセンスのプロダクトキーを流用していいわけないだろ ダウングレード権でそのプロダクト使う権利あればプロダクトキーも使って良いはずだが 今さらなんだけどSQL Server Native Clientが推奨されていない事に気がつきました
MSOLEDBSQLへのプログラム書き換え結構面倒ですね(VB.NET)
(コネクション、コマンド、アダプター、データリーダーの名前が変わる)
SQL Server 2005から開発してて現状2017です
SQL Server Native Clientでは新機能サポートしないと書いてましたが
2017からのFORMATMESSAGE 関数は使えてます
CommandTextにT-SQL自分で書くやり方は影響しないのかな? >>464
接続文字列書き換えるだけじゃないのか
新旧の名前教えてくれ SQL Native Clientの場合
System.Data.SqlClient 名前空間
"Data Source=192.0.1.1;User ID=user;Password=pwd;Initial Catalog=db1" 接続文字列
Using a1 As New SqlConnection(ConnectionString)
,a2 As SqlCommand = a1.CreateCommand
,a3 As New SqlDataAdapter(a2)
MSOLEDBSQLの場合
System.Data.OleDb 名前空間
"Provider=MSOLEDBSQL;Data Source=192.0.1.1;User ID=user;Password=pwd;Initial Catalog=db1"
Using a1 As New OleDbConnection(ConnectionString)
,a2 As OleDbCommand = a1.CreateCommand
,a3 As New OleDbDataAdapter(a2)
SQLCLIENTとOLEDBではコネクション、コマンド、アダプター、データリーダーの名前が変わっています
置換すればいいだけなんだけど引数や戻り値にこれらがなってると少し面倒かも
OLEDBで接続文字列にSQLNCLIで使ってた人?ならMSOLEDBSQLに
変えるだけ済むけど それはADO.NETの初期からあるOLEDB汎用のドライバで、MSOLEDBSQL用ではないわけだが
System.Data.SqlClient から Microsoft.Data.SqlClient にしろってことらしいが
名前空間の変更ぐらいで基本的なクラス名なんかは変更されてないと思うが
細かい動作なんかは未検証だからしらん MSOLEDBSQL
ttps://docs.microsoft.com/ja-jp/sql/connect/oledb/download-oledb-driver-for-sql-server?view=sql-server-ver15
専用のドライバがあります
ttps://docs.microsoft.com/ja-jp/sql/connect/oledb/oledb-driver-for-sql-server?view=sql-server-ver15
ここではOLEDBでMSOLEDBSQLを推奨
Microsoft.Data.SqlClientには言及なし
Microsoft.Data.SqlClient
使ってみましたがクラスは変更なしでそのまま動きますね
Nugetで関係なさそうな物までいろいろひっついてくる 純粋なOLEDBのドライバと、ADO.NETのライブラリと混ぜて話してしまってるな >>469
ありがとうございます
そもそも違いを意識してませんでした
OLEDBの最新がMSOLEDBSQL
ADO.NETの最新がMicrosoft.Data.SqlClient
現状System.Data.SqlClientで使用しているなら
Microsoft.Data.SqlClientにするのが無難かな Microsoft.Data.SqlClientで使えるようになった新機能って何があるんだろ
それが必要でなければSystem.Data.SqlClientのままで良いんじゃないか >>471
そうですね
テストだけで終わりにしときます GUIでユーザやデータベースのプロパティーを変えるには、Windows + SSMSが必須なのですか?
(Azure Data Studio、SQL Server Data ToolsなどではT-SQLになるのでしょうか?)
公式のドキュメントを見ながら学習しているのですが、どのような項目があるかすら身についていない段階からCUIを使うのは辛いです・・・・ >>473
必須ではないけど勉強するならSSMSであれこれいじってみるのがいいと思うけど
自分は本番環境でもSSMS使いますが
ちっこいテーブルいじる時はアクセス2000 >>474
アクセス2000が使えるSQLServerて古い奴じゃない?
リンクテーブルなら今でも使えるのかな
ADPが使えた時は重宝した >>475
SQL Server2019とaccess2016だとadp使えないですね
SQL Server2019とaccess2000ならadpル使えますよ(Windows10)
SSMS、テーブルとかストアドを縦にずらっと出てくるだけじゃなくて
業務ごとにグループ分けできると便利なんだけどな >>476
SQLServer2008とAccess2010の組み合わせが編集できる最後の組み合わせだよね
Accessの方が新しいバージョンでないとスキーマの編集はできなかった
Access2013からadp未対応になったからね
2008R2はどうだったかなAccess2010で対応してたかもしれない
Access2000が対応してたのはSQLServer7までだったかな OLEDB接続では接続させない
ODBC接続なら接続できる
なんてを設定できますか? Oracle Master取得に向けた書籍が結構出ているようですが、SQLServerの資格向けの似たような本はないのですか?
資格自体は興味がないのですが、ある程度網羅的に知識をつけたいんです そもそもSQL-Serverの資格ってもうないんじゃなかったっけ? 1月末でSQL Serverに特化したMS資格はなくなったから
資格向けの本は本屋にはないだろうね
資格本じゃなく普通の入門書は大きめの本屋に行けばそれなりにあるはず
しっかり学びたければ「Microsoft SQL Server 2012 Internals」がおすすめ SSMS v15.0.18369.0で2つ目のクエリウィンドウを掴んで1つ目の下とかにドッキングさせると落ちるんだけど自分のとこだけ?
ここ2、3日で急に発生した
なおOSはWindows 10 20H2 19042.804 SSMSで質問です。
KeyであるIDが1から順に降られているテーブルで
ID='201'であるレコードを編集したい場合はどうすればいいのでしょうか?
上位200行に入らないレコードの編集方法を教えてください あれは簡易的機能だろう
自分はupdate文作って更新してる >>486
URLが何故か貼れないけど、検索したらすぐ出てくる 主キーでの1件UPDATEやなんのキーもない一時テーブルへの1件INSERTがおそくなるのって何が考えられるかな
プロシージャがたまに遅いときがあるってんで動的管理ビューのdm_exec_query_statsとprocedure_statsとるようにしたんだけど、
遅いときは決まってINSERTやUPDATEが遅くなってる
logical_writesやlogical_reads、physical_readsの値は特に変わらない
プロシージャ内のSELECTは速度安定してる
waitsとかもとってみるしかないかな >>488
出来ました。
ありがとうございました。 >>489
page splitが発生すれば遅くなる >>491
ありがとうございます、page splitも見てみる
UPDATEしてるテーブルがインデックス14個もある...適正に作られてるんだろうか
それが原因とした場合、とりあえずはインデックスの断片化の解消、FILL Factorの値の見直しかな
splitは一時テーブルのINSERTも可能性あるのかな
#付きのテーブルで、プロシージャの最初にCreateしてるんだけど主キーもインデックスもなにもなくて
while内でループで一件ずつInsertしてるんだが、IF文で条件満たせばtruncateしてて、最高でも99件しか貯まらないようなテーブルなんだ
Updateの方でsplit多発してる場合、その影響を受けたりするものなのかな >>492
一時テーブルでもpage splitの可能性はあるが
キーのないHeapならpage splitは発生しない
複数ユーザーがそのストアドを実行してる環境で
page splitが頻発してるならinsertのパフォーマンスもその影響を受ける可能性はある
でも一時テーブルとUPDATEで使ってるテーブルのストレージが違えば影響ないんじゃないかな
少なくとも1ユーザーがそのストアドを実行してるだけなら影響は受けない
INSERTのほうは一時テーブルで使ってるtemp dbへのI/Oが遅くなる原因が
何かないかを考えたほうがいいかも
あとはmemory optimizedにしてみるとか 通常のINSERTと遅いINSERTでどの程度の差があるのか?
レコード長は? 1ページに何件入る?
固定長か可変長か?
TRUNCATE直後のINSERTが遅い可能性は? >>493
なるほど
自分が関わってないシステムなんでその辺の情報も入手しつつ調べてみる
>>494
レコード長は長くない
全17カラムでBIGINTが1個、INTが12こ、TINYINTが3個、固定長文字列のCHAR3が1個
INSERTどれくらい遅いかだけど、問題ないとされてる日は平均70〜90マイクロ秒
遅いとされてるときは平均200マイクロ秒〜で、悪いと700、2000超えのときも
この値はプロシージャ実行前後でdm_exec_query_stats抜いて
execution_countとtotal_worker_timeの差を取って平均だした(erapse_timeも似たようなもの)
プロシージャ1回実行で10万〜30万件くらい処理してて、一番ひどい平均2000マイクロ秒越えのときは約10万回で212秒になってた
TRUNCATE直後が遅いとかそこまでは調査できてないです MSSQLのtruncateの挙動とマッチしていない…のかも
・truncateすると、レコードにtruncateのマークがされるだけで
ブロック中で生きてるレコードが無くてもブロックは開放されない
・空きブロックが無く、新たにブロックが必要になったときに、
その時にtruncateのマークがされたレコードを調査して、
ブロックが未使用だと判明したらそのブロックを再利用する ディスクが死にかけてるとか、ネットワークが不安定とかの可能性は?
つか単にロックウェイトじゃないだろうな
トランザクションと分離レベルどうなってる? localのtemp tableみたいなのでロックウェイトはないんじゃないか? >>496
プロシージャ内にはテーブル変数にINSERTしてる箇所もあって、ここはINSERT回数は半分くらいなんだけど特に遅くなってないんだ
テーブル変数のほうはTruncateしてないんだけどそこ...かなあ
>>497
今日OSとSQL Serverのパフォーマンスカウンタ取ろうって話になった
教えてくれたところも参考にしつつ調べてみる
遅くなるのが月1〜2回くらいだそうで、今月中にしかけて再発待ちかな
>>498
ハードは異常はないらしい
ロック周りは他になにも処理が動いてなくても遅いときがあるってんで調べてないがおさえてみる テスト環境では再現しない?
該当のストアドの単独実行か複数の並列実行で再現したら絞りやすい
再現しなければしないで本番環境特有の設定か他の処理の影響を受けてることが分かるので半歩前進
再現しない環境と本番環境で各種測定結果の比較もできる
月1~2回しか発生しないならそのタイミングで他に動いてた処理を把握できれば調査進みそう >>501
テスト環境の再現テストは難しい
本番でも再発頻度が高くなくて、やるとするとその時の同じデータを持ってくる必要があるが、テストサーバにリソースがそんななく、テスト環境には持って来れない機密情報も含んでて、そこをどうにかするマンパワーも割けない
ストアドは構造上同時実行は不可
俺自身はそこの開発メンバでもなくて、物理的にというか地理的に本番どころかテスト環境にもアクセスできない立場なんで直接手動かすこともできないのです あとは早い時と遅い時の実行プランが同じか見るぐらいかなぁ
テータ大量更新した後で発生しやすいとかなら疑ってみてもいいかも
パラメタスニッフィングでググってみて >>503
処理後にdm_exec_query_planも取ってて比較はしてみた
パターンが2つあって、最初のカーソル宣言のとこが違うんだが、InnerJoin(NestedLoop)してるテーブルの結合順番が違うのと、SQLに書かれてないカラムが出力項目にあるという違いがある(後者はなんでそうなるのかわからない)
ただ、早いときと遅いときでパターンが分かれてる感じでもないのでプランからは原因は分からなかった SQLは変わらないのにNested Loopの結合順が変わるなら
統計情報を元にした件数予測が逆転することがあるってことだよね
結合順は速度にほぼ影響ない場合もあれば大幅に影響する場合もあるので
それだけじゃなんとも言えないが実際どうなのか再現テストやる価値はありそう sqlserver 2012 localdbなんですが、
SSMS等でデータを確認しても、明らかに存在しないのに
重複キーエラーでInsert出来ないデータがあります。
DBファイルを色々入れ替えて使用したため、
Indexファイルの整合性が崩れているのだと推測しますが、
どこを初期化すれば治るのでしょうか?
sp_updatestatsは試しましたがダメでした キーが重複してないのに重複キーエラーも聞いたことがなければ
indexの整合性が崩れるってのも聞いたこと無いなぁ
indexが不整合を起こしてる可能性を疑ってるならとりあえずdrop/createすればいいんじゃないの?
複数件insertしててエラーでトランザクションがロールバックしてるので
テーブルには該当データがないように見えるとか? Reporting Serviceって何処のスレで聞けば良いの?
初めてやるんだけど、帳票を出すためのツールって事くらいをようやくわかり書けてきたところ PowerBI使ってとけ。
今からssrsだと後悔するぞ >>506
とりあえず DBCC CHECKDB じゃね
localdbでできるのかどうか知らんけど おまえら接続プロバイダは何使ってる?
おれは、MSDASQL select into #tmpの方が使いやすいね ユーザーCALって、後からライセンス数増やすのは、追加分購入して認証するだけで増やせるの? >>516
製品版使うときはコアライセンスぐらいしか使ったことないよ
ユーザーCALってどのくらいの規模で使ってるの?
ファイルサーバのユーザーCALなら使ったことある
認証が無かった時期で自分で数字を入れるだけで、ごまかそうと思えば多めの数字を入れるだけだけだった
業務用でライセンス数をごまかすようなことはないから当時は厳格な管理はしてなかったね https://kurashigoto.hokkaido.jp/flexibleSearch/search.php?offset=0&limit=20&search=%E3%83%98%E3%83%AB%E3%82%B9%E5%AC%A2%E3%83%BB%E5%A3%B2%E6%98%A5%E5%A9%A6%E3%81%AE%E9%87%91%E5%9F%8E%E8%8B%B1%E9%87%8C%E3%81%95%E3%82%93%EF%BC%881984%EF%BC%8F3%EF%BC%8F21%E7%94%9F%EF%BC%89%E3%81%AE%E8%87%AA%E6%92%AE%E3%82%8A%E3%83%8C%E3%83%BC%E3%83%89%E5%85%AC%E9%96%8B%E4%B8%ADavgle
https://magazine.jp.square-enix.com/top/comics/?search=q&x=0&y=0&sword=%E3%83%98%E3%83%AB%E3%82%B9%E5%AC%A2%E3%83%BB%E5%A3%B2%E6%98%A5%E5%A9%A6%E3%81%AE%E9%87%91%E5%9F%8E%E8%8B%B1%E9%87%8C%E3%81%95%E3%82%93%EF%BC%881984%EF%BC%8F3%EF%BC%8F21%E7%94%9F%EF%BC%89%E3%81%AE%E8%87%AA%E6%92%AE%E3%82%8A%E3%83%8C%E3%83%BC%E3%83%89%E5%85%AC%E9%96%8B%E4%B8%ADavgle
https://miyagi.doctor-search.tv/search/hospital?dis=3000&Keyword=%E3%83%98%E3%83%AB%E3%82%B9%E5%AC%A2%E3%83%BB%E5%A3%B2%E6%98%A5%E5%A9%A6%E3%81%AE%E9%87%91%E5%9F%8E%E8%8B%B1%E9%87%8C%E3%81%95%E3%82%93%EF%BC%881984%EF%BC%8F3%EF%BC%8F21%E7%94%9F%EF%BC%89%E3%81%AE%E8%87%AA%E6%92%AE%E3%82%8A%E3%83%8C%E3%83%BC%E3%83%89%E5%85%AC%E9%96%8B%E4%B8%ADavgle
https://mtke-job.jp/list/keyword=%E3%83%98%E3%83%AB%E3%82%B9%E5%AC%A2%E3%83%BB%E5%A3%B2%E6%98%A5%E5%A9%A6%E3%81%AE%E9%87%91%E5%9F%8E%E8%8B%B1%E9%87%8C%E3%81%95%E3%82%93%EF%BC%881984%EF%BC%8F3%EF%BC%8F21%E7%94%9F%EF%BC%89%E3%81%AE%E8%87%AA%E6%92%AE%E3%82%8A%E3%83%8C%E3%83%BC%E3%83%89%E5%85%AC%E9%96%8B%E4%B8%ADavgle
https://news.dwango.jp/search/?s=%E3%83%98%E3%83%AB%E3%82%B9%E5%AC%A2%E3%83%BB%E5%A3%B2%E6%98%A5%E5%A9%A6%E3%81%AE%E9%87%91%E5%9F%8E%E8%8B%B1%E9%87%8C%E3%81%95%E3%82%93%EF%BC%881984%EF%BC%8F3%EF%BC%8F21%E7%94%9F%EF%BC%89%E3%81%AE%E8%87%AA%E6%92%AE%E3%82%8A%E3%83%8C%E3%83%BC%E3%83%89%E5%85%AC%E9%96%8B%E4%B8%ADavgle テーブル名に半角スペースつけて作成したら
半角スペースなしでテーブル作ろうとしたわ重複してるって言われる。バグなの? >>519
問題なさそうだけどな
http://sqlfiddle.com/#!18/744d8/1
再現できるCREATE文とSQL Serverのバージョン情報を >>519
SSMSのGUIだと不具合があるとかないかな
SQL文なら問題無いことが多い
また、単純に、既にビューがあるとかという落ちもあったり なんで半角スペースを使おうとしているのかがわからない。 間にスペースはまだわかるけど最後にスペースはさすがに理解できん すごい規約だな
COBOLっぽさがあるけど普通はDB側じゃなくプログラム側で対処するよな そんな規約があるような所はテーブル名もT0001234とかじゃねーの? クライアントソフトからsqlでビューの登録がタイムアウトしてしまう。何が原因かどうやりゃいいの? >>532
エラーメッセージで何がタイムアウトをしてるのかは確認できてる? >>533
以下で、何が原因かは特定できません。
「実行タイムアウトの期限が切れました。操作完了前にタイムアウト期間が過ぎたか、サーバーが応答していません。」 >>534
Command Timeoutなので指定してなければデフォルト30秒なんだけど
開始してからタイムアウトが発生するまでの秒数と合ってる?
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.sqlclient.sqlcommand.commandtimeout?view=dotnet-plat-ext-5.0
サーバー側の負荷状況や実際に処理が実行されてるかをActivity Monitorとかで確認すればいい
Indexed Viewとかじゃなくて単純なViewなら秒単位の時間がかかったりしないから
何か待たされてるんだろうけどぱっと思いつく原因はないな sql Server側で、クエリパフォーマンス分析や構造分析って
プロファイラー以外になにつかってます? 構造分析ってなんかわからんけど
クエリのパフォーマンス分析はEXPLANが基本 (SET SHOWPLAN_ALL ON)
実際実行した結果はSET STATISTICS IO ONとSET STATISTICS TIME ONで確認
トレースとるのは正常に実行されないクエリに悪影響を及ぼしてるものが
他の方法では簡単に特定できないような場合に使う
性能に影響でるから運用中の本番環境で使うのは最終手段 とりあえず流したSQLとどうやって実行したか曝せよ
ビューの登録ってのが何のことかわからんが、Create Viewがそうそうタイムアウトするとは思えん alter view ではtime outはよくある
使ってるviewをalterするとデットロックする sqlの中の括弧の対応関係を色付けしてくれる機能ってssmsであります? >>539
deadlockとtimeoutはエラーメッセージが違う 単なるタイムアウトをデッドロックとか言う人多いよね
まあSQL Serverはalter viewもトランザクション内でできたはずだから
デッドロックすることもなくはないんだろうけど 排他ロックとデッドロックを間違えるレベルはひどいなw csvファイルでテーブルをキーが一致したらレコード洗い替えたい。バッチファイルとか実行すると作動するようにしたい。
可能ですか? Accessはもう諦めたのか?
そんなんじゃ何一つ出来ないぞ sqlcmdをサーバはインストールしてるけど
クライアントはしてない場合にも
実行できる方法ない? >>550
何らかの方法でサーバーにログインして実行すればいいんじゃね? >>550
SQLServerのドライバはOS標準で組み込まれてるんだから、バッチ処理で良いんならJSやVBSを使えば良いんじゃないの
PSよりはVBSの方が情報が多いように思うし、OFFICEが使えるならVBAでも良いんじゃないの
というかOFFICEが入ってるならMSクエリとかが使えるか
>>553
クライアント環境にはできるだけツール類はいれたくないだろ >>554
>クライアント環境にはできるだけツール類はいれたくないだろ
DBを直接操作する人間のクライアントにsqlcmdとかSSMSが入ってないほうが意味がわからないんだけど?
まさかエンドユーザーにやらせようとしてんの? >>555
そう
一般利用ユーザーにテーブル更新させる
別にそういうとこあるでしょ >>556
そういうのは普通アプリケーション経由で処理するから
エンドユーザーのクライアント環境でバッチを流したりはしない
入力データが不正だったり更新が競合したりしても
エンドユーザーレベルのリテラシーで対応できるようなものを作る
各ユーザー専用のテーブルのみ更新するような場合で
データが壊れても再作成すればいいような重要度の低いものなら
そういうやり方もありえるのかもしれないが
問い合わせが増えるだけだからまずやらない >>557
クライアント側のアプリケーションだと
レコード削除はできない制約あるパッケージとか多くない?
スクラッチならやるけど クライアントアプリが制限されているから
BATでやりたいと……
なるほど!理解した! データの洗い替えをユーザーにやらせるのは聞いたことないな
マスタメンテで複数件一括更新することを洗い替えと呼んでるのかもしれないが トランザクションなら本来の意味での「洗い替え」っぽいけど
だとしたらユーザー入力のcsvファイル使って
ユーザー環境でバッチ実行させる意味がますますわからん
わかる人いたら解説してくれ こういう当たり前のアプリケーション設計知識って実務経験以外で手に入れるのは難しいのかもね >>564
話を聞いてて、うちの会社でも同じような例があった
本社のシステム部門がDBを管理していて、事業部のシステム部門がマスタを更新したいって例があった。
本社部門は、テーブルを直接操作する権限は与えたくないんだけど、更新作業を自分たちでやりたくない、インターフェースのアプリを作りたくない
というような流れ、本社部門がしっかり作りこめば良いだけなのにね システム部門がユーザーの場合は全然話が違うでしょ
やり方はいろいろ有るけど単純なのはファイル連携で定期スケジューリングしたバッチジョブ流すだけ
エラー時は入力データを用意した関係者にエラー内容を通知するようジョブを組んでおけば十分なので
ユーザーインターフェースを用意しなきゃいけないような話ではない
自分たちが管理してないDBを直接SQLで更新したいってのも論外だし
事業部のシステム部門があるような大企業でマスタの更新バッチすら作らないような本社システム部門はかなりヤバい てか、事業部がどんな大きさなのかわからんけどシステム部門を抱えてるレベルなら事業部のDB持ってないの?
コンプライアンスとかで本社のシステム部門が統括管理してるのかな?
それであっても簡単なメンテツールを事業部システム部門が作ればいいだけだと思うけど… updateなのに重複するキーを挿入できませんと怒られる
そんなこと有り得るのかな キー値を書き換えた
トリガーでなんかした
まあ他にもあるかもしれんが、ありえる >>567>>568
おっしゃる通りです
日立とかIBMのホスト系しか扱ったことがない方が多くて、人員も世代交代に失敗していて古いシステム構成のまま改悪が続いてる
事業部側も人員がいなくてシニア契約社員が主戦力になってるような会社なんです
若い有能な人は見切りをつけて転職していく
個々の担当者はそれなりなんだと思うけど、経営がちょっと抜けてる感じでどうしようもない >>570
ありえました
と同時に絶望しました
もう作った人に修正させてと思いました 付加列インデックスって関数の引数に使ってくれる?
where句、select句どっちも使う、使わない、どっちかしか使わないとかわかる資料ってどっかにあるかな? SQL Serverは関数インデックスをサポートしてないから
付加列インデックスかどうかやkeyかnon-keyかに関係なく
関数の引数に使った場合はindex seekにはならないよ
computed columnでkeyならwhere句で使える
non-keyはwhere句では使えない >>575
やっぱそうだよね。
なんか遅いクエリの実行プラン確認したときに出てきた足りないindexの中の付加列にisnull関数噛ませてるカラムが出てたんでもしやと思ったんだけど。
バージョンは2017です
ありがとうございました ん?
isnullってことはwhere句で使ってるんじゃないの?
であれば付加列インデックスの使い方間違ってる
あとちゃんとインデックス作っても
isnull自体にパフォーマンスの問題あるから違う方法に変えたほうがいいかもしれない >>577
そう。where句で使っていてselect句にはないカラムです。
付加列インデックスの使い方の件はわかってたんだけど、実行プランの足りないインデックスにisnull関数に噛ませてるカラムが付加列に入ったインデックスが出てきたんで、あれ思い違いしてたんかな?と思って質問させていただきました。
違う方法についてはよくある触りにくい、他の方法はコストがかかるってやつです。
まぁ、インデックスの追加も方法の一つとして、他の案も含めて考えます。 この一連のやり取りが理解できないのは俺だけか?
とりあえず、その他の条件が満たされるなら
関数の引数でも、付加列の目的である余計なキー参照はしなくて済むぞ >>579
分かりづらかったのならすまんね。
今回の質問は問題解決ではなく仕様確認になるのかな
とある遅いクエリ流したら実行プランの確認でこれが足りないよって言われたインデックスにwhere句のisnull関数の引数に使ってるカラムが付加列として出てきました。
関数の引数にインデックスのカラムは使えないと思ってたんだけど、付加列ならいけるの?ってことで質問しました。
とある遅いクエリの改善についてはどうでもいいです 使えないとはどういうことを言ってるんだ?
インデックスはってもそのカラムが使えなくなることなんてないぞ
実行時にそのインデックス使うかどうかはわからんがな
そのパターンでインデックス使って早くなるのは大体はキー参照しなくて済むパターン
だから通常のインデックス列ではなくて付加列で良いというお薦めだろう >>582
日本語下手でごめんね。
例えば、
create table AAAA
(
colmun01 char(4) not null
,colmun02 char(4) not null
,seq int not null
,first_date varchar(8) null
,last_date varchar(8) null
,primary key
(
colmun01
,colmun02
,seq
)
)
ってテーブルがあって
select colmun01
from AAAA
where colmun02 = 'BBBB'
and '20210401' between isnull(first_date, '00000000') and isnull(last_date, '99999999')
ってクエリを実行して実際の実行プランを確認したら
CREATE INDEX CCCC
ON DDDD( colmun02)
include(first_date,last_date )
が足りないんじゃない?
って出ました。
付加列の中のカラムはisnull関数の引数なんだけどなんで?
ってなったんで最初の質問になりました。
(WEBだけだけど)調べても出てこなかったんで
first_date、last_date が date型じゃなくてvarchar型 なのは許して。元のテーブルがそうなんで サジェストされてるインデックス追加すれば付加列としての効果はあるね
でもそもそもBETWEENの左側に固定値をもってくる書き方って有りなのかなぁ
isnull不要にしてfirst_data, last_dateをキーとしてインデックスはっても
Index Seekにはならないような気がするんだけど実際どうなんだろ >>585
付加列の効果あるんですか。
>でもそもそもBETWEENの左側に固定値をも>ってくる書き方って有りなのかなぁ
なるでしょっ、て思い込んでたんで改めて
isnull不要にしてfirst_data, last_dateをキーとしてインデックスはってfirst_data, last_dateのbetweenのみで実行してみたら、最適化の段階で大なり小なりに展開されてindex seekになってますね。実行プラン見る限りは ☓ isnull不要にしてfirst_data, last_dateをキーとしてインデックスはってfirst_data, last_dateのbetweenのみで実行してみたら
○ first_data, last_dateをキーとしてインデックスはってisnull不要にしたfirst_data, last_dateのbetweenのみで実行してみたら >>585
もうあんたの書き込みはネタとしか思えないんだけど? >>591
こだわっている理由というか、このクエリでなんでこの条件がパフォーマンス改善の候補として上がってきたのかの理由が知りたい。
自分の今持っている知識が間違っているのだろうけど、この付加列が入ってくる理由がわからないので
前にも書いたけど、元の処理のパフォーマンス改善自体はどうでもいい isnull関数を使っているから、他人には何を知りたいのかわからない。 インデックスに付加列しとけばインデックスの読み込みだけで済むからでしょう
付加列にないカラムを参照したらインデックス以外にテーブルも読み込みしないといけないから遅くなる インデックススキャンにしなければいけない→テーブル全体のインデックスを作る→このインデックスはいらないのでは? 付加列の話を出したものです。
一応簡易的にデータを作って確認してみたので結果を書きます。
環境:
Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Express Edition (64-bit)
on Windows 10 Pro 10.0 <X64> (Build 19043: ) (Hypervisor)
実施内容:
互換性レベル:SQL Server2017 のデータベース上で
create table AAAA
(
colmun01 char(4) not null
,colmun02 char(4) not null
,seq int not null
,first_date varchar(8) null
,last_date varchar(8) null
,primary key clustered
(
colmun01
,colmun02
,seq
)
)
の形のテーブルをAAAA〜EEEEの5つ作成。同一のデータを100万件投入
各々
CREATE INDEX IX_XXXX ON BBBB(colmun02)
CREATE INDEX IX_XXXX ON CCCC(colmun02) include(first_date, last_date )
CREATE INDEX IX_XXXX ON DDDD(colmun02, first_date, last_date )
CREATE INDEX IX_XXXX ON EEEE(first_date, last_date )
のindexを作成
各テーブルに対しての
select colmun01
from <テーブル名>
where colmun02 = 'BBBB'
and '20210401' between isnull(first_date, '00000000') and isnull(last_date, '99999999')
を1クエリでまとめて実行し実際の実行プランを確認 結果:
AAAA Clustered Index Scan となりクエリコスト30%
BBBB Clustered Index Scan となりクエリコスト31% ※作成したindexは効かず
CCCC IX_XXXX がindex Seek となりクエリコスト6%
DDDD IX_XXXX がindex Seek となりクエリコスト6%
DDDD IX_XXXX がindex Scan となりクエリコスト28%
となりました。
この結果からIndexのキー列、または付加列が関数の引数として使用されている場合もindexが効く場合があるようです
ちなみにBBBBテーブルの実行の際にヒント句でindexを強制した場合は
AAAA クエリコスト8%
BBBB クエリコスト81%
CCCC クエリコスト2%
DDDD クエリコスト2%
DDDD クエリコスト8%
となりました。 >>575の通りの理解だったので、なぜこのように動くのかがわかりません。
何か知っている方や理解に誤りなどありましたら教えていただけると助かります >>601
演算のパーセント表示だけで比較されてもわからんがな >>603
では、他にどのような情報がアレバ良いのですか? クエリコストの大小を比較したいなら各クエリ全体のコスト
コスト1000の6%と、コスト10の30%なら後者のほうが効率がいいからね
SET SHOWPLAN_ALL ON;
SET STATISTICS PROFILE ON;
SET STATICTICS IO ON;
↑この3つでそれぞれ表示される値の意味をdocs見て把握しておくといいと思う >>605
ありがとうございます。
ただ今回自分が知りたいことはコストはあまり関係ないんですよね。
違う結果になったことを明示するための情報としてコストを出したつもりでしたが下記の知りたいことからすると不要な情報でした。
すみません。
知りたいことは実行したクエリ
select colmun01
from <テーブル名>
where colmun02 = 'BBBB'
and '20210401' between isnull(first_date, '00000000') and isnull(last_date, '99999999')
のfirst_date,last_dateはisnull関数の引数なのになぜ付加列、またはindexのキー列が利用されて、index seekのみで解決されているのか?
になります。※1
元々indexのキー列、付加列は関数の引数や計算が含まれるとwhere句で利用されない(と思っていた)ため、CCCCテーブル、DDDDテーブルの実行はindex seek後にクラスター化indexのキー参照が起こると思っていました。
これはヒント句でindexの利用を矯正したBBBBの実行と同じ動きです。
一応テストした結果として、※1については解決できる場合があり、そもそもの自分の知識が誤っていることがわかりました。
ので「indexのキー列、付加列が関数の引数や計算が含まれてもwhere句で利用される」のはどのような場合か、明確な基準があるのかなどがわかれば教えていただければとおもいます。
一部表現が適切でなく伝わりにくい部分があるかと思いますが汲み取っていただけると助かります。 利用されないのはオプティマイザが利用しても効果がないと判断したからで、効果があると思えば利用する
それだけのこと
べつに引数や計算だろうと直接の比較だろうと同じなんだが >>606
column02だけでindex seekしてるのか
column02に加えてfirst_dateやlast_date含めてindex seekしてるのかseek predicatesで確認した? >>608
これでした。ありがとうございます。
index seekの中を確認したところ、column02のみがseekでisnull関数の引数になっているfirst_dateとlast_dateはwhereでの参照でした。
CCCCとDDDDのクエリからisnull関数を外したものの実行結果と比較していろいろ合点がいきました。
GUI上のindex seekの表示しか見ていない浅い確認でそれ以降の知識がなかったため、自力でここにたどり着くのは難しかったと思います。
あらためてありがとうございました。
ついでにで申し訳ないのですが、今まで実行プラン上でindex seek、またはindex scanになっていることを「indexが効いている」と表現していたのですが、これは一般的に間違っていますか?
質問の中で色々表現がおかしく、理解しづらい部分もあったと思いますので少しでも修正できればと思っております。 >>607
今迄はあなたと同じように「オプティマイザの気分」で済ませてたのですが、今回は少し突き詰めたかったのです SQLserverのハードを買い替えようと検討してもるんだけどストレージをSSDしても大丈夫か聞きたい。
SSDは書き込みの回数制限があり、頻繁な書き込みのあるSQLserverには向かないと昔聞いた事あったんだけど今は大丈夫か教えて下さい。 >>611
SQLserverに向かないってよりもアクセス頻度の問題のような気がするけど。
ssdって言ってもqlc,tlc,mlcのような種類もあるし。
ただ、前にベンダーに見積もりとった時に聞いたのは利用用途が中規模のwebサービスなら、5年位であればそんなに気にしなくて良いって言われた。(ここでのSSDの種類が何か、中規模がどの程度かは忘れた。参考にならずすまん)
ちなみにどんな利用用途なの?
社内用か、インターネットに公開してるサービスなのか(1日のアクセスはどの程度か)、それとも個人用か
個人用でもなければどこかのベンダーに話聞いちゃった方がいいかも >>612
アドバイスありがとう
用途は会社でデータウエアハウス的利用です。日次で基幹システムからデータ取得して蓄積するようなデータサーバです。
DELLの直販で買う予定でサーバ向けSAS接続のSSDだから大丈夫だと思う。
一応DELLに問い合わせしときました。 レプリケーションというのを初めて設定しているのですが
「スナップショットエージェントが起動していません」のMSGが
出てスナップショットが取れません。
これってSQL Server エージェントとは別物ですか?
SQL Server エージェントは起動しているのに…。
すみませんが、わかる方がいたら教えて下さい。 オブジェクト名'sysservers'が無効です。エラー208
これどういった調査をすれば良いのでしょうか? 将来のバージョンで廃止予定とかになってるけど、バージョンいくつ使ってるんだろうな 何をどうしたらそのエラーが出たのかと、エラーメッセージを正確にかけ サブスクリプションの新規ウィザードで
パブリケーションを選択して次へをクリックすると
先のメッセージと一緒に「パブリケーションの
情報が取得できません」のMSGが出て先に進めません。
SQL SERVER2008R2です。
2019の評価版で試すと問題なく設定できます。 パブリケーション側のバージョンが2008なのかな?
SSMSのバージョンを2008をサポートしてる古いやつで試すといいんでない? >>622
パブリケーション側が2008です。
SSMSのバージョンについては
全く頭にありませんでした
試してみます
ありがとうございました >>622
サブスクリプション側のSSMSをver10に変えたら出来ました。
本当にありがとうございました。 大したデータ量でもないのに「クエリの実行中にMemoryGrantを25秒間待機する必要がありました」との警告が出て処理が遅くなるんですが対処法はないでしょうか。
また値が1, (2 or 3), (4 or 5)でそれぞれ集計したいのですがどのようなSQLにすればいいのでしょうか >>625
>大したデータ量でもないのに「クエリの実行中にMemoryGrantを25秒間待機する必要がありました」との警告が出て処理が遅くなるんですが対処法はないでしょうか。
テーブルとインデックスの構成、クエリ内容、実行プランを確認して原因を突き止めてください
原因が分かったらテーブルやインデックスを変更したりクエリを変更して対処してください
>また値が1, (2 or 3), (4 or 5)でそれぞれ集計したいのですがどのようなSQLにすればいいのでしょうか
現在のテーブル構造と欲しい結果のイメージを提示してください >>625
> また値が1, (2 or 3), (4 or 5)でそれぞれ集計したいのですがどのようなSQLにすればいいのでしょうか
select
case when 値 = 1 then '1' when 値 = 2 or 値 = 3 then '2 or 3' when 値 = 4 or 値 = 5 then '4 or 5' end as 値,
sum(集計列) as 集計
from テーブル
group by
case when 値 = 1 then '1' when 値 = 2 or 値 = 3 then '2 or 3' when 値 = 4 or 値 = 5 then '4 or 5' end 開発サーバにいれるSQLServerのエディションをDeveloperにするの問題ないでしょうか
利用目的はシステム改修の開発単体テストから総合テスト、受入テスト
あとは本番サーバで不具合でたときの検証目的で使用するのは数名〜Max20人くらい
バージョンアップの準備してて、経緯不明なんですが開発サーバが今Enterprise入ってて変えて問題ないなら変えたい
本番はEnterpriseです >>625
MemoryGrantで待機ってメモリが足りてない
・SQLServer以外のプロセスがメモリ食ってSQLServerのメモリが小さくなってる可能性
→SQLServerの最大メモリ最小メモリの設定、SQLServerのサービスアカウントにメモリのページロックの特権がついてるか
・メモリめっちゃ使うクエリが同タイミングで動いてる可能性
→パフォーマンスモニタのBufferManagerカウンターで急激な変動がないか確認、動的管理ビューでその時間帯に動いてたクエリででかいのを調べる
・そのクエリがめっちゃメモリ食う
→これは626
昔使うメモリの計算に不具合あった覚えあるけど、あれは2008か2012くらいのSPで解消されてたような Express版は10GBまでは使用できるようですが、
10GBを超えそうだという警告などは設定できるのでしょうか?
定期的に使用領域を確認していないと、ある日突然なにもできなくなってしまうのでしょうか? >>630
このページにあるクエリを実行するスクリプトを作成し、タスクスケジューラで定期実行してみてはどうでしょうか
クエリの結果をもとに、自分で決めたしきいち値超えたら警告メールを送るような処理も加えると監視をほぼ自動化できそうですね >>630
ページの情報が抜けてた。。。
「データベースのデータとログの領域情報を表示する」でググってみてください ディスク容量を常に気にしていない運用という点が突っ込みどころなんだろうな >>631-632
ありがとうございます
クエリで問い合わせられるのなら、いろいろできそうです >>633
ディスク容量を常に気にしたところで役に立たないという点が突っ込みどころなんだろうなww >>636
どこにファイルが作られているのかを気にしてない時点でおかしんだけどな。 > どこにファイルが作られているのかを気にしてない
どこからそんな妄想が?w >>637
知らんのなら大人しくしとけよw
お前のオツムのほうがよっぽどおかしいぞ 今、自分1人で使ってるスタンドアロンのACCESS DBがクソ重くて激不安定なので
同じ事をSQL serverでやろうとしてるんだけど
1人でスタンドアロン使用の場合、Developer版を
「永遠に開発中」という設定にしとけばライセンス違反にならない? >>640
Expressを使わずにDeveloperを使わないといけない理由は? >>641
別にexpressでもいいんだけど
単にdevelopは制限が全くないのでこっち使おっかな、程度の事です >>640
止めとけ
素直にMySQLかPostgreSQL使え >>647
そんな理由で別製品にするなんて素人が言うことだろw SSMSでストアドのテストドライバ生成機能ってありますか?
※Sqldeveloperみたいな感じの、っていう表現で伝わりますかね
あるいは皆さんの、ストアドの単体テストの楽な方法とかも何かtipsがあれば Visual StudioのSQL Server Data Tools(SSDT) >>649
そもそもTransact-SQLをわかってますか? 接続文字列のData SourceとServerに違いはあるの?
どちらもサーバーのインスタンス名かIPアドレスとポートの指定だと思ってるけど SQLServerでServerといったら基本的にはSQLServerがインストールされているサーバーかサーバーとそのインスタンス名まで
DataSourceとなるとSQLServer以外のDBMSやフラットファイルも含まれる 久々にSSMS2008を触ってて
クエリショートカットのカスタマイズした機能が動かなくなってるんだけど
同じようなことしてる人いる?(COMMITとROLLBACK)
https://dotup.org/uploda/dotup.org2767912.png >>656
ごめん自己解決
間違ってF5押してたわ 教えて下さい。
ACCESS2019、SQL Server2012利用しています。
ACCESSからSQL ServerのテーブルへODBCでリンクテーブルを貼っている環境があるんですが、
特定の端末だけ、リンクテーブルを開くと、内容が突然すべて#DELETEになってしまう に現象に見舞われました。
https://pctips.jp/pc-soft/access-sqlserver-deleted
このサイトを始めとして、同様の現象を解説しているサイトには、SQL Server側でbigint型を使ってるせいとありましたが、
bigint型は使っていませんし、特定の端末のみこの現象が発生しています。
再起動やODBC設定の作り直し、リンクテーブルの貼り直しなどしても治りません。
更に不思議なことに、次の日になると治ってしまいます。
で、しばらくたつとまた同じ現象に見舞われます。
(ここ一週間で3回です)
私も長年SE・PGやっていますが、このような現象は初めてで、
途方にくれています。
最悪PC変えれば治りそうな感じではあるのですが・・
なにか情報をお持ちの方のお知恵を拝借したく・・・
何卒よろしくお願いいたします。 bigintだけじゃなくて、bit型で値がNULLだったりしたらそんな感じになった気がする
まあ、クライアントがまったく同じバージョンでまったく同じデータを表示して起こるなら
ネットワーク系の問題の可能性が高そうだけど
それかODBC定義が違ってるとか
ウィルスチェック系のソフトが悪さしてるんじゃね sql serverにアプリから接続しているクライアントPCって
利用状況モニターで確認できますが、過去の履歴ってどこから見れますか? >>663
利用状況モニターってたぶん動的管理ビューから情報とってるから、それの過去データ見たいならそれをとるように設定しないと
データコレクションがそれなんだろうが自作でクエリ組んでSQLAgentで動かすほうがカスタマイズしやすいと思う
あとは、どういう風にデータを見たいかだけど拡張イベントでログインログアウトとるとかも有りかな どういうログがいるのかわからんが、監査ログで良いんじゃないか 監査ログって拡張イベントを監査用にまとめただけでしょ
簡単にやれるぶん融通がきかない
項目とフィルタの設定の自由度ほしいなら拡張イベント一択 sql sever 2019で、ファンクションを作成しています。
その処理の中で、番号を管理する列から最大値を取得して1を加えたものを新しい番号として同じテーブルにインサートしようとしています。
その処理の間に、他からこのファンクションを呼び出されて割り込まれることを防止するため、ファンクションが完了するまでテーブルロック(排他ロック)をかけたいのですが、どのような記述が必要でしょうか。
begin transaction
commit のような感じで関係するステートメントをかこえたらよいのですが。 >>667
自作せずにSEQUENCEをNO CACHEで使えばいいよ >>668
早速のレスありがとうございます。
連番はSQL SEVERに自動で振ってもらおうと思います。
そして、INSERTとOUTPUT inserted.*を使って、
その新しい番号を得たいと思います。 >>669
訂正します
INSERTにOUTPUT inserted.*を組み合わせて >>671
エクスプレス版を取りあえずダウンロードだけしといたw
SSMSが同じだからなあ…どうなんだろ 質問です。
テーブルA(1)---(∞)テーブルB(∞)---(1)テーブルA
こういう関係になるテーブルBを考えています。
即ち、テーブルAの外部キーをテーブルBの2列で持つことになります。
同じテーブルAについて外部キーを持っても、テーブルBの2列の意味はそれぞれで異なります。
こういうテーブルBの2列は、テーブルAの外部キーを持つので、列名の設定に困ります。
一列だけならforeignkeyofA_CDという列をテーブルBに設定すれば良いですが、こういう場合はどんなふうに列名を設定するのが良いのでしょうか。 >>674
foreignkeyof ってググっても出ないから、そんな作法は一般的じゃないよね
普通に名詞だけの単語でテーブルA,B共通の名前にして、エイリアス名で分ければ? 悩むくらいなら、
/* コメントxxxxx */
みたいにメモを残すほうが、あとでみてもわかる >>674
列名?
外部キー制約名じゃなくて?
列名ならそのカラムがテーブルAで持つ意味でつければいい
外部キー制約名はFK_テーブルA_テーブルBが一般的
2つ同じテーブル同士で外部キー制約を貼るなら
テーブルA側の列名も使って外部キー制約名を付ける >列名ならそのカラムがテーブルAで持つ意味でつければいい
buyerとsellerとか
primary_contact/secondary_contactとか スレが盛り上がったところで、質問させていただきます
SQLCLRなんですが、複数のアセンブリがあって、その中の、一部のメソッドを仕様変更したとき、アセンブリとストアドの依存関係なしに、全部createやり直すのは普通ですか?邪道ですか? 再作成必要ないものまでcreate assembly、create procedureしてしまうんですよね >>679
普通ではないように思うが署名やテストも含め自動化できてるなら好きにすればいいんじゃない? 皆様、レスありがとうございます。
参考になりました。
結局、次のようにしました。
table_A.列名あいう(table_Aの主キー)
table_B.列名あいう(table_A外部キー)
table_B.列名あいう_用途(table_A外部キー)
このように、用途がわかるように列名を設定しました。
ありがとうございます。 同じ列名で格納かれているデータ異なるけど、関連があるなんてわかりにくいにもほどがあるだろw 1対Nを、1対「無限大」と表記する表記法なんて初めて見たわ。 >>682
わるい
「列名ならそのカラムがテーブルAで持つ意味でつければいい」と書いたけど
「列名ならそのカラムがテーブルBで持つ意味でつければいい」の間違いだったわ
message.sender -> account.id
message.receiver -> account.id 外部キー列と参照される列を混同するのは初心者あるあるだが、
純粋に間を取り持つテーブルを作った方がいい。
説明がいるデータモデルにしておくと、自分でもわからなくなる。 トランザクションデータの親子関係と、マスタデータの関係がごっちゃになっているのかな? table_A.列名あいう(table_Aの主キー)
table_B.列名あいう(table_A外部キー)
table_B.列名あいう_用途(table_A外部キー)
table_Aの外部キーが保存されるこの2列ですが、table_Aの同じ行とリンクするものではありません。
table_B.列名あいう_用途(table_A外部キー)
は、たとえば >>689
table_B.列名あいう_用途(table_A外部キー)
は、たとえば、
table_B.列名あいう_処理ターゲット(table_A外部キー)
とでもして、処理と処理済みであることを銘記するためのものです。
table_B.列名あいう(table_A外部キー)がリンクするtable_Aの行とは違う行とリンクします。 >>686
ありがとうございます。
そのように考えました。 >>685
アクセスのGUIってそうなってなかった? >>690
table_B.列名あいう(table_A外部キー)
table_B.列名あいう_用途(table_A外部キー)
つまり、table_Bは、table_Aのサブテーブルでありながら、処理のターゲットにもされるテーブルということになります。 テーブルAの別のレコードの列を参照する列を同じレコードに持つテーブルB
これCOBOLの発想か? >>693
親子関係なのか
それならそういう命名もある程度納得できる
taskテーブルとtask_dependencyテーブルがあって
task_dependencyテーブルではtask Aが終わったら
task B, C, Dを実行するみたいな依存関係を管理する時に
↓こういうイメージの構成にして(A, B), (A, C), (A, D)の3レコードを登録する形だよね
task.task_id
task_dependency.task_id -> task.task_id
task_dependency.depentent_task -> task.task_id 他サーバーのテーブルを参照するビューがクソ重くて辛い
データ転送バッチ作るしかないのか? >>697
ありがとう
他サーバーは他の人が管理してるものだからいけるか謎だけどちょっと相談してみるわ >>698
SQL Serverはマテリアライズドビューがない
これはかなりの欠点 >>700
それは標準SQLのマテリアライズドビューではなく、データベースそのものの物理的なレプリケーションでしかない。
こんなの乱暴すぎてアプリケーションからは危険すぎて使えない。
マテリアライズドビューがわからないのなら、マテリアライズドビューを知ってから反論した方がいい。 >>701
何いってんのww
レプリとマテリアライズドビューの区別もできない上に
マテリアライズドビューが標準SQLになった妄想見てんのかww
恥ずかしいやつだなwww
オラクルしか知らんとマテリアライズドビューの本来の意味もわからんようになるのか
こうはなりたくないな オラクルだと昔はスナップショットと呼んでたから
マテリアライズドビューをスナップショットレプリケーションだと思い込んでるんだろ おまえらSQL Serverしか知らねえのまるわかりじゃねえかw >>702
あのさ、他のRDBMSではレプリケーションという言葉は広い意味の言葉で、製品ごとに定義が異なる。
さらにマテリアライズドビューはデータベースオブジェクトですよ?
SQL Serverで似たようなことをするには、全レコードをSELECTして他のテーブルに登録するくらいしかない。
他のRDBMSはSQLでマテリアライズドビューの操作ができる。 >>703
「スナップショットレプリケーション」なんて言葉が出てくるのはSQL Serverくらい 日本マイクロソフトのサポートや、日本マイクロソフトが作らせたOracleDBとの比較資料も大間違いだらけなんだぜ?
そのくらいマイクロソフトは自社製品がわからない。
日本マイクロソフトの品川本社のSQL Serverサポートもひどいレベル。
普通のデスクトップPCで試してみているだけ。
さも知ってましたみたいに答えるが、Bing検索で検索して答えるレベル マイクロソフトはSQL Serverの欠点を指摘されて、マテリアライズドビューはあるみたいなことを世界に発信している。
マテリアライズドビューは、ビューにインデックスを作成すれば解決みたいなことを言い出して、そのインデックスが実態がもはやただのテーブルにすぎない。
同じようにロックエスカレーションも悪く言われて、これも正反対のロックエスカレーションはすばらしいと言って回っているので、ますますSQL Serverが売れなくなった。 >>705
> SQL Serverで似たようなことをするには、全レコードをSELECTして他のテーブルに登録するくらいしかない。
よくそんなレベルでレスできるもんだな... >>709
データがそんな大きくなければそうやるよ?
あなたは何と戦っているの?
そうじゃない、そうじゃないと言っていても、ただのイタいおじさんを通りすぎて、追放されるレベルだよ。 > こんなの乱暴すぎてアプリケーションからは危険すぎて使えない。
とか言ってた奴が
> SQL Serverで似たようなことをするには、全レコードをSELECTして他のテーブルに登録するくらいしかない。
とかw
とりあえず何が危険なのか書いてみ
それでお前のレベルがわかる まいどまいど斜め上のレスを上から目線で書いちゃってwww
いつも笑わせてもらってる
こいつは特別アホだとしても
オラクル信奉者ってなぜか低レベルなやつ多いよなぁ よろしくお願いします。
Date型で、日部分のみ指定した値に変更したいのですが、そういう関数はあるでしょうか。
元となる年月日から足し引きするような関数はあったのですが、直接指定するというものが見つかりません。
年、月、日に分解したあとに、日のみ変えてまたDATE型を組み立てるしかないのでしょうか。 >>712
他のDBMSに精通したらオラクルを信奉したりしないからね >>713
SQL-Server 2022 なら
dateadd(day, n - 1, datetrunc(month, 日付))
でできると思うけどどう見ても素直に
datefromparts(year(日付), month(日付), n)
の方がわかりやすいと思う >>715
早速レスをいただき、ありがとうございます。
専用関数がないのは残念ですが、確かにわかりやすいので、組み立て方式でいきたいとおもいます。
参考になりました! >>717
こういうのがあるからアップデートしたくない
最初にテストしたら、そのまま何の変更も加えてほしくない Sql server 2019と、SQL Server Management Studio(SSMS)について
SSMSを使って、Sql serverにsaで接続し、
ファンクションを作成しました。
作成用Create functionスクリプトの実行は完了しました。
しかし、SSMSの左ペインに表示されるはずの作成したファンクションが見つかりません。
そのファンクションも、SSMSには認識されておらず、dbo.ファンクション名を打とうとしても、インテリセンスが機能しません。
このとき、SSMSを再起動したのですが、状況は変わりませんでした。
しかし、Sql serverも再起動した後に試すと、SSMSはさきのファンクションを認識しました。
こういう挙動は普通ですか?
ストアドプロシジャなら、直ぐに認識されなくても、いくらなんでもSSMSで再接続さえすれば認識されたと思います。 >>719
データベースの情報を完璧に取得し直して表示するという仕様は、完璧である必要があると思っているんですか?
データベースオブジェクトを検索して表示するのも負荷のかかることです。
SSMSで一時的に見えなかったことを問題視してますが、そんなに重大な問題ですか?
SSMSではなく、クエリで存在を確認する習慣をつけた方がいいですよ。 ストアドプロシジャ内で、
サブクエリによるテーブルの導出を
テーブル値ファンクションで行うとパフォーマンスは落ちるのでしょうか。
各ストアドプロシジャ内で、同じ導出を行うのも非効率だなと思って、流用しやすい形でfrom 句にファンクションを使おうと思っています。 >>719
SSMSってDB情報とかキャッシュしてるから、まあよくあることなんじゃね
>>721
テーブル値ファンクションって、おそらく実行時に展開されないので
サブクエリより実行計画の幅が狭いはず
なのでサブクエリより実行効率が上がるとは思えん >>719
手動でRefreshしなよ
わからなかったら「SSMS Refresh」でググって
インテリセンスのキャッシュも同じ
DBに不必要な負荷をかけないために昔からそういう仕様だったはず >>721
Inline Table Valued Functionなら
SELECT文を直接書くのと同じように展開されてから
オプティマイザが実行プランを生成するのでパフォーマンスは変わらない >>722
>>724
レスありがとうございます。
テーブル値ファンクションを、From句や、
OUTER APPLYで使うと、パフォーマンスおちないか心配でした。
ストアドプロシジャにベタ書きするように最適化されると聞いて安心しました。
しかし、再利用性を高めるとはいえ、
SQLにサブルーチン的な発想をもちこむのは心が痛みます。 >>725
整合性の取れた最新のデータを取得しないといけない理由があるんですか?
理由がないのならそんなやり方は捨てるべきです。
しかもデータ量について言及がないので、データ量が少なければ、どういう方法でやっても速度性能なんてほとんど変わりません。
パフォーマンスは低下するが、1.00秒かかるクエリが1.01秒になるような性能悪化なら気にしても意味はありません。 >>726
>整合性の取れた最新のデータを取得しないといけない理由があるんですか?理由がないのならそんなやり方は捨てるべきです。
どういうこと?
静的テーブルに、予めデータを用意しておいて、
これを使うということ?? >>725
通常のビューや、CTEでダメな理由がなにかあるのか? >>729
そこで言う再利用って何?
CTEはともかく、ビューが再利用できないわけないんだが >>730
テーブル値ファンクションで、定義しとけば、
他でテーブルのように何度でも使える。
修正も一箇所ですむので簡単。 >>727
そいつはDB板の有名荒らしなので相手にするのは時間の無駄だよ 条件となる値が固定ならビュー
条件となる値が可変ならinline TVF >>734
引数なしのテーブル値ファンクションは駄目? >>731
だからそれだと、ビューがダメな理由にならないんだが? >>736
ビューはかつて使ったことないけど、
from句や、OUTER APPLYできるのかな。
ファンクションで作っておくと、引数追加したくなっても変更しやすそう >>737
>from句や、OUTER APPLYできるのかな。
当然使えるよ
SELECTするだけならTableが使えるところならどこでも使えると思うよ
更新系はいろいろ制約があってそれを満たしてなければ使えない SQL ServerのPKやインデックスは作成後にメモリに常駐し続けるものなんでしょうか? >>740
キャッシュにブロック単位で読み込まれて残ってることはあるけど常駐はしない SQL Server for LinuxでActive×Activeの遠隔地マルチマスター構成作れるの? >>742
WindowsかLinuxかに関係なくSQL Serverが持ってる機能だけじゃできないと思うぞ
Oracleと同じでGoldenGateみたいな3rdパーティの製品依存 大規模システムはOracleDB、
中小システムはSQL Serverという棲み分けは
結局、変わらなかった。
今後も変わることはない。
なぜならマイクロソフトが諦めているから。 十数年前ならともかく
本当に大規模なシステムでは
もうオラクルやSQL Serverを検討するような時代じゃないからな >>747
勘違いしすぎだぞ
クラウドでも大企業はオラクルクラウド、AWSやAzure上で同じ製品を使っている >>749
大規模なシステムと大企業のシステムの違いもわからないのかww
脳みそバグってるね 単にお金がない企業は安いものを選択するしかないだけの話 そうなんだよ
お金がないからAmazonもOracle全部やめようとしてるんだよなぁ Googleもお金がないからオラクルなんてボッ・・・高価なものは使えない
Facebookも右肩下がりだから節約してMySQL AWSなんてすげーお金がかかるのに騙されて契約するのが日本人 本番環境しか見積もらずにAWSに完全移行して、運用保守環境がなくて積む企業が多発しているのが現状。 SSE2017相手なんだけど
SSMS19は18から設定を引き継ぐと繋がるけど
設定をクリアして新規で接続しようとすると
証明書がどうたらって出て接続エラーになる
でアンインストールしてSSMS18を入れ直すと
新規設定からでも接続できた
SSE2019以降の組み合わせだとどうなるか…
検証が非常に面倒だw SSMS19の接続問題は接続の暗号化オプションが原因だった
SSMS18は暗号化が既定でオフだった >>762
SSMSだけの問題じゃなくて、ほかのクライアントでも問題出てるから
サーバーかクライアントドライバでのデフォルト設定が変わってるっぽい
とりあえず接続文字列修正してるけど、デフォルト設定変える方法探さんとなぁ SSMS19は設定ファイル自体を削除しちゃうと
接続暗号化オプションにもチェックが入るけど
詳細メニューで一度リセットボタン押しとくと
その後は既定で暗号化オプションがオフになる Azureの方も更新来てたけど
引継でも新規接続でも問題無いな SQL Serverは他のRDBMSと実装の方向性が違いすぎて、もはや作りが崩壊している。 >>767
特定のインデックスがあるとテーブルが不要になるあたり >>769
列ストアインデックス
根本的に実装がおかしいと言っているようなもの いや、個別の機能とかそういうのはいいから。
それをどう使うとどういう風になにが崩壊するのか実際的に語ってみて。 >>771
テーブルで実装できなかったことをごまかしている データの読み取りだけで高負担という欠点をさらしているわけだが、読み取り一貫性の実装が何度、作り直しても同じという諦めはマイクロソフト自身が諦めていること。
マイクロソフトドキュメントでわかるとおり、技術的にわかる人間を投入していないからこうなる。 >>770
データウェアハウス向けの機能追加したら、他のRDBMSと実装の方向性が違いすぎるってか
>>データの読み取りだけで高負担という欠点
エビデンスは?
>読み取り一貫性の実装が何度、作り直しても同じという諦めはマイクロソフト自身が諦めている
エビデンスは?
>マイクロソフトドキュメントでわかるとおり、技術的にわかる人間を投入していない
たとえばどのドキュメント?
せめて、具体的なURLの一つでもあげてから言えよ SQL Serverの営業職なのか?
SQL Serverは同時実行性を切り捨てている。
2005から2008でコードを書き直したが、結局、仕様がたいして変わらないものが納品されたことぐらい歴史を勉強しろよ。 >>777
他のトランザクションを邪魔する形で、読み取り一貫性を実装している。
データそのものを排他ロックするSybaseの流れから方針転換できなかった。
だから、列ストアインデックスのようにテーブルのコピーを作って、読み取りの並列化をするしかなくなった。
批判をしているんじゃなくて、事実を書かれて頭に来ているのは、ちょっとおかしい。 だからエビデンスを出せと
せめてURLの一つでも張らないと何の説得力もないよ
>>778
>仕様がたいして変わらない
中身のコードはどうでもいいが、バージョン上がって仕様が変わってたら大変なんだが?
>>779
ロックで一貫性を保つのは普通の方針だと思うが、それが実装の方向性が違うって?
で、列ストア以前にスナップショット実装されてるはずだが、それについては?
まあ、どうせ何の根拠もなく使い物にならないっていうんだろけど >>781
他のRDBMSは仕様を変えながら進化している。
後方互換性をマイクロソフトがアピールしていることもないし、そもそも後方互換性を気にしないのがSQL Server。
これを批難されているように受け取るんだろうけど、SQL Serverは日本マイクロソフトが作っているんじゃねえんだぞ? SQL ServerはSQL ServerのDBAはなかなかいなくて、マイクロソフトは売りっぱなしの商売下手。
すでに終わったSQL Serverの資格も普及させる気があるとは思えなかった。いまはAzureのおかげでセット販売ができているからいいけど。 だから、どこが崩壊してるんだよ。
結構真面目に聞いてたつもりだったけど、何の根拠を挙げることもできないのね。
ただのアンチさんの戯言だったわけだ。 SELECTだけで必要以上にレコードを排他ロックすることがいまだにあり、これによる同時実行性の低下対策として、レコードのコピーを使う仕組みが作られて、それを使わされている。
要するにマイクロソフトが指示した仕様を手抜きで前のバージョンのコピープログラムで再構築してしまったのが不幸の始まり。
マイクロソフトはいまだに「ロックエスカレーションは必ずしも悪いことではない」と説明せざるをえない。 >>785
テーブルをSELECTしながら処理するのと、テーブルをSELECTし、同じSELECT結果を登録した一時テーブルや同じデータを持つ列ストアインデックスを参照して処理するのを比べると、後者の方が短時間で終わる。
さらにやばいのがSQL Serverはいまでも単にSELECTしただけで、理由のわからない大幅な性能劣化が起きることがある。
マイクロソフトそのものが諦めているのに、SQL Serverに期待しすぎの人間がこのスレにいるのは、日本マイクロソフトの周知不足なんだろうな。 SQL Serverは同じテーブルに複数のセッションから同時にSELECT文を発行すると、極端に遅くなることがある。
さすがにこう説明すれば、作りに問題があることがわかるだろ? だから、どこが崩壊してるんだよ。
自分の台詞だろ。まずそこを説明しろよ。 何の根拠もなくここまで文句言えるとは
SQL Serverに親でも殺されたのか
>>786
聞いたことないけど、根拠は?
まあ、いまだに自分で明示的にロックかけないとまともに動かないDBを使ってる人は
排他ロックと共有ロックの区別がつかないんだな
>>787
どんな処理をしたらそうなるって?
で、その理由をお前が理解できないから、なぜかそうなるですましてるんだろ
期待してるどうこうではなくて、正しく理解して使いたいだけで
正しいかどうかもよくわからん情報を垂れ流されても困るんだがな 3行めから6行目までのデータを抽出するときってどうやって書いたらいいですか? >>793
SELECT *
FROM テーブル名
LIMIT 4
OFFSET >>794
OFFSET 6;
とするとエラーが出ました この辺りのこと?
ttps://sql-oracle.com/sqlserver/?p=857 >>796
すいません。
これです
調べきれてなかったです。
ありがとうございます。 2行目の5列目のみを抽出したいときってどうすればできますか?
SELECT 5列目の列名
FROM テーブル名
まではわかったのですが。。。 >>799
同じように入力してみます。
すいません。 select s from テーブル名 s where s.email = $1;
この s って何でしょうか?
AS句を省略してる的な感じなのでしょうか? >>802
合ってたんですね。
ありがとうございます。
ググるにも何て調べたら良いかわからず困っていました。 ですか?
同じテーブルを隣同士に繋げても意味ない気がして。。 同じテーブルでも行ごとに中身がちがうんだから
違う行をつなげる意味はあるだろう LEFT OUTERJOINの説明で、結合した時に余計なデータを取ってくるとノイズになるって説明見たんですけど、(ノイズ)ってなんの意味ですか?
NULLばっかりになるってことですか? >>808
行数もそうだがむしろ
select *fromなんて指示したらどえらい列になるってことでは 不要な列のデータ=ノイズって解釈なのだろうとエスパー。 たぶんそういう意味だろうね
(特に右テーブルの)不要な列を取ってくるなってことを言いたかったんだろう >>809
列指定にアスタリスクを使うことはあまりない Developer Editionのライセンス規約数年前に変わったはずなのに、未だに開発者しか使えないと
大手ベンダですら勘違いしているのはマイクロソフトの宣伝周知足りないよな
こっちは損しないからどうでもいいけど、無駄な金払う顧客が可哀想・・・ 昔もいまも開発用途にしか使えないと思うんだが
昔はどうで今はどうなのか詳しく https://www.microsoft.com/ja-jp/sql-server/sql-server-downloads
SQL Server 2022 Developer は、非運用環境におけるデータベースの開発およびテスト向けの、全機能を備えた無料エディションです。
SQL Server 2022 Express は、デスクトップ、Web、小規模サーバー向けのアプリケーションの開発と運用に最適な、SQL Server の無料エディションです。 クエリストア、めちゃくちゃ便利ですね
Oracleから移ってきたけどsql serverの便利さ に驚いています。
ssmsやc#との連携のしやすさなどエコシステム全体がユーザーフレンドリーな感じ
逆にOracleが不便なだけなのかもだけど 公式ドキュメントに問題があるせいで伸びないSQL Server エラーの有無にかかわらずログテーブルへの出力をしたいんですが、オラクルのような自律型トランザクションってないんですよね…
皆さんどうやってます? それってメインの処理は成功してログテーブルへの出力が失敗した場合はどう対処してるの? テキストファイルに吐いといて定期的にログテーブルに乗せるとか
原始的すぎるかな テキストファイルに吐いといて定期的にログテーブルに乗せるとか
原始的すぎるかな テキストファイルに吐いといて定期的にログテーブルに乗せるとか
原始的すぎるかな 本当にロールバックさせたいとこだけ子トランザクションにして全体はコミットする 本当にロールバックさせたいとこだけ子トランザクションにして全体はコミットする トランザクションをハンドリングするレイヤーとログ出力するレイヤーが揃ってないんだろう
テーブル変数やリンクテーブル使った回避策もあるけど揃ってないのがアンチパターンなので設計を見直したほうがいい 設計がおかしいって言っとけばなんかわかってる感が出るから便利よね
どうおかしいかは言ってる本人もわからない ssmsとazure data studioそれぞれで実行計画出したときの不足インデックス提案が微妙に違うことに気づいたけどなんで? azureの料金上がるし、azureからawsに乗り換えるってなるとDBもついでにsql serverからauroraに移行、みたいな話は増えそう オラクルクラウドとか罰ゲーム
VMがタダなのでたまに使うくらい オラクルクラウドはAzureと提携しているんだが? 知らねえだけか
Azureの意味も製品の単位だとまちがって思い込んでいるな awsのマネージドsql serverって実際移行先としてどうなんだろう クラウドはDBが一番コストかかるので頭が痛い
案件ごとにチューニングしてvCore2つなんとか減らせるかどうか…を突き詰めるのしんどいわ インフラメンテコストを丸投げできるなら安い
DBサーバのメンテ不足で痛い目見た経験ある人はこのスレ多いでしょ オラクルクラウドはいいぞ
なんせただでサーバー立てられるからな
ある時よくわからん理由で消されるけどwww 数年前に勝手にインスタンス消されたってツイッターで騒ぎあったね
信用してないからタダでも使わないかなw サブスクがコスト高でオンプレ回帰の流れ
クラウドの役割なんてバックアップ程度が相応しい 定期的にボラクル君が出現するねw
それも決まってなぜかSQL Serverスレww