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

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

2
SQL Agent PowerShellコンテキストリファレンス
私の新しい仕事では、各サーバーに複数の名前付きインスタンスがあります。例えば Server1 \ Dev Server1 \ DevIntegrated Server1 \ QA OSを呼び出すSQL PowerShellスクリプトがあり、呼び出しますFoo.exeが、コマンドラインパラメーター(接続文字列)を渡す必要があります。SQLエージェントジョブは各インスタンスに存在し、PowerShellタイプのステップで、現在のコンテキストが何であるかを知る必要があります。つまり、この実行はDevIntegratedで始まりました。 すべてのスクリプトを最初から始めたいとは思いません... $thisInstance = "Dev" ...特に、今後数か月で環境(新しいサーバーと名前付きインスタンス)に移行するときに編集する必要があるためです。 SQLPSを起動すると、Get-Locationまたは実行の結果をスライスしてダイシングすることにより、インスタンスを特定できます。 (Invoke-Sqlcmd -Query "SELECT @@servername AS ServerName" -SuppressProviderContextWarning).ServerName SQLエージェントがPowerShellタイプのジョブを開始すると、C:\ windows \ system32で開始さGet-Locationれ、SQLSERVERコンテキストではないため、ルートは機能しません。そのコンテキストに変更できますが、SQL Serverの「ルート」にいるので、どのインスタンスにいるべきかわかりません。Invoke-Sqlcmdルートを使用しても同じ理由で機能しません(技術的には、デフォルトのインスタンスではありません) 私の知る限り、ジョブログに記録できる基本的な「もの」をすべて列挙しましたが、何も表示されないようです SQLSERVER:\SQL\Server1\DevIntegrated Get-ChildItem Get-Host Get-Location Get-Process Get-PSDrive Get-PSProvider Get-Service Get-TraceSource Get-Variable Get-Process私はそれと、インスタンスをヒットしてspidを一致させることによって物事を一緒にしようとするいくつかのブードゥー教を使用することができるようですが、それは地獄からの血まみれのハックのように聞こえます。私が見逃している基本的なものがあるはずです、誰かが光を当てることができますか? 調査されたPowerShellの代替 他のジョブタイプを使用して調査したところ、満足のいく解像度が得られませんでした。調査の結果、SQL Agentの下にリストされているPowerShellはSQLPSであり、Agentを右クリックしてインスタンスを起動すると、自動的に正しい場所にドロップされました。前述のように違いを知ったのは、ジョブコードに対話型コードを貼り付けたときだけです。 OSのジョブタイプは、どのインスタンスがコマンドシェルにドロップしたかを判別する方法を見つけることができなかったという点で、同じ状態になりました。もちろん、sqlcmdで値を取得できますが@@servername、sqlcmdを開始する接続がわかっていれば、データベースを照会する必要はありません;) TSQLは有効にすればおそらく動作する可能性xp_cmdshellがありますが、オンになっているかどうかはわかりません。それでも、私は動的SQLに夢中になり、PowerShellが提供する表現力とパワーの多くを失います。 少し不格好ですが、最初のステップで変数を定義し、それを後続のステップに渡すことを考えましたが、この記事で複数のジョブステップの処理(BOL) ジョブステップは自己完結型でなければなりません。つまり、ジョブは、ジョブステップ間でブール値、データ、または数値を渡すことはできません。ただし、永続テーブルまたはグローバル一時テーブルを使用して、1つのTransact-SQLジョブステップから別のステップに値を渡すことができます。ファイルを使用して、あるジョブステップから別のジョブステップに実行可能プログラムを実行するジョブステップから値を渡すことができます。 よく知られたファイル/環境変数/レジストリ設定のような一般的なトリックを使用することはできませんFoo.exe。 …

3
SQL ServerのERROR_STATE()とは何ですか?
私は読み取りERROR_STATE()エラーの同じタイプが発生する可能性がソースコードにおける異なる状態/位置を区別するために缶の助けを。しかし、それがどのように役立つかは、私にははっきりしていません。 MSDNの状態: ERROR_STATE() TRY…CATCHコンストラクトのCATCHブロックが実行される原因となったエラーの状態番号を返します。 実際にどのように使用できますか?誰かが私に例を示すことができますか?このリファレンス記事で提供されているものは本当に私に物事をうまく説明するのに役立ちませんか?

4
「TASK MANAGER」プロセスは、シングルユーザーモードのデータベースを引き継ぎます。それは何ですか?
これは私がstackoverflowで尋ねた質問の複製ですが、私はここにいる誰かが何が起こっているのかより良い考えを持つことができるとアドバイスされました。 .NET SqlConnectionを使用してシングルユーザーモードでSQL Serverをアップグレードするとき、SQLコードが実行されている間に他のアプリケーションがデータベースにログインして散発的に問題が発生し、プロセスが開始されます。SqlConnectionが閉じられたり、破棄されたりすることはありません。しかし、他のいくつかのアプリケーションはどういうわけかデータベースに接続してしまい、それが私の接続を開始します。 sp_whoを実行すると、データベースを制御するプロセスがCommand = "TASK MANAGER"であることがわかりました。 誰もがこのプロセスとは何か、その目的は何か、そして世界中でどのようにしてシングルユーザーモードのデータベースにアクセスでき、アクティブな接続があるかを教えてもらえますか?

1
Mergeステートメントのロックオプションは何ですか?
MERGEステートメントを実行するストアドプロシージャがあります。 マージを実行すると、デフォルトでテーブル全体がロックされるようです。 トランザクション内でこのストアドプロシージャを呼び出して、他の処理も実行していて、影響を受ける行のみをロックしたい場合。 ヒントを試しMERGE INTO myTable WITH (READPAST)てみましたが、ロックが少なかったようです。しかし、ms docに、主キーでさえもバイパスして重複キーを挿入する可能性があるという警告がありました。 これが私のテーブルスキーマです: CREATE TABLE StudentDetails ( StudentID INTEGER PRIMARY KEY, StudentName VARCHAR(15) ) GO INSERT INTO StudentDetails VALUES(1,'WANG') INSERT INTO StudentDetails VALUES(2,'JOHNSON') GO CREATE TABLE StudentTotalMarks ( Id INT IDENTITY PRIMARY KEY, StudentID INTEGER REFERENCES StudentDetails, StudentMarks INTEGER ) GO INSERT INTO …

1
ROW_NUMBER()OVER(PARTITION BY B、A ORDER BY C)は、(A、B、C)のインデックスを使用しません
次の2つの機能を検討してください。 ROW_NUMBER() OVER (PARTITION BY A,B ORDER BY C) ROW_NUMBER() OVER (PARTITION BY B,A ORDER BY C) 私の知る限り、まったく同じ結果が得られます。つまり、PARTITION BY句内の列をリストする順序は重要ではありません。 インデックスがある場合(A,B,C)、オプティマイザーが両方のバリアントでこのインデックスを使用することを期待しました。 しかし、驚くべきことに、オプティマイザーは2番目のバリアントで追加の明示的な並べ替えを行うことにしました。 SQL Server 2008 StandardおよびSQL Server 2014 Expressで見ました。 以下は、私がそれを再現するために使用した完全なスクリプトです。 Microsoft SQL Server 2014で試しました-12.0.2000.8(X64)2014年2月20日20:04:26 Copyright(c)Microsoft Corporation Express Edition(64-bit)on Windows NT 6.1(Build 7601:Service Pack 1) およびMicrosoft SQL Server 2014(SP1-CU7)(KB3162659)-12.0.4459.0(X64)2016年5月27日15:33:17著作権(c)Windows NT 6.1(ビルド7601:サービス上のMicrosoft Corporation …

2
本番環境からテストデータベース内のいくつかのテーブルのみを更新する最良の方法は何ですか?
SQL Server 2008R2には、非常に大規模な運用データベースと非常に大規模なテスト環境データベースがあります。両方のデータベースのテーブル構造は似ていますが、ユーザー/ログイン/権限/ロールが異なります。 テストデータベース内のいくつかのテーブルだけを月に1回程度、実稼働から定期的に更新する必要があります。 私がこれを行うことを計画している現在の方法は BCPユーティリティを使用して、本番から必要なテーブルのエクスポートを取得します。 bcpエクスポートファイルをテストサーバーにコピーします テストで更新しているすべてのテーブルのインデックスと制約を無効にします テストデータベーステーブルを切り捨てる BCPを使用して、テストデータベーステーブルにデータをロードし直します。 テストでインデックスを再構築し、制約を再度有効にします これはすべて、このような小さなタスクには少し複雑すぎるようです。また、多くのやり直しが生成されるようです(t-logで)これを行うより良い方法はありますか? 私がこれを行う別の方法は、実稼働環境からテスト環境にバックアップを復元することですが、私が抱えている問題は、完全バックアップが非常に大きくなり、すべてのテーブルを更新する必要がなく、数回だけ更新する必要があることです- -また、運用データベースのユーザーとセキュリティはテストとは異なります。データベース全体を復元すると、運用データベースのセキュリティ設定によって上書きされます。

1
CONVERT()のこの問題の原因は何ですか?
次の2つのステートメントを検討してください。 PRINT CONVERT(NUMERIC(38, 0), 0x0100000001, 0); PRINT CONVERT(NUMERIC(38, 0), 0x0100010001, 0); 両方のステートメントが戻り-1ます。2番目のバイナリ値は最初の値よりも10進数65,536大きいため、これは間違っていませんか? 確かに、これは無言の切り捨てによるものではないでしょうか? 次のステートメントを実行した場合: PRINT CONVERT(NUMERIC(38, 0), 0x00000001, 0); PRINT CONVERT(NUMERIC(38, 0), 0x00010001, 0); 次のエラーが表示されます。 Msg 8114, Level 16, State 5, Line 1 Error converting data type varbinary to numeric. ここで何が起こっているかを診断するにはどうすればよいですか? これをSQL Server 2012 v11.0.5058で実行しています。結果は、SQL Server 2008 R2 SP2、SQL Server …

1
トランザクションが「コミット」されている場合、確実に保存されますか?
トランザクションが正常にコミットされた場合、データベースとログファイルに書き込まれたことを100%確認できますか?データが保存されていることを確認できますか? 今日、ログファイルはドライブの制限に達し、多くのエラーが発生しました。さらに、他のいくつかのサービスがクラッシュしました。ディスクを増やし、サーバーを再起動しました。 起動時に、サーバーは「データベースの回復」を行いました。すべてが再び正常に動作することを確認できますか?

2
外部キーとしての複合主キーの効率
重複がテーブルに入力されないようにするために使用される複合主キー(4列で構成される)を持つテーブルがあります。このテーブルのキーを外部キーとして参照する必要がある新しいテーブルが必要になりました。 私の質問は、どのアプローチがルックアップ速度にとってより効率的かです: 1)4列すべてを含む新しいテーブルを作成し、それらをすべて外部キーで参照しますか。 または 2)主キーテーブルに新しいID列を作成し、これを新しいテーブルの外部キーとして使用しますか。 このデータベースは非常に大量のデータを保持することが期待されているため、各テーブルに保持されるデータ量を最小限に抑えることを目的として、これまで構築してきました。これを念頭に置いて、すべての行に2つのint列とdatetime列を保存するため、オプション2が最適なアプローチになりますが、不要な場合はルックアップ時間の増加を避けたいと思います。

3
SQL Server 2008のメモリにキャッシュされているものを確認するにはどうすればよいですか?
SQL Server 2008 R2にキャッシュされているものを確認する方法はありますか?私は、次の素敵な記事を見つけました:http://blog.sqlauthority.com/2010/06/17/sql-server-data-pages-in-buffer-pool-data-stored-in-memory-cache。ただし、各テーブルとインデックスのデータ(パーセンテージやKBなど)がどれだけ保存されているかを知りたいと思います。そのようなデータを取得する簡単な方法はありますか?

3
数百万件のレコードでテーブルを更新して、4日間でした
現在、数百万件のレコードでテーブルを更新していますが、4日間で、クエリはまだ実行中です。 クエリが実行されていることを示すアクティビティモニターを確認しました。 イベントログにエラーはまったくありません。 賢明なパフォーマンス: ディスクAのTempdb(850 GBの空き領域) ディスクBのデータベースファイル(750 GBの空き領域) 16 GBラム どうすればいいですか? クエリ UPDATE dbo.table1 SET costPercentage = ISNULL(t2.PaymentIndex, 1.0), t2.TopUp_Amt = (ISNULL(t2.PaymentIndex, 1.0) - 1.0) * ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00), Total_Tariff_Inc_t2 = ISNULL(t2.PaymentIndex, 1.0) * ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00) FROM dbo.table2 t2 WHERE LEFT(dbo.test1.procodet, 3) = LEFT(t2.ProviderCode, 3) COLLATE database_default

3
SQL Serverのアクセス許可でADセキュリティグループを更新する方法
Small Business Server 2003でSql Server 2008を使用しています。クライアントはWinXPを使用しています。 Active Directoryセキュリティグループにユーザーを追加しました。このユーザーがすぐにデータベースにアクセスできないのはなぜですか?ユーザーがSql Serverで認識されるまでに遅延があるようです。 権限にADセキュリティグループを明示的に使用しているため、SQL Serverに個々のユーザーを追加する必要はありません。事実上、アクセスを許可するためにユーザーをADセキュリティグループに追加する以外に何もする必要はありません。 しかし、何らかの理由で、SQL Serverは追加をすぐには認識しません。私はこれを何度も見ました。ユーザーをグループに追加しましたが、そのユーザーは翌日までデータにアクセスできません。Active Directoryをリアルタイムで照会しないようです。そうだと確認できますか? Sql ServerがActive Directoryからユーザーのリストを「更新」するために何をする必要がありますか?

2
Single_Userモードでデータベースを削除する方法
DatabaseName (Single User)名前として表示されているデータベースを削除するにはどうすればよいですか? 削除しようとすると、次のエラーが表示されます。 データベース 'DatabaseName'の変更に失敗しました。(Microsoft.SqlServer.Smo) ALTER DATABASEステートメントが失敗しました。(Microsoft SQL Server、エラー:5064) ALTER以下を実行しようとしましたが、まだ同じ問題があります。 ALTER DATABASE [DatabaseName] SET MULTI_USER WITH NO_WAIT

1
ミラーリング-サーバーのネットワークアドレスに到達できません
SQL Server 2008 R2がインストールされています。3つのインスタンスが含まれています。 デフォルト(MSSQLServer) 最初のインスタンス 2番目のインスタンス これらはすべて、ネットワークサービスとしてログオンです。 デフォルトのインスタンスはプリンシパルサーバーです。最初のインスタンスはミラーリングです。2番目のインスタンスは監視サーバーです。 最初に、プリンシパルデータベースのフルバックアップとトランザクションログバックアップを取得しました。同じデータベース名を保持して最初のインスタンスに復元し、リカバリ状態はリカバリなしです 最後に、ミラーリングを開始しましたが、次に示す2つのエラーメッセージが表示されます。

3
主キーの代わりにカバー列を持つ一意の非クラスター化インデックスを使用することの意味
私たちは、大きなテーブル持っている[MyTable]現在の両方Aを有しPrimary Key、かつUnique Non Clustered Index同じ列に([KeyColumn])。U NCインデックスには、追加のカバー列もあります。 同じ列にPKと一意のNCインデックスの両方があることは冗長に思えるので、主キーを削除し、代わりに参照整合性の目的で一意の非クラスタ化インデックスを使用することを検討していました。 テーブルは別の列によって完全にクラスター化されることに注意してください。 つまり、次のとおりです。 ALTER TABLE [MyTable] ADD CONSTRAINT [PK_MyTable] PRIMARY KEY NONCLUSTERED ([KeyColumn]) GO そして CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex] ON [MyTable] ([KeyColumn]) INCLUDE ([Column1], [Column2]) GO 私の知る限り、主キーにカバー列を追加することはできないため、次のことを行います。 依存する外部キー制約の削除 MyTable.KeyColumn 主キーをMyTable.KeyColumn完全にドロップします テーブルに外部キーを再追加します(RIはを介して強制されますMyTable.KeyColumn) これを考えることができる唯一の意味は、ERDダイアグラムに視覚的なキーシンボルが表示されず、列が含まれているため(リーフ)インデックス密度が低くなるということです。 /programming/487314/primary-key-or-unique-indexを読んで、これを行うことの整合性とパフォーマンスの側面に満足しています。 私の質問は次のとおりです。このアプローチには欠陥がありますか? 私が達成しようとしていることを編集します:パフォーマンス最適化と春の掃除。PKまたはインデックスのいずれかを削除すると、インデックスに必要なページが少なくなり、書き込みが高速になり、さらにメンテナンス/運用上の利点が得られます。 これにいくらかの背景を置くために、私はこれまでに、PKなしで参照されているテーブルを持っていませんでした。ただし、列をカバーするNCインデックスがテーブルに追加されたという事実は、自分の考え方を適応させる必要があることを意味します。

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