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

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

3
誰が手順を作成しましたか?(SQL Server 2008 R2)
SQL Server 2008で特定の調達を作成したユーザーを一覧表示する方法はありますか? ではこのSOのリンクがいくつかの答えですが、6yrsから前に。 名前と日付を書いてから手順の作成を始めるのが最善の策であることはわかっていますが、私が作業しているところはわかりません。 これを行う方法がない場合、このタスクはトリガーで実行できますか? そしておまけの質問。これはdbaの仕事ですか?誰がそれを作ったのか知りたい? どうもありがとうございました。

1
複数の.mdfファイルを含むデータベース
オンラインで検索しましたが、探しているものが見つかりません。 問題/クエリは、私の知る限り、SQL Serverのデータベースには1つの.mdfファイルと、おそらくいくつかの.ndfファイルと1つの.logファイルが必要です。 1つのmdfファイルと複数のndfファイルを持つ多くのデータベースを見てきました。しかし最近、すべてのデータベースに複数のmdfファイルが存在するサーバー上のデータベースに遭遇しました。 一部のデータベースのバックアップを取り、それらを別のサーバーに移動し、プライマリファイルを.mdfとして、その他のすべてのファイルを.ndfとして復元しました。 今私の質問は: データベースに複数の.mdfファイルを作成することには、何か賢明なことはありますか? 複数の.mdfファイルがあることの欠点はありますか? そうだった SQL Server 2008 R2 64bit Enterprise Edition 正しい方向へのアドバイスやポインタは大歓迎です。ありがとうございました。

2
セカンダリデータファイルを削除しています。DBCC SHRINKFILE:作業テーブルページであるため、ページを移動できませんでした
に対して作成したセカンダリデータファイル(.ndf)が多すぎますtempdb。余分なファイルを削除するには、ファイルを空にする必要があります(コンテンツは他のファイルに移動されます)。 DBCC SHRINKFILE('tempdbfile8', EMPTYFILE); 次にファイルを削除します。 ALTER DATABASE tempdb REMOVE FILE tempdbfile8; しかし、EMPTYFILEコマンドはエラーを返します: DBCC SHRINKFILE: Page 8:41920 could not be moved because it is a work table page. Msg 2555, Level 16, State 1, Line 2 Cannot move all contents of file "tempdbfile8" to other places to complete the emptyfile operation. …

1
トランザクション分離レベルのスナップショットと切り捨て?
スナップショット分離とTRUNCATEに関して、私が予期していなかったこの動作に誰かが光を当てることができることを願っています。 データベース:スナップショット分離を許可= True; コミットされた読み取りスナップショットがオン= False。 手順1(長時間実行される複雑なSELECTのテーブルfooのコンテンツを多数の結合で置き換えます): BEGIN TRAN; TRUNCATE TABLE foo; INSERT INTO foo SELECT...; COMMIT; 手順2(テーブルfooからの読み取り): SET TRANSACTION ISOLATION LEVEL SNAPSHOT; SELECT * FROM foo; Procedure2の実行中にProcedure1が実行されている場合、Procedure2は、Procedure1が終了するまで(sp_WhoIsActiveに応じて)LCK_M_SCH_S待機で待機します。そして、Procedure2が完了すると、次の例外が発生します。 このトランザクションの開始以降、ステートメントによってアクセスされたオブジェクトが別の同時トランザクションのDDLステートメントによって変更されたため、データベース 'DatabaseName'でスナップショット分離トランザクションが失敗しました。メタデータはバージョン管理されていないため、許可されません。メタデータへの同時更新は、スナップショット分離と混在している場合、不整合を引き起こす可能性があります。 ただし、Microsoftでは、スナップショット分離では許可されていないDDLステートメントとしてTRUNCATEをリストしていません。http://msdn.microsoft.com/en-us/library/bb933783.aspx 手順2がTRUNCATEの前にテーブルから最も最近コミットされたデータをすぐに返すか、または手順1によって保持されてから、テーブル。手伝ってくれますか?

1
クエリのパフォーマンスが悪い
処理するデータ量に応じて、通常0.5〜6.0秒で実行される大きな(10,000行以上)手順があります。過去1か月間で、FULLSCANで統計を更新してから30秒以上かかりました。速度が低下すると、sp_recompileは問題を「修正」し、夜間統計ジョブが再度実行されるまで待機します。 低速と高速の実行プランを比較することで、特定のテーブル/インデックスに絞り込みました。実行速度が遅い場合は、特定のインデックスから約300行が返されると推定され、実行速度が速い場合は1行と推定されます。実行速度が遅い場合はインデックスでシークを行った後にテーブルスプールを使用し、実行速度が速い場合はテーブルスプールを実行しません。 DBSS SHOW_STATISTICSを使用して、インデックスヒストグラムをExcelでグラフ化しました。私は通常、グラフがより「ローリングヒル」であると予想しますが、代わりにそれは山のように見え、最高点はグラフ上の他のほとんどの値よりも2倍から3倍高くなります。 FULLSCANなしで統計を更新すると、より正常に見えます。その後、もう一度FULLSCANで実行すると、上記のように見えます。 これは、パラメータスニッフィングの問題のように感じられ、特に上記の(一見)奇妙なインデックス分布に関連しています。 プロシージャはテーブル値パラメーターを受け取りますが、パラメーター値パラメーターでパラメーターのスニッフィングを行うことができますか? 編集:プロシージャは、他に12個のパラメーターも受け取ります。そのうちのいくつかはオプションで、そのうちの2つは開始日と終了日です。 ヒストグラムは奇妙ですか、それとも間違ったツリーを吠えていますか? クエリを調整したり、インデックスを調整したりすることは確かに快適です。それがすばらしい修正である場合、その時点での私の質問は、歪んだヒストグラムについての詳細です。 これはPK IDENTITYクラスター化インデックスであることを述べておきます。互いに通信する2つのシステムがあり、1つはレガシーシステムで、もう1つは新しい自家製システムです。どちらのシステムも同様のデータを保存します。新しいシステムのこのテーブルのPKを同期させるために、古いシステムにデータが追加されない場合でも(RESEEDが実行された場合でも)、PKが増加します。したがって、この列の番号付けにいくつかのギャップがある可能性があります。レコードが削除されることはほとんどありません。 どんな考えでも大歓迎です。より多くの情報を収集/含めることができて、とてもうれしいです。

1
UNPIVOTに動的に列名を渡す
次のデータを含むテーブルがあります First Second Third Fourth Fifth Sixth 2013-08-20 2013-08-21 2013-08-22 2013-08-23 2013-08-24 2013-08-25 そして使用 UNPIVOT SELECT Data ,DATENAME(DW, Data) AS DayName FROM Cal UNPIVOT(Data FOR D IN ( First, Second, Third, Fourth, Fifth, Sixth )) AS unpvt 次の結果が得られます Data DayName 2013-08-20 Tuesday 2013-08-21 Wednesday 2013-08-22 Thursday 2013-08-23 Friday 2013-08-24 Saturday …

2
SQL Server 2012を2008 R2が既にインストールされているマシンにインストールできますか?
私はかなり前からSQL Server 2008 R2を使用していますが、うまく機能しています。SQL Server 2012を使用する必要があります。これは既存のデータベースに影響しますか?SQL Server 2008 R2が実行されているマシンにSQL Server 2012をインストールする場合、どの程度のリスクが伴いますか?

3
別のジョブ内でSQL Serverジョブを呼び出す
SQL Serverジョブを呼び出して別のジョブ内で実行することは可能ですか? ジョブ1のすべてのステップをジョブ2に追加できることはわかっていますが、そうしたくないのです。1つはジョブ2がすでに非常に大きく、2つ目はジョブ間でステップをコピーするためのコピー/貼り付けオプションが見つからなかったため、手動でステップを追加するのに時間がかかります。 任意の提案をいただければ幸いです。

1
クエリの最適化:時間間隔
主に、2種類の時間間隔があります。 presence time そして absence time absence time さまざまなタイプ(休憩、欠席、特別な日など)にすることができ、時間間隔が重複したり交差したりする場合があります。 生データに存在する区間のもっともらしい組み合わせだけが存在するかどうかは確かではありません。存在間隔の重複は意味がありませんが、存在する場合があります。結果として得られるプレゼンスタイムインターバルをさまざまな方法で特定しようとしましたが、私にとって、最も快適なのは次のインターバルのようです。 ;with "timestamps" as ( select "id" = row_number() over ( order by "empId", "timestamp", "opening", "type" ) , "empId" , "timestamp" , "type" , "opening" from ( select "empId", "timestamp", "type", case when "types" = 'starttime' then 1 else -1 …

3
SELECT ROW_NUMBER()は、生成された行番号でソートされた結果を返すことが保証されていますか?
たとえば、SQLクエリについて考えてみましょう。 SELECT A.[Name], ROW_NUMBER() OVER(ORDER BY A.[Name] ASC) FROM [FooTable] AS A ここでは、A。[Name]でソートされて返される結果を観察します。ROW_NUMBER関数で定義されたソート列を別の列に変更すると、結果はその列でソートされます。 行番号が行に割り当てられることを期待していましたが、同じ基準で行がソートされて戻ってくるとは思っていませんでした。これは単にクエリがどのように実行されているか(SQL Server 2008 R2の場合)の副作用ですか、それともこの動作は保証されていますか?(私はそのような保証への言及を見つけることができませんでした)。

1
バックアップからのトランザクションレプリケーションの初期化
レプリケーションのパブリケーションを設定するときに、バックアップからの初期化を許可するオプションがあります。私たちは数年前から複製データベースを作成しており、常にバックアップから初期化してきましたが、このフラグを設定したことはありません(数日前に初めて気づきました)。複製は常に問題なく機能してきました。 これを使用する必要があることを説明するヒットがたくさん見つかりましたが、理由を説明するものはありません。 これが実際に何をしているのか誰かが理解していますか?私の観点から、それは必要ではないようですが、私は何かを逃している必要があると考えています。

1
動的に作成されたテーブルデータを返すストアドプロシージャ
簡単に言えば、調査システムを備えた外部ベンダーと協力しています。システムは、新しい調査を作成し、システムが新しいテーブルを作成するときに、必ずしも次のように設計されているとは限りません。 Tables ____ Library_1 -- table for Survey 1 SurveyId int InstanceId int Q_1 varchar(50) Library_2 -- table for Survey 2 SurveyId int InstanceId int Q_2 int Q_3 int Q_4 varchar(255) テーブルはで生成されたSurveyId名前の末尾に(Library_)と質問の列がで生成されQuestionId、それの終わり(でQ_)。 明確にするために、質問は別のテーブルに格納されているため、質問IDは連続していますが、各調査で1から開始されません。質問の列は、テーブルで割り当てられたIDに基づいています。 別のシステムに送信するためにすべての調査テーブルからデータを抽出する必要があることを除いて、クエリを実行するのに十分簡単なようです。これは問題が発生する場所です。新しい調査がフロントによって追加されると、テーブルが自動的に作成されるため、アプリケーションを終了すると、他のシステムはこのタイプの構造を処理できません。彼らは消費するためにデータが一貫している必要があります。 そのため、すべてのSurveyテーブルからデータを抽出して次の形式で配置するストアドプロシージャを作成する必要がありました。 SurveyId InstanceId QNumber Response ________ __________ _______ ________ 1 1 1 great 1 2 1 …

2
ストアドプロシージャの作成時にテーブルが存在する場合でも、遅延名前解決を強制する方法はありますか?
SQL Serverでストアドプロシージャを作成する場合、存在しないテーブルを参照できます。ただし、テーブルが存在する場合は、手順で参照するすべての列がそのテーブルに存在する必要があります(遅延名前解決)。 存在するかどうかに関係なく、プロシージャで参照されるすべてのテーブルの名前解決を遅らせるようにSQL Serverに指示することはできますか?一般的な構文チェックを維持したいので、可能であったとしても、ストアドプロシージャ定義をシステムテーブルにハッキングすることはできません。 私はこれを行うことを要求することは少し奇妙に思われるかもしれないと思うので、ここにいくつかの背景があります:C#で書かれたアプリケーションからテーブル定義とストアドプロシージャを自動生成し、SQLの必要に応じてコードを変更して変更を順序付けるのは非常に困難ですそれら。私のコードは、スキーマがトランザクション内で一貫していることを「保証」しますが、現在、テーブルカラムを定義する前に、それらを参照するストアドプロシージャを定義することは保証できません。 以下は、C#によって作成されたSQLの標準的な例であり、私が解決しようとしている問題を「例示」しています。 --Say this table already exists. CREATE TABLE myTable ( a NVARCHAR(MAX) ) GO --My C# code creates something like this BEGIN TRAN GO --the stored procedure gets generated first. CREATE PROCEDURE mySproc AS BEGIN SELECT a,b FROM myTable END --then the table update ALTER …

4
SQL Server 2008 R2:コンピューター名の変更後の問題
ローカルSQL Serverインスタンスをホストしているリモートサーバーのコンピューター名を変更すると、混乱する問題が発生します。 基本的に、リモートサーバーはサイト間で移動されました。これを容易にするために、古いデータベースをバックアップして新しいデータベース名に復元し、データを消去して、クライアントソフトウェアの新しいデータベースとして使用できるようにしました。コンピューター名も変更しました。これは、サイト番号で各サーバーを識別するために常に変更するためです。 データベースはクライアントソフトウェアから問題なく接続でき、SQL Serverに直接ログインできます。ただし、SQL Serverエージェントジョブの1つが失敗し、イベントログにエラーが記録されます。 SQL Serverのスケジュールされたジョブ 'Nightly Reset'(0x4F76FDFFF6DFFE4EA0DE4A70252AD3BD)-ステータス:失敗-起動日:2012-02-07 08:10:05-メッセージ:ジョブが失敗しました。ジョブNightly Resetの所有者(Site-19 \ Admin)にサーバーアクセスがあるかどうかを判別できません(理由:Windows NTグループ/ユーザー 'Site-19 \ Admin'に関する情報を取得できませんでした、エラーコード0x534。[SQLSTATE 42000](エラー15404))。 これで、「サイト-19」は変更された古いコンピューター名になり、サーバーがリセットされました。新しいサイト番号「Site-28」を使用して手動で接続すると、Site-28 \ Adminを使用してSQL Serverに接続されていることが表示されます。ただし、エージェントジョブのプロパティを見ると、所有者がSite-19 \ Adminであると表示され、ユーザーを参照して変更しようとすると、Site-28 \ Adminがオプションとして表示されません。 、Site-19 \ Adminのみ。このジョブから新しいジョブをスクリプト化し、所有者を手動で「Site-28 \ Admin」に変更すると、新しいジョブは所有者「Site-19 \ Admin」で作成されます。 sys.servers(またはsp_helpserver経由)を見ると、現在のコンピューター名という1つのエントリしかありません。ただし、SELECT @@ SERVERNAMEは元の開発マシン名を返します(2つ前の名前の変更)。 つまり、この重要なSQL Serverエージェントジョブは、存在しないユーザーに属しているため実行できず、変更または正しいユーザーとして作成する方法がわかりません。


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