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

SQL Server 2005(メジャービルドバージョン9.00.xxxx)。sql-serverにもタグを付けてください。

3
テーブルに必要な外部キーが多すぎる場合、どのような選択肢がありますか?
パーツを定義し、パーツ番号、説明、価格、重量などの情報を保持するベーステーブルがあります。ベーステーブルを参照し、タイプ/カテゴリに基づいてパーツに関する追加情報を提供する約400のテーブルもあります。 最初は外部キー制約を使用して、400のパーツ固有のテーブルのいずれかで参照されている場合、そのパーツをベーステーブルから削除できないようにしましたが、SQL Server 2005の推奨される最大253の外部キーにすぐに達しました。 この状況で、データの整合性を保証する外部キーに代わるものはありますか?データにアクセスする際のパフォーマンスの問題は確認されていませんが、クエリプランが複雑すぎるため、ベーステーブルの既存の部分の更新は失敗します。

1
サーバークラッシュ後にレプリケーションを復元する方法
1つのSQL Server 2005インスタンスに2つのデータベースがあり、それらの間でトランザクションレプリケーションが行われていました(記事として3つのテーブル)。このサーバーは、パブリッシャーとディストリビューターの両方として機能しました。 次に、サーバーのRAIDに障害が発生しました。しかし.mdf、クラッシュする前に、ほぼすべてのファイルを切り離してコピーすることができました。 システムの復元後、SQL Serverを再インストールし、システムデータベース(master、model、msdb)を復元して、.mdfファイルを同じパスに配置しました。それで始まった。 レプリケーションで問題が発生しました。ローカルパブリケーションのフォルダは、空であったけれどもローカルサブスクリプション問題のサブスクリプションが含まれていたフォルダ。私が新しい出版物を追加しようとしたとき、私は得ました: 新しいパブリケーションウィザードで、パブリケーション名の取得中に1つ以上のエラーが発生しました。 Transact-SQLステートメントまたはバッチの実行中に例外が発生しました。(Microsoft.SqlServer.ConnectionInfo) 無効なオブジェクト名 'dbo.syspublications'。(Microsoft SQL Server、エラー:208) 左側のサブスクリプション(最終的にはなんとか管理できました)を削除して、サーバーでの公開と配布を無効にすることを試みることにしました。 SQL Serverは 'someserver'での公開と配布を無効にできませんでした。 無効なオブジェクト名 'dbo.syssubscriptions'。EXECUTEの後のトランザクション数は、COMMITまたはROLLBACK TRANSACTIONステートメントが欠落していることを示しています。以前のカウント= 0、現在のカウント=1。EXECUTE後のトランザクションカウントは、COMMITまたはROLLBACK TRANSACTIONステートメントがないことを示しています。以前のカウント= 0、現在のカウント=1。EXECUTE後のトランザクションカウントは、COMMITまたはROLLBACK TRANSACTIONステートメントがないことを示しています。以前のカウント= 0、現在のカウント=1。EXECUTE後のトランザクションカウントは、COMMITまたはROLLBACK TRANSACTIONステートメントがないことを示しています。以前のカウント= 0、現在のカウント=1。EXECUTE後のトランザクションカウントは、COMMITまたはROLLBACK TRANSACTIONステートメントがないことを示しています。以前のカウント= 0、現在のカウント=1。データベースコンテキストを「マスター」に変更しました。(Microsoft SQL Server、エラー:208) システムデータベースバックアップから一部の情報が復元されなかったようです(おそらくdistributionデータベースに何かが欠落している可能性があります)。 また、公開と配布を無効にできないという質問に答えるようにしました。しかし、成功しませんでした。私が作成しようとしたsyspublicationsの両方をmasterしてdistribution、何も変わっていません。 では、このサーバーでレプリケーションを機能させるにはどうすればよいですか? サーバー上で他のデータベースを公開しようとしましたが、うまくいきました。したがって、問題は公開されたデータベースに関連しているようです。どうすればそれをクリアして、その上に新しいパブリケーションを作成できますか? System Tables 問題のあるデータベースのサブフォルダは、データベースがパブリッシュされたときに作成されるレプリケーションテーブルを見逃します。 レプリケーションモニターでは、これらの古いサブスクリプションを確認できますが、レプリケーションフォルダーでは使用できません 。

1
48コアAMD Opteronボックスでの24の物理tempdbファイルによるTempDB競合
SQL Server 2005のインスタンスについて次の通知を受信しました。インスタンスのコアとtempdbファイルの比率は2:1で、tempdbファイルの総数は24ファイルです。競合は発生してはなりません。この競合の原因をどのように検出しますか?TempDBと他のすべてのデータベースは、10 GBイーサネット経由でSANストレージ上にあります。SANには、1つのRAID-60アレイに構成された46個の10k SASドライブがあります。このアレイは、複数のVMWareサーバーと1つまたは2つのExchangeサーバーで共有されます。 Idera SQL Diagnostic Managerからの通知: 11/8/2012 10:49:00 PM、MGSQL01のTempdb競合(ミリ秒)は重大です。 Tempdbラッチの競合がMGSQL01で検出されました。検出された合計待機時間は1782ミリ秒です。これは、tempdbの割り当てマップの競合によってパフォーマンスが影響を受けていることを示しています。これが定期的な問題である場合は、tempdbファイルの数、サイズ、およびIOサブシステムに関するベストプラクティスに従うことで軽減できる場合があります。 PFS待機時間:1782 ms GAM待機時間:0 ms SGAM待機時間:0 ms Tempdb競合(ミリ秒):tempdb割り当てマップ(GAM、SGAM、およびPFS)の現在の待機時間(ミリ秒単位)。このアラートは、SQL 2005以降を実行しているインスタンスでのみ発生する可能性があります。

2
すべてのSQL Serverデータベースで自動縮小をオフにします。なぜこれが機能しないのですか?
sp_MSforeachdbを使用してこの問題を解決できると考えていましたが、エラーメッセージが表示されます。 sp_MSforeachdb ' BEGIN USE [?] DECLARE @dbid INT SET @dbid = DB_ID() IF(@dbid > 4) BEGIN --PRINT ''[?]'' + CONVERT(VARCHAR, @dbid) --ALTER DATABASE [?] SET AUTO_SHRINK OFF END END; ' PRINT行のコメントを外して上記のクエリを実行すると、システムデータベースを除くすべてのデータベースのリストが表示されます。ただし、ALTER DATABASE行のコメントを外すと、次の2つのエラーメッセージが表示されます。 メッセージ5058、レベル16、状態2、行9 オプション 'AUTO_SHRINK'をデータベース 'master'に設定できません。 メッセージ5058、レベル16、状態1、行9 オプション 'AUTO_SHRINK'をデータベース 'tempdb'に設定できません。 これにより、ある時点で操作が中断され、一部のデータベースのみで自動圧縮が無効になります。 すべてのデータベースで自動縮小を無効にするにはどうすればよいですか?おまけの質問:なぜ私のアプローチが機能しないのですか?

2
TableBを繰り返すことによってTableAのすべての行を小さなTableBの行に結合する方法はありますか?
タイトルが紛らわしいので申し訳ありませんが、そこに何を書けばよいかわかりませんでした。 数百レコードのテーブルがあります。このテーブルの各レコードをユーザーのはるかに小さい動的テーブルに割り当てる必要があります。ユーザーは、割り当てられるレコードを交互に切り替える必要があります。 たとえば、TableAが Row_Number()ID 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 そしてTableBは Row_Number()ID 1 1 2 2 3 3 私は最終結果セットが必要です UserId RecordId 1 1 2 2 3 3 1 4 2 5 3 6 1 7 2 …

1
SQL Server 2005のページの平均余命が0(ゼロ)である理由
SQL Serverのページの平均寿命を知りたいと思っています。そこで、Performを使用してカウンターを確認します。値はゼロで、決して変更されません。バグがあるのではないかと思ったので、SQL Server DMVクエリを確認しました SELECT [object_name],[counter_name],[cntr_value] FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Manager%' AND [counter_name] = 'Page life expectancy' また、終日ゼロを返します。 これをより興味深いものにするために、平均で99〜100の「バッファーキャッシュヒット率」カウンターを確認しました。 では、「バッファキャッシュヒット率」が100の場合、ページの平均余命はどのようにゼロになるのでしょうか。 何が欠けていますか?常にゼロの場合、バッファキャッシュに何も残っていないことを意味します。バッファキャッシュヒット率が100の場合、これは正しくないように見えますか? 前もって感謝します

3
孤立したユーザー「guest」を修正しますか?
特別なguestユーザーが孤立している(ログインにリンクされていない)場合、何ができますか? 私のデータベースの1つ(SQL Server 2005)では、次のコマンドを実行すると、ゲストユーザーが孤立したユーザーとしてリストされます。 exec sp_change_users_login 'report' 結果: UserName UserSID guest 0x3C2E66759FFBC14F84127D6795C27FD3 その手順を使用してゲストユーザーを修正しようとすると、次のようになります。 exec sp_change_users_login 'update_one', 'guest', 'guest' この手順を終了しています。'guest'は、この手順でのログイン名パラメーターの禁止値です。 ユーザーを削除しようとすると、次のようになります。 ユーザー「guest」は削除できません。無効にすることしかできません。 select * from sys.database_principals where name = 'guest' 結果: name guest principal_id 2 type S type_desc SQL_USER default_schema_name guest create_date 11/13/98 2:58 AM modify_date 10/16/01 4:31 PM owning_principal_id NULL …

3
クエリから取得できるデータを保持する新しいテーブルをいつ作成するかをどのように特定できますか?
支払い表があり、エージェントは支払いの手数料を受け取ります。コミッションは、支払いを取得するのにかかった時間など、いくつかの異なる要因に基づいているため、エージェントが取得するコミッション率を計算する際にはいくつかの計算が必要ですが、わいせつな複雑さはありません。 たとえば、おそらくこれより複雑になることはありません。 SELECT Payments.Amount * CASE WHEN DateDiff(year, Client.Received, Payments.DatePaid) = 1 THEN Rates.Rate1 WHEN DateDiff(year, Client.Received, Payments.DatePaid) = 2 THEN Rates.Rate2 ELSE Rates.Rate3 END 必要なときにいつでもクエリを実行するのではなく、このデータを保持する2番目のテーブルを作成するのは理にかなっていますか?それとも、要求されたときにデータをプルするランタイムクエリをそのまま使用する必要がありますか? さらに重要なことに、データが必要なときにクエリを実行する必要があるかどうか、またはデータを独自の別のテーブルに格納する必要があるかどうかを判断するときに使用する要素は何ですか?

1
SQL Serverデータベース全体の統計を取得する最も効率的な方法
私がやろうとしていることは、データベースを確認してすべてのauto-shrink設定をロックし、どのデータベース/テーブルが非常に断片化されているかを把握することです。 データベースごとに良いアイデアを得るために実行できる特定のスクリプトはありますか? テーブルレベル(少なくともSQL Server 2005)で以下を実行できることはわかっています。 DBCC SHOWCONTIG ('DB.TABLE'); しかし、データベース内のすべてのテーブルを表示するために何を実行できますか? ありがとう

2
SQL ServerにはDate_Format関数がありますか?
私が見つけたすべては、このDateFormatように、私が選択できる事前定義のリストです MySQL(およびPostgeSQLでも?)で覚えているように、日付形式を定義できます。 DATE_FORMAT(now(),'&m_%Y') --for 02_2012 etc. SQL Serverには同じ機能がありますか?そのようなことをするために人々は関数を書かなければならないのを見ます、それは組み込みのものを持っていますか? 編集: DatePart関数を見つけました。月を数値としてとることができますが、使用しても常に1桁を返します datePart(MM, getdate())

2
パラメータなしのEXEC()とsp_executesqlの違いは?
新しいsp_executesqlストアドプロシージャについて学習しました。SQL Server内からパラメーター化されたコードを実行する方法があるのが気に入っています。 しかし、パラメータがない場合のsp_executesqlストアドプロシージャの使用と、直接EXECを呼び出すだけの違いは何なのかと思います。また、パフォーマンスに影響がありますか? exec('select * from line_segment') exec sp_executesql N'select * from line_segment' また、2005年と2008年の間に違いはありますか、それとも同じように扱いますか?

5
SQLサーバーの同時実行パフォーマンス
本番環境でパフォーマンスの問題が発生しました。 アクティブセッションが25を超えると、CPUの使用率が100%に達し、停止するまでに長い時間がかかることがわかりました。 私たちが持っている環境: 製品Microsoft SQL Server Enterprise Edition 9.3(sp2) CPU 2(Xeon 2.13) メモリ7G セッション詳細のスナップショット1 アクティブセッション 25 アクティブなトランザクション 496 アイドルセッション 289 ブロックされたトランザクション29 セッション詳細2のスナップショット アクティブセッション 59 アクティブトランザクション 885 アイドルセッション 267 ブロックされたトランザクション49 知りたい: 2CPUが25のアクティブセッション(500のアクティブトランザクション)を適切に処理できるかどうか。PS:同時実行要求なしで、5つのテーブルを読み書きする1つのトランザクションがアプリケーションレベルで約1秒かかることをテストしています。 ブロックされたトランザクションがより多くのCPU使用率をとるかどうか。PS:ブロックされたトランザクションは、主に2つのテーブルのロックが原因です。 解決策は何ですか:CPUを追加するか、アプリケーション(java / hibernate)を調整して、このトランザクションを短縮し、テーブルのブロックを減らしますか?

3
SSMSのSQLCMDモードと@@ variable展開
(コマンドラインからではなく)SSMSでSQLCMDモードを使用する場合、現在のサーバーとインスタンスを変数に割り当てる方法はありますか?これは、通常のTSQL変数の割り当てとは異なります。 問題の定義 SQLCMDの変数拡張機能を使用して、導入した既存のtsql文字列構築マッシュの代わりに、配置スクリプトの環境固有の値を置き換えたいと思います。現在の環境の1つの例外を除いて、SQLCMDを使用してデプロイを処理することは非常にうまくいきました。 -- -- define 2 sqlcmd variables that will be expanded in scripts -- :setvar dbServer "DEVA2\DEV2" :setvar dbNotServer @@servername SELECT '$(dbServer)' AS hard_coded_value , @@servername AS [servername] , '$(dbNotServer)' AS dbNotServer そして、それは以下の結果を生成します。 hard_coded_value servername dbNotServer DEVA2\DEV2 DEVA2\DEV2 @@servername ミートローフは3分の2は悪くないと言っていますが、私は3分の3の解決策を持っていると思います。スクリプトがテストサーバーに展開されたとき、スクリプトの編集を展開担当者に任せたくありません。 SQLCMDを使用するための唯一の解決策がコマンドラインからスクリプトを完全に呼び出すことである場合、私はそれを受け入れることができますが、SQLCMDを使用するのは環境に優しいので、ここでこれを捨てたいと思います。 望ましい出力 :setvar dbNotServer @@servername SELECT '$(dbNotServer)' AS …

2
SQL Server 2005でのDBMailのトラブルシューティング
SQL Server 2005マシンで、DBMailをセットアップして正しく構成しました。「オペレーターに通知」とEXEC msdb.dbo.sp_send_dbmailを使用してメールをキューに入れることができます。 しかし、問題はキューに入れられたメールが通過しないことです。クエリを実行すると、キューに10通のメールが表示されます SELECT * FROM msdb.dbo.sysmail_unsentitems しかし、SQL Serverサービスを再起動すると、すべてのメールが通過し、受信トレイにメールが届きます。 これまでのところ、これが私が見つけた唯一のパターンです。 だから私の質問は:DBmailをトラブルシューティングする方法はありますか?MSDNでいくつかの手順を読みましたが、あまり役に立ちません。役立つ可能性のある記事へのURLは大歓迎です。

4
TSQL:大量のSQLコンパイルとSQL再コンパイルを個別に引き起こすクエリを見つける
パフォーマンスモニターカウンターに表示されるSQLコンパイルの高さ(再コンパイルではない)の原因を調べたい。 これが私の見解です:SQlコンパイルが大量に表示される場合は、次の理由により、システム上のクエリがキャッシュされていません。 多くのアドホッククエリ SQlがキャッシュしないクエリの実行: UPDATE table1 SET col1 = '8000文字より長い文字列.....' WHERE key_column = some int プランがタイムアウトして、キャッシュから削除されています。キャッシュのスペースが不足しているか、プランが十分に長く使用されていません。 プロファイラーでのキャッシュ挿入のキャプチャに近い唯一のことは、ストアドプロシージャ-> SP:CacheInsertsですが、ストアドプロシージャキャッシュの管理のみを行います。 だから私はアドホッククエリを取得するために以下を試しました: SELECT [cp].[refcounts] -- when Refcounts becomes 0, plan is excluded from cache. , [cp].[usecounts] , [cp].[objtype] , st.[dbid] , st.[objectid] , st.[text] , [qp].[query_plan] FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_sql_text ( …

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