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

SQL Server 2008(メジャービルドバージョン10.00.xxxx)。また、sql-serverでタグ付けしてください。

4
2つの異なるスキーマ間のデータ比較を実行するツールはありますか?
データベースを新しいスキーマに移行していますが、データが正しく移動されたことを確認したいと考えています。 スキーマが同じ場合、従来のデータ比較ツールは2つのデータベースの違いを比較できます。今回のケースでは、テーブルのデザインに変更がありましたが、古いスキーマのすべてのデータは新しいスキーマにあり、少し移動されただけなので、正しいことを確認する必要があります。数千万行あるため、手動で検査することはできません。 このタイプの比較に役立つツールはありますか? カスタムソリューションの開発を始めるのに役立つライブラリ/フレームワークがない場合はどうなりますか? 必要に応じて、データベース固有のソリューションを使用できます。この場合は、SQL Server 2008です。 私の解決策:VIEW新しいデータベーステーブルと同じフィールドを持つ古いデータベースに各テーブルのを作成して、2つのデータセットを比較しています。 次に、ここで説明する手法を使用してデータを比較します。SQLServerの2つのテーブルを比較するための最短、最速、最も簡単な方法:UNION! 全体的なテーブル構造は古いデータベースに似ており、フィールドが1つのテーブルから別のテーブルに移動、削除、または追加されているので、この移行で私は幸運です。ドロップして追加した場合、比較するものは何もありません。移動または集計されたフィールドについては、比較のために正しい情報を提供するためにビューで計算を行います。 UNION比較を示してくれ差がある行のみが、そうとすぐにデータが正確であるように私は、空の結果セットを取得します。

1
SQL Server 2008で破損したページを見つける方法
を実行しDBCC CHECKDBてデータベースのステータスを取得できることはわかっています。 ご質問 データベースに破損したデータページがあるかどうかを確認するにはどうすればよいですか? ページの破損が原因でエラーが発生した場合、破損しているページはどこにありますか? 破損した各ページのページ番号を確認するにはどうすればよいですか。 誰かがそれらのページIDの場所を教えてもらえますか?

2
このクエリがデッドロックを引き起こすのはなぜですか?
このクエリがデッドロックを引き起こすのはなぜですか? UPDATE TOP(1) system_Queue SET [StatusID] = 2, @ID = InternalID WHERE InternalID IN ( SELECT TOP 1 InternalID FROM system_Queue WHERE IsOutGoing = @IsOutGoing AND StatusID = 1 ORDER BY MessageID ASC, InternalID ASC) 追加されたデッドロックグラフ: <keylock hobtid="72057594236436480" dbid="9" objectname="Z.dbo.system_Queue" indexname="PK_system_Queue" id="lock5b25cc80" mode="X" associatedObjectId="72057594236436480"> <owner-list> <owner id="processc6fe40" mode="X"/> </owner-list> <waiter-list> …

2
非DBAからの質問:SQL Serverインスタンスをバックアップ/復元を介して別のサーバーに簡単にコピー/移動する方法は?
新しいサーバーができたので、既存のSQL Server 2008インスタンスを古いdbボックスからコピーする必要があります。 私は通常、.mdfとログファイルをコピーしてそれらを添付することでこれを行いますが、データベースを24時間年中無休で使用しているため、データベースをオフラインにできないため、データベースをバックアップし、新しいデータベースに復元しました機械。しかし、私はいくつかの問題を抱えており、そのうちの1つは孤立したユーザーに関連しています。だから私が探しているのは、すべてを最小限の手間/母/頭痛で動かすフェイルセーフプロセスです。私は.Net開発者であり、かなりの量のSQLを身につけていますが、SQL Serverの内部の仕組みはほとんど謎であり、MSのドキュメントはトロールするのに苦労します。 助けてください。

1
SQL Server 2008 R2ダーティリード-どのように非アトミックですか?
「ダーティ」なダーティリードが、コミットされていない読み取りの分離レベルに達する可能性があるのではないかと思っています。更新されたがまだコミットされていない行が表示されることを理解していますが、 行は部分的に更新されたように見えますか?つまり、一部の列は更新され、一部は更新されていませんか? 1つの列が部分的に更新されたように見えますか?たとえば、完全に更新中のvarchar(4000)列があり、実際には4000文字が含まれていると想定しているとします。前の状態の2k文字と新しい状態の2k文字を読み取ることができますか?長さが> 8kのvarchar(max)はどうですか? 更新:ある程度の議論の後、最小限のコンセンサスは、列のサイズが> 8KBの場合、たとえ列自体の中であってもダーティリードが可能であるということです。

5
SQL Serverコマンドラインの使用法 出来ますか?
私はSQL Server Management Studio 2008に組み込まれている「ソリューションエクスプローラー」を使用してプロジェクトを管理しようとしていましたが、2週間の苦労の末、本当に気にしないと判断しました。「便利」な機能は実際にはかなり邪魔です。 残念ながら、私が働いている場所はMSショップであり、かなり行き詰まっています。コマンドラインに戻りたい(Vimを切望している!)。上記の「ソリューションエクスプローラー」を置き換えるために、TortiseSVNフロントエンドを使用してローカルのSubversionリポジトリをインストールし、非常にうまく動作させています。私はVimもインストールし、それをカスタマイズする作業をしながら、ハミングしています。 ただし、まだ解決策を見つけていないのは、コマンドラインからSQL Serverに対してコマンドを実行する方法です。私はMySQL / Postgresコマンドラインプロンプトに慣れています。これは、私が過去に使用したものであり、クラスの処理中に使用していたためです。しかし、Windowsのコマンドラインからスクリプトを実行する方法が見つからないようです。現在、Vimで編集し、SSMSでページを更新して実行しています。必要な場合を除いて、SMSSには触れない方がよいと思います。 sqlsharpを提案する投稿を見たことがありますが、ページに移動したときに、探しているものとはまったく違う感じがします。 -編集 2つの解答チェックマークを付けることができたことを本当に願っています。P.キャンベルには技術的に正しい答えがあり、何度か試してみました(sqlcmdを試すとエラーが発生し続けます...名前付きパイプがどのように動作しているのかを調査しているのですが...設定しても有効にすると、動作しないようです。) それを試しても成功しなかった後、Management Studioにコピーして貼り付けるだけの方法を試しましたが、それはばかげていました...だから、おそらくHardCodeも正しいと判断しました。

5
SQL Serverで適切な電話番号が設定されていないレコードの数を確認する最良の方法は何ですか?
私は歴史的に人々が自由に価値を提供するために使用できる分野を持っています。適切な値を持たないレコードを特定して、クリーニングできるようにする必要があります。 私はこのためにSSISを見回してきました。私の傾向は、いくつかのC#コードで正規表現を使用してスクリプトコンポーネントを使用し、その後リダイレクトすることです。それでも、C#に頼らずにこれを行う方法がSSISにあるかどうか疑問に思っていました。 適切な電話番号が記録されていないレコードの数を調べる方法を見つけるのに、あまり運がありませんでした。

2
SQL 2008 Web Editionの「大きすぎる」サイズはどれくらいですか?
間もなくホストされるアプリケーションでは、SQL Server 2008 WebエディションとSQL Server 2008 Enterpriseエディションのどちらかを選択する必要があります。「必須」機能はありません。アプリケーションは現在SQL Expressで実行されていますが、SQL Expressが課す最大サイズの10 GBを超えます。 この比較表と、このページの「スケーラビリティとパフォーマンス」で最も重要な表を見ています。テーブルが大きくなるにつれて、「テーブルとインデックスのパーティション分割」などの機能は、パフォーマンスの速度を保証するために不可欠になります。しかし、これはどのテーブルサイズで必要ですか? データベースのサイズと使用にEnterprise Editionのスケーラビリティとパフォーマンス機能が必要かどうかを判断するには、どの戦略を使用する必要がありますか?

1
いつDBCC CLEANTABLEを実行してスペースを再利用する必要があるかを判断する信頼できる方法はありますか?
最近、ファイル使用率が80%に近づいたときにファイルを単に成長させるのではなく、ヒープのデフラグ、クラスター化インデックスの追加と削除、行またはページの圧縮などの通常のトリックを介してスペースを再利用することに積極的に取り組んできました。 ただし、DBCC CLEANTABLEを実行してさらに多くのスペースを取り戻すことができたケースがいくつかあります。私の環境には数百のデータベースがあるため、ユーザーがそれぞれのデータベースで何をしているのかを知ることは不可能であり、固定長の列の削除に関連する変更があることは完全に許容できます。私が書いたオブジェクトスペース使用率スクリプトの行数とページ数を比較することで、これらの機会を見つけました。このようなシナリオの検出を自動化することで、これをさらに一歩進めたいと思います。 私が知りたいのは、このような機会を積極的に監視している人がいるなら、そうだとしたら、具体的に何を探しますか? 私の考えは、行の最大サイズと最小サイズ、テーブルの行数、割り当てられたページ数、および使用されたページ数を収集するという線に沿って何かを記述し、いくつかの基本的な計算を行って結果を記録することでした「期待される」はずの外にあります。


1
ストアドプロシージャの実行を許可し、書き込みを許可しない方法は?
SQL Server 2012インスタンスに「読み取り」ユーザーを設定したいのですが。すべてのテーブルとビューからデータを取得するストアドプロシージャ、関数、またはダイレクトSQLステートメントを実行する権利を許可しますが、更新または挿入(つまり、何も読み取らず、何も書き込まない)は許可しません。 名前で各関数またはストアドプロシージャに特別な権限を付与せずにこれを設定できますが、テーブルを変更する権限を取り除いて、関数またはストアドプロシージャの実行権を彼に付与できますか? 代わりにSQL Server 2008を実行すると何が変わりますか? 説明と追加: ストアドプロシージャがデータを変更した場合、ユーザーはエラーメッセージを受け取ります(変更を拒否するか、ストアドプロシージャへのアクセスを完全に拒否します)。 潜在的なソリューションにアクセス許可の拒否が含まれている場合、拒否する代わりに特定のアクセス許可を付与することはできませんか? データベース内のすべてのテーブル、ビューなど(現在および将来存在する)に1つのステートメントで拒否を適用できますか?

3
新しいサーバーでのパフォーマンスの低下
私たちは専用サーバー(シングルクアッドコア、6 GB RAM)を使用しており、新しい専用サーバー(2xヘキサコア、32 GB RAM)に移行しています。どちらもWindows Server 2008、SQL Server 2008です。新しいサーバーのパフォーマンスは、古い低速サーバーよりもわずかに劣ります。 テストでは、ASP.NETアプリケーションの実行速度が10〜20%遅くなります。STATISTICS IOおよびSTATISTICS TIMEを使用して個々の負荷の高いクエリを実行すると、新しいサーバーでの経過時間が10〜20%長くなります。SQLクエリプロファイルは、高価なクエリでのより高いCPU使用率を示します。 新しいサーバーのタスクマネージャーは、sqlserver.exeが22 GBのRAMを消費していることを示していますが、CPU値は常に非常に低いままです。 私はすべての統計を更新し、インデックスを再構築または再編成しました。実行したテストの量を考えると、この時点で実行プランは新しいサーバーに保存されているはずです。欠落しているインデックスがある場合(私はないと思います)、新旧のサーバーに同じように影響します。新しいものは古いものと同じデータの復元されたバックアップを持っています。 新しいサーバーでのパフォーマンスはもっと良くなると思っていましたが、負荷の方が心配です。負荷がかかった状態でも古いサーバーのパフォーマンスが向上している場合、この少し新しくなった新しいサーバーがその負荷をかけなければならない場合はどうなりますか? ここで他に何が欠けているでしょうか? 編集:MAXDOPを6に設定。 古いサーバーのOS、データベース、tempdbは同じ物理ドライブ(RAID 10)上にあります。合計4つの15k 3 Gb / s 3.5インチSAS。新しいサーバーには3つのドライブセットがあります。RAID1上のOS、RAID 10上のデータベース、RAID 5上のtempdb。合計9つの15K 6 Gb / s 2.5インチSAS。 古いサーバーには、1 x Intel Xeon E5620 2.40 GHz Quad-Core 8スレッド(w H / T)があります。新しいサーバーには、2つのIntel Xeon E5-2640 2.5 GHz 6コア12スレッド(w H …

3
日付を整数(数値)として格納することの利点
質問1 日付が整数(実際の数値(8,0))として格納されているシステムを使用していますが、他のシステムもこのスレッドにciscoなどのintとして日付を格納していることに気付きました。例 20120101 -- 01 Jan 2012 数値日付システムを維持し、SQL日時を使用しないことの利点はありますか? 質問2 現在、2つの日付の間の顧客を見つけるために、数値の日付をループ処理しています。startおよびenddateが2か月にわたる場合、60だけではなく数千のレコードを取得します。例: create table #temp1(day int,capacity int) /* just a temp table */ declare @start int declare @end int set @start=20111201 set @end = 20120131 while (@start <= @end) Begin insert into #temp1 /* I am storing things in #temp table so …

5
スキーマの変更後に壊れたストアドプロシージャを検出するにはどうすればよいですか?
データベースの中央のテーブルを変更しました。sp_dependsは文字通り数百の結果を返します。変更後、これらのストアドプロシージャの一部がコンパイルされないのではないかと心配しています。 1つのストアドプロシージャを確認するのは簡単です(変更スクリプトを再実行して、操作が成功するかどうかを確認するだけです)が、100以上のプロシージャでそれを行うのは少し面倒です。 このようなスクリプトを使用してデータベースのすべてのオブジェクトを再コンパイルできることはわかっていますが、実際の操作は、ストアドプロシージャが次に実行されたときにすぐにではなく、実行されるため、私の場合は適切ではないようです。 また、すべてのストアドプロシージャを完全に削除し、データベースをソース管理システムで再同期できると考えていましたが、このオプションは実行可能ではありますが、あまりエレガントではありません。これを行うより良い方法はありますか? SQLServer 2008 R2を使用していますが、データベーススクリプトはVS 2008データベースプロジェクトに保存されています。 明確にするために、私はコードをテストするためにこのアプローチだけに頼るべきだと主張しているのではありません。C#とまったく同じように、コードを作成するときに他の依存ファイルの構文エラーを瞬時に検出します(その後、通常は数桁遅いユニットテストなどの他の戦略を使用してテストします)、SQLの依存関係を検出することは理にかなっていると思います通常は完了するまでに数時間かかる完全な機能テストを実行する必要がなく、数秒でエラーが発生します。


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