Microsoft SQL Server 総合スレ 12
Microsoft SQL Server (Transact-SQL) の総合スレッドです。 ・Microsoft 公式サイト http://www.microsoft.com/japan/sql/ >>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文で取得すればいい read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる