タグ付けされた質問 「sql-server」

Microsoft SQL Serverのすべてのバージョン(MySQL以外)。sql-server-2016のようなバージョン固有のタグも追加してください。これは、質問に関連することが多いためです。

1
すべてのトリガーにSET NOCOUNT ONを追加する必要がありますか?
あなたが持っているべきかなり一般的な知識です SET NOCOUNT ON デフォルトでは、新しいストアドプロシージャを作成します。 Microsoftはこれを2012年に含めるようにデフォルトのテンプレートを変更しました。これはトリガーでも同じであると考えましたが、テンプレートには含まれていません。 これは意図的ですか、それとも単なる見落としですか?

8
アプリケーションがsaアカウントを使用しない理由
私の最初の質問は、穏やかにしてください。saアカウントは、SQL Serverおよびすべてのデータベース、ユーザー、アクセス許可などを完全に制御できることを理解しています。 完璧な、ビジネスマンに焦点を当てた理由がない限り、アプリケーションはsaパスワードを使用すべきではないという絶対的な信念を持っています。この質問への回答には、ITに焦点を当てた議論の多くの理由が含まれています saパスワードを使用しないと機能しない新しいサービス管理システムの受け入れを余儀なくされています。評価を設定するときにサーバーチームがそれをインストールして、db_createrと必要だと思った他のアクセス許可を組み込んで設定した固定ロールを使用しようと試みた理由を解決する時間はありませんでした。失敗しました。次に、サーバーチームにsaアカウントを使用してインストールさせますが、そのデータベースのdboロールのアカウントで実行しましたが、それも失敗しました。不機嫌なことに、私はsysadminロールのアカウントで実行しようとしましたが、それでも失敗し、利用可能な時間よりも多くの時間を費やすことなく何が起こっているのかを理解できる有用なエラーメッセージがありませんでした。構成ファイルにクリアテキストで保存されたsaアカウントとパスワードでのみ機能します。 これを問い合わせると、サーバーチームがベンダーと話し合ったところ、「問題は何ですか?」そして、「パスワードのスクランブルを見ることができます」スクランブルffs 私はファイルへのアクセスを制限する方法と手段があることを知っていますが、それは私の意見ではセキュリティの別の弱点です とにかく、私の質問は、誰かが私がビジネスにこれが悪いことであり、大きなノーノーである理由を説明するために使用できるいくつかのドキュメントを私に指すことができますか?私は、セキュリティを真剣に考える必要があるという分野で働いており、ビジネスを理解するのに苦労しており、最終的にはいずれにしても上位にランクされる可能性がありますが、試してみる必要があります。

3
SQL Serverデータベースの同期
問題定義 ユーザーには、ほとんどが最新のデータベースを照会する機能が必要です。データは最大24時間古くなる可能性があり、許容範囲内です。本番コピーで2番目のデータベースを取得して最新の状態に保つための最低コストのアプローチは何でしょうか?私が考えていないアプローチはありますか? 仕事量 株式取引活動の監視に使用するサードパーティのアプリケーションがあります。日中は、さまざまな作業フローの一部として多くの小さな変更が発生します(はい、この取引は有効でした。いいえ、これは疑わしいなどです)。夜には、大規模なセットベースの操作を実行します(前日の取引を読み込みます)。 現在の解決策と問題 データベーススナップショットを使用します。午後10時にスナップショットを削除して再作成します。ETL処理が開始されます。これは明らかにディスクに負担がかかりますが、ユーザーはデータベースをロックせずにデータベースを照会できます(Accessフロントエンドを使用します)。彼らはそれを夜遅くまで、また早朝に使うので、ダウンタイムに気づくでしょう。 このアプローチの問題は2つあります。1つ目は、夜間の処理が失敗した場合であり、これはそれほど珍しいことではないため、データベースを復元し、スナップショットが削除されることです。もう1つの問題は、処理時間がSLAを超えていることです。不十分な記述のクエリとインデックス作成の欠如を特定した後、ベンダーと協力してこの問題に対処しようとしています。データベースのスナップショットは、速度が存在する場合と存在しない場合の速度の違いから明らかなように、この速度低下の原因でもあります。 考慮されるアプローチ クラスタリング データベースクラスタリングを有効にしましたが、データを使用可能にする必要性に対処できず、一般的に管理者の生活を複雑にしました。それ以降はオフになっています。 SQL Serverレプリケーション 先週、レプリケーションを検討し始めました。私たちの理論では、2番目のカタログを立ち上げ、本番データベースと同期させることができます。ETLを開始する前に、接続を切断し、ETLプロセスが完了してから再度有効にします。 管理者はスナップショットレプリケーションを開始しましたが、スナップショットと必要なディスク消費量を生成するためにCPU使用率が数日かかることを心配しています。彼は、サブスクライバーに出荷する前にすべてのデータを物理ファイルに書き出すように見えるため、0.6TBのデータベースのストレージコストは1.8TBになると指摘しています。また、スナップの生成に数日かかる場合、目的のSLAに適合しません。 すばらしい記事を読んだ後、Snapshotがサブスクライバを初期化する方法であるように思えますが、その後、トランザクションレプリケーションに切り替えて同期を維持したいと思います。トランザクションレプリケーションをオン/オフしても、完全な再初期化は強制されませんか?それ以外の場合は、時間枠を爆破します データベースミラーリング データベースは完全復旧モードになっているため、データベースミラーリングはオプションですが、レプリケーションよりも知識が少ないです。「データベースミラーリングによってデータに直接アクセスすることはできません。ミラーリングされたデータにはデータベーススナップショットからのみアクセスできます」というSOの答えが見つかりました。 ログ配布 ログ配布もオプションのように思えますが、これは私が何も知らないことの別のものです。他の何よりも低コストのソリューション(実装と保守)でしょうか?Remusのコメント「ログシッピングはレプリカコピーへの読み取り専用アクセスを許可しますが、受信した次のバックアップログを適用するときにすべてのユーザーを切断します(15分から30分ごとなど)。」そのダウンタイムがどれくらいの時間に変換されるかわからないので、ユーザーが不安を感じるかもしれません。 MS Sync 先週末、Syncの使用について聞いただけで、まだ調査していません。この問題のように視認性の高いものに新しいテクノロジーを導入するのは嫌ですが、それが最良のアプローチである場合は、そうしてください。 SSIS ここでは多くのSSISを実行しているため、数百のSSISパッケージを生成してセカンダリの同期を維持することは、見苦しいとはいえ、オプションです。私はこれを行うのが好きではありません。それは多くのメンテナンスのオーバーヘッドであり、むしろ私のチームが引き受けないようにするためです。 SAN「マジック」スナップショット 過去に、管理者がSANテクノロジーを使用してディスク全体のインスタントバックアップを作成したことを聞いたことがあります。おそらく、mdf / ldfのuberquickコピーを作成するために使用できるいくつかのEMCマジックがあり、ターゲットデータベースをデタッチ/アタッチできます。 バックアップと復元 週に1回フルバックアップを取り、夜間に差分を取り、15分ごとにtlogを取ります。ユーザーが完全な復元のために3〜4時間の停止に耐えることができる場合、これはアプローチであると思われます。 制約 Windows 2008 R2、SQL Server 2008 R2(Enterprise Edition)、VMWare v5 Enterprise Edition、vmdkファイルにマップされたドライブを備えたEMC SANストレージ、Commault処理バックアップ、およびソースカタログ内の.6TBのデータ。これは、社内でホストするサードパーティアプリケーションです。それらの構造を変更することは、一般的に嫌われています。ユーザーは、データベースにクエリを実行せずに進むことはできず、作業を行うために監視するテーブルを積極的に識別することによる制約を受けることを拒否します。 現在、DBAは純粋に請負業者です。常勤者は出航しており、私たちはまだ交代していません。アプリケーション管理者はSQL Serverの問題に精通しておらず、この作業を支援/妨害できるストレージ/ VM管理者のチームがあります。開発チームは現在関与していませんが、アプローチに基づいて参加できます。そのため、ソリューションの実装と保守がより簡単であることが望ましいでしょう。 私は、法務の開発側にいるので、アプローチを提案することしかできず、物事の管理側に対処する必要はありませんでした。だから、管理者のサドルに時間がないので、あるアプローチが別のアプローチよりも優れていると言うのをためらっています。私が見ているように、それはDBの専門家として私をより価値あるものにするだけだからです。手押し車は持っていますが、ホロコーストマントはありません。 関連する質問 /programming/525637/what-are-the-scenarios-for-using-mirroring-log-shipping-replication-and-cluste /programming/434982/mirroring-vs-replication /programming/4303020/sync-databases-mirroring-replication-log-shipping …


5
本番環境でHierarchyIdを使用している人はいますか?信頼できますか?
数千行以上の適切なサイズのテーブルで、実際の運用でHierarchyIdを使用している人はいますか?信頼性/性能はありますか?これまでのところ、ベンダーと提携していない人がそれを推奨しているのを発見していません。PaulNielsenはここでこれに反対しています。 実際の運用システムでHierarchyIdを使用した経験は何ですか? 代わりにHierarchyIdを選択したときに、どの基準を使用しましたか?

5
データベースにユニットを保存する最良の方法
何かの量を表す数百の列を持つ大規模な(SQLServer)データベースを継承しました。これらの値の単位(「ガロン」、「インチ」など)は、拡張プロパティのMS_Descriptionフィールドに格納されます。この情報を保存するより良い方法があるかどうか疑問に思っています。ドキュメンテーションの目的には適していると思いますが、このデータに基づいて堅牢な単位変換計算を行うことは困難です。この時点で、私は侵襲的な変更を行う準備ができていませんが、そうする機会を得た場合、この点で推奨されるベストプラクティスは何ですか?私の頭の上のオプションには、次のものがあります。 列名を含まれる単位に変更します(例: "TotalVolumeInGallons"。これにより、情報が少し入手しやすくなりますが、それでも私には弱いようです。) すべての「金額」列に対応する個別の「単位」列を追加します(この列はnvarcharであるか、単位変換の計算を容易にする個別の単位テーブルへの外部キーである可能性があります。多くの列は、データベースのサイズをかなり2倍にする可能性があります-ひどく冗長なデータです。) ユニット専用の拡張プロパティで新しいフィールドを作成します。(残念ながら、これがUnitsテーブルの外部キーになるとは思わない。) 私が見落としている別のアイデアはありますか? 更新: @Todd Everettの答えを読んだ後、考えられる解決策が思いついたので、先に進んで自分の質問に答えます。(下記参照)

1
CREATE DATABASE vs. CREATE ANY DATABASEパーミッション
Microsoft SQL ServerではCREATE DATABASE、CREATE ANY DATABASEアクセス許可とアクセス許可の違いは何ですか? 信頼できる答えが見つかりません。私が推測することができる最高のは、()があることであるCREATE ANYとのに対し、私は、別のユーザーが所有するデータベースを作成することができます意味CREATEのSybase /初期のSQL Serverの日の元の許可だった私はできない、または(b)CREATE ANYとCREATEのためにエイリアスされますANSI準拠。

2
SQL Serverは、2つの同等にパーティション分割されたテーブルでの並列マージ結合を最適化しません
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 非常に詳細な質問をおApびします。問題を再現するための完全なデータセットを生成するクエリを含め、32コアマシンでSQL Server 2012を実行しています。ただし、これはSQL Server 2012に固有のものではないと思い、この特定の例ではMAXDOPを10に強制しました。 同じパーティション構成を使用してパーティション化された2つのテーブルがあります。パーティショニングに使用される列でそれらを結合すると、SQL Serverは予想されるほど並列マージ結合を最適化できないため、代わりにHASH JOINを使用することにしました。この特定のケースでは、パーティション関数に基づいてクエリを10個の独立した範囲に分割し、SSMSでそれらのクエリを同時に実行することにより、はるかに最適な並列MERGE JOINを手動でシミュレートできます。WAITFORを使用してすべてを正確に同時に実行すると、すべてのクエリが、元の並列HASH JOINで使用された合計時間の約40%で完了します。 同等にパーティション化されたテーブルの場合に、SQL Serverがこの最適化を独自に行う方法はありますか?SQL Serverは一般にMERGE JOINを並列化するために多くのオーバーヘッドが発生する可能性があることを理解していますが、この場合、オーバーヘッドが最小限の非常に自然なシャーディングメソッドがあるようです。おそらく、オプティマイザーがまだ十分に認識できないほど特殊なケースでしょうか? この問題を再現するために、単純化されたデータセットを設定するSQLは次のとおりです。 /* Create the first test data table */ CREATE TABLE test_transaction_properties ( transactionID INT NOT NULL IDENTITY(1,1) , prop1 INT NULL , prop2 FLOAT NULL ) /* Populate table with …

3
Common Table Expression(CTE)の利点は?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 msdnから: 派生テーブルとは異なり、CTEは自己参照することができ、同じクエリで複数回参照できます。 私はCTEをかなり頻繁に使用していますが、CTEを使用する利点について深く考えたことはありません。 同じクエリでCTEを複数回参照する場合: パフォーマンス上の利点はありますか? 自己結合を実行している場合、SQL Serverはターゲットテーブルを2回スキャンしますか?
21 sql-server  cte 

3
欠落しているインデックスを盲目的に追加しても大丈夫ですか?
頻繁にSSMSを使用して、インデックスが不足していないかどうか、遅いストアドプロシージャをテストします。「Missing Index(Impact xxx)」というメッセージが表示された場合はいつでも、新しいインデックスを作成するだけです。これにより、私が知る限り、毎回クエリが高速になります。 これを続けるべきではない理由は何ですか?

3
masterデータベースをバックアップする頻度は?
BOLの提案はかなりあいまいです。 必要に応じてマスターをバックアップし、ビジネスニーズに合わせてデータを十分に保護します。定期的なバックアップスケジュールをお勧めします。これは、大幅な更新後に追加のバックアップで補完できます。 あなたはベンチャー場合はさらに、あなたはこれらの詳細を見つけます: マスターを更新し、バックアップを実行する必要がある操作の種類には、次のものがあります。 ユーザーデータベースの作成または削除。 ユーザーデータベースが新しいデータに対応するために自動的に成長する場合、 マスターは影響を受けません。 ファイルとファイルグループの追加または削除。 ログインまたはログインセキュリティに関連するその他の操作を追加します。 データベースへのユーザーの追加などのデータベースセキュリティ操作は、マスターに影響しません。 サーバー全体またはデータベース構成オプションの変更。 論理バックアップデバイスの作成または削除。 リンクサーバーやリモートログインの追加など、分散クエリとリモートプロシージャコール(RPC)用のサーバーの構成。 すべてのログインがWindowsグループを介して追加され、データベースに他の変更を加えない場合、それはマスターの1回限りのバックアップで十分であることを意味しますか? そうでない場合、masterデータベースの標準バックアップ間隔はどのくらいですか?

4
スキーマの変更がどのように発生したかを判断しますか?
昨日何か悪いことが起こりました。 少し前に作成されたビューは、最終的にレポートを破った誰かによって変更されました。残念ながら。誰かが(故意または無意識のうちに)PRODUCTIONデータベースでこの変更を行いました。 私の質問:この変更を誰(ユーザー名)が行ったかを知ることができる方法(スクリプト/ソフトウェア/フリーウェアなど)があり、そのユーザーの本番データベースへのアクセスを取り消すことができます。 私の質問が不明な場合は、コメントしてください。
21 sql-server  view 


1
ハッシュキープローブと残差
次のようなクエリがあるとします。 select a.*,b.* from a join b on a.col1=b.col1 and len(a.col1)=10 上記のクエリがハッシュ結合を使用し、残差があると仮定すると、プローブキーはにcol1なり、残差はになりますlen(a.col1)=10。 しかし、別の例を見ると、プローブと残差の両方が同じ列であることがわかりました。以下は、私が言おうとしていることの詳細です。 クエリ: select * from T1 join T2 on T1.a = T2.a プローブと残差が強調表示された実行計画: テストデータ: create table T1 (a int, b int, x char(200)) create table T2 (a int, b int, x char(200)) set nocount on declare @i int …

1
SQL Server 2014 ExpressのSQLCMD.EXEはどこにありますか?
「SQLCMD.EXE」を使用してSQL Server Expressデータベースを何年もバックアップしていましたが、2014バージョンをインストールした後、SQLCMD.EXEがなくなったことを発見しました。 以前のバージョンでは、次の場所にありました。 C:\ Program Files \ Microsoft SQL Server \ 110 \ Tools \ Binn \ SQLCMD.EXE しかし、2014年のインストールでは、SQLCMD.EXEは存在しません C:\ Program Files \ Microsoft SQL Server \ 120 \ Tools \ Binn 私の質問: SQLCMD.EXEをSQL Server Express 2014に取り込むチャンスはありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.