Microsoft SQL Server 総合スレ 12
Microsoft SQL Server (Transact-SQL) の総合スレッドです。 ・Microsoft 公式サイト http://www.microsoft.com/japan/sql/ >>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 こんな書き方が出来るなんて目からウロコです! スレにしばらく書き込みがなかったので不安でしたが即レス感謝します。 ありがとうございました〜! read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる