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

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

2
列をNOT NULLからNULLに変更する-内部で何が起こっているのでしょうか?
2.3B行のテーブルがあります。列をNOT NULLからNULLに変更したいと思います。列は1つのインデックスに含まれます(クラスター化インデックスまたはPKインデックスではありません)。データ型は変更されていません(INTです)。ただnullability。ステートメントは次のとおりです。 Alter Table dbo.Workflow Alter Column LineId Int NULL 操作は、停止する前に10を超えます(ブロッキング操作であり、時間がかかりすぎたため、完了まで実行することすらまだできていません)。テーブルを開発サーバーにコピーして、実際にかかる時間をテストします。しかし、NOT NULLからNULLに変換する際にSQL Serverが内部で何をしているのかを誰かが知っているのか興味がありますか?また、影響を受けるインデックスを再構築する必要がありますか?生成されたクエリプランは、何が起こっているのかを示していません。 問題のテーブルはクラスター化されています(ヒープではありません)。

4
なぜ毎晩バックアップするシンプルリカバリモードでトランザクションログが増大し続けるのか
すぐに重複としてマークする前に、Mike Walshの「なぜトランザクションログが増え続けるか、スペースが足りないのですか?」を読みました。、しかし、それが私の状況に答えを与えたとは思わない。私は十数個の同様の質問に目を通しましたが、関連する質問のほとんどは「重複」と言って、マイクの質問を指しています。 詳細:SQL Server 2008 R2には約500MBのデータベースがあり、すべてSIMPLEリカバリモード(選択ではありません)、夜間フルバックアップ、最大200MBのデータファイル、および約300MBのログファイルがあります。ログはすぐに300MBに拡大するのではなく、数か月かけてゆっくりと拡大します。少なくともsp_who2とアクティビティモニターによれば、それらのいずれにもオープントランザクションはありません。データベースを右クリックしてプロパティを選択すると、最大50MBの空きがあることがわかります。特にバックアップ直後は、ログ全体を解放すべきではありませんか?SIMPLEモードでは、開いているトランザクションがない限り、ログは解放されませんか? log_reuse_wait_descfrom sys.databasesは「NOTHING」と言っており、上記の質問と回答に基づいて、スペースを再利用するために何も待つべきではないことを示しています。 「DBCC SHRINKFILE」を実行すると、ログファイルが1MBに縮小されるため、スペースを再利用できます。毎週ログを圧縮し、制御不能にならないように設定することはできますが、SQL Serverがそれを行う理由について混乱しています。 ログに300MBを必要とするクレイジーなトランザクションがあったかどうかはわかりますが、極端なことはしていません。基本的なOLTPだけです。マイクの質問/回答から: 単純復旧モデル-したがって、上記の概要では、最初に単純復旧モデルについて説明するのが最も簡単です。このモデルでは、SQL Serverに通知しています-クラッシュと回復の再開にトランザクションログファイルを使用しても問題ありません(実際には選択の余地はありません。ACIDプロパティを検索し、すぐに意味をなすはずです)。クラッシュ/リスタートリカバリの目的でこれが必要になったら、ログファイルを再利用してください。 SQL Serverは、シンプルリカバリでこのリクエストをリッスンし、クラッシュ/リカバリの再開に必要な情報のみを保持します。データがデータファイルに(多少なりとも)強化されているためにSQL Serverが回復できることが確認されると、強化されたデータはログに不要になり、切り捨てのマークが付けられます。つまり、再利用されます。 ログスペースを再利用する必要があると言われ続けていますが、数か月にわたるこの緩やかな成長により、そうではないようです。 私は何が欠けていますか?SQL Serverがデータを「強化された」ものとして認識し、ログを解放できないようにしているのでしょうか? (編集) アフターアクションレポート-ちょっとした知識は危険です これが「一般的な質問」であることがわかった後、7か月前に何が起こったのか、他の人々に悲しみを救うために学んだことを説明する義務があると感じました。 まず、データベースのプロパティを表示したときにSSMSに表示される使用可能な領域は、データファイルで使用可能な領域です。これを表示するには、データベースで次のコマンドを実行します。SSMSによって報告される使用可能な領域は、FileSizeMBとUsedSpaceMBの違いです。 SELECT DB.name, MF.physical_name, MF.type_desc AS FileType, MF.size * 8 / 1024 AS FileSizeMB, fileproperty(MF.name, 'SpaceUsed') * 8/ 1024 AS UsedSpaceMB, mf.name LogicalName FROM sys.master_files MF JOIN …

3
パーティションキーもプライマリキーの一部である必要がありますか?
主キーではない列に基づいてテーブルをパーティション分割していますか?今日、パーティション列を主キーの一部にする必要があるかどうかに関するいくつかの矛盾する情報を読みました。私の腸はノーと言うが、私は100%確信していない。だから質問... パーティション列はプライマリの一部である必要がありますか?どちらの方法がお勧めですか? パーティションキーのインデックスを作成する必要がありますか、それともDBMSが自動的にインデックスを作成しますか?

3
現在の年を除くすべてをアーカイブし、同時にテーブルをパーティション分割する最良の方法は何ですか
仕事 大きなテーブルのグループから、13か月のローリング期間を除くすべてをアーカイブします。アーカイブされたデータは別のデータベースに保存する必要があります。 データベースは単純復旧モードです テーブルは50ミリ行から数十億行で、場合によってはそれぞれ数百GBを占有します。 テーブルは現在パーティション化されていません 各テーブルには、増え続ける日付列に1つのクラスター化インデックスがあります 各テーブルには、さらに1つの非クラスター化インデックスがあります テーブルに対するすべてのデータ変更は挿入です 目標は、プライマリデータベースのダウンタイムを最小限に抑えることです。 サーバーは2008 R2 Enterpriseです 「アーカイブ」テーブルには約11億行、「ライブ」テーブルには約4億行が含まれます。明らかに、アーカイブテーブルは時間とともに増加しますが、ライブテーブルも合理的に急速に増加することを期待しています。少なくとも次の数年で50%と言います。 Azureストレッチデータベースについて考えていましたが、残念ながら2008 R2にあり、しばらくそこに留まる可能性があります。 現在の計画 新しいデータベースを作成する 新しいデータベースに(変更日を使用して)月ごとにパーティション分割された新しいテーブルを作成します。 直近の12〜13か月分のデータをパーティションテーブルに移動します。 2つのデータベースの名前変更スワップを行う 移動したデータを現在の「アーカイブ」データベースから削除します。 「アーカイブ」データベースの各テーブルをパーティション分割します。 パーティションスワップを使用して、将来データをアーカイブします。 アーカイブするデータをスワップアウトし、そのテーブルをアーカイブデータベースにコピーし、それをアーカイブテーブルにスワップする必要があることを理解しています。これは許容範囲です。 問題: データを初期パーティションテーブルに移動しようとしています(実際、まだデータの概念実証を行っています)。私はTF 610(データロードパフォーマンスガイドに従って)とINSERT...SELECTステートメントを使用して、データを最小限に記録されると最初に考えて移動しようとしています。残念ながら、私が試すたびに完全にログに記録されます。 この時点で、SSISパッケージを使用してデータを移動することが最善の策だと考えています。200個のテーブルと、スクリプトでできることはすべて簡単に生成して実行できるため、これを回避しようとしています。 私の一般的な計画で不足しているものはありますか?SSISは、ログを最小限に抑えてデータをすばやく移動するための最善の策です(スペースの問題)? データなしのデモコード -- Existing structure USE [Audit] GO CREATE TABLE [dbo].[AuditTable]( [Col1] [bigint] NULL, [Col2] [int] NULL, [Col3] [int] NULL, [Col4] [int] …

1
SQL Server 2000データベースを2008 R2にアップグレードし、新しい機能を有効にします
最近、SQL Server 2000データベースを2008 R2にアップグレードしました。 私がしたことは: 古いマシンでSQL Server 2000(エクスプレス)サービスをシャットダウンします。 データファイル(mydatabase.mdfおよびmydatabase.ldf)を新しいマシンに移動し、 SQL Server Management Studio 2008を実行します。 ローカルデータベースエンジンに接続し、 データファイルをデータベースに添付します。 データベースの互換性レベルをSQL 2008(100)に変更します。 質問:移行を完了するには、他に何をすればよいですか? したい: チェックサムや完全復旧モデルなどの新機能を使用し、 このデータベースをSQL 2008 R2で作成されたとおりに作成します。 このデータベースを完全に互換性があり、正確にし、新しいSQL 2008 R2データベースエンジンに最適なものにします。 つまり、古いSQL 2000データベースを新しい2008 R2データベースに正しく完全に変換する方法を知り、すべてが正しく行われていることを落ち着いて、すべての新機能に満足しているだけです。 この質問をしているのは、インターネット上で非常に多くの異なることを言って混乱しているサイトを見つけたためです。今は何も分からないので、経験豊富な人の意見と明確で段階的な指示を聞きたいです。私は非常に小さな会社で働いています。私は独力で仕事をします。 サー、私はあなたの答えに本当に感銘を受けました、私はそれほど期待していませんでした。 いくつかのコメント: データベースは現在稼働中です。私が言ったように、それは私が最初の記事でdesribedような方法をdeattachは、取り付け使用してアップグレードされたとMSDNに記載されているように:http://msdn.microsoft.com/en-us/library/ms189625.aspx それは迅速に行わなければなりませんでした、だから私はそのようにせざるを得なかった。それがいかに不適切であったかを忘れて、現在の状況に注目しましょう。 ここではユーザー/権限は問題ではありません-少数であり、許可は簡単です。 データベースを使用するアプリケーションは2012年までSQL 2000と互換性があるため、これも問題ではありません。 データベースファイル(MDF)は大きくなく、約1GBのみです。 その他の質問: バックアップ/復元方法を使用することをお勧めしますが、上記のようにしたので、問題が発生する可能性はありますか?すべてが問題なく機能しました。 チェックサムと完全復旧モデルについて:SQL 2000では利用できなかったので、すぐに使用したいと思います。データベースプロパティでこれらのオプションを有効にすることだけが必要だとおっしゃいましたか?どこかで読みましたが、それだけでは十分ではなく、インデックスなどを再構築する必要があります。私は本当に知りません、ただ尋ねます。 このデータベースをSQL 2012に移行するために事前に準備しています-最初はSQL 2000から2008 R2になりましたが、2008 R2から2012になりますSQL 2012)。だから私はあなたのガイドに従うべきだと理解しています:2008 R2でそれをバックアップし、2012年に復元してから、残りのヒントをしますか? …

5
新しいスナップショットを生成せずに記事をトランザクションパブリケーションに追加する
プルサブスクライバーでSQL 2008 R2トランザクションレプリケーションを使用して、記事を追加するときに、スナップショット全体を作成する必要がないようにしたいと思います(dbは最大80 GBであるため、これには数時間かかります)。 この記事から、immediate_syncをオフに設定することで部分スナップショットでこれを行う方法を見てきましたが、それはうまくいきませんでした。 理想的には、dbスクリプトの一部としてこれを実行してテーブルを作成したいので、複製する場合は次のようにします。 Create Table ... sp_addArticle ... sp_PushThisToOurSubscribersNow

7
特定の役割のすべての権限をリストしますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 6年前に移行され ました。 私はあちこち検索してみましたが、この質問に対する決定的な答えは見つかりませんでした。 関連する役割にすべてのアクセス許可を付与できるスクリプトが必要です。 何か考え、またはそれも可能ですか? これは私を閉じます-しかし、私はそれをひっくり返して、ユーザーではなく役割の要約を与えることができないようです。 http://consultingblogs.emc.com/jamiethomson/archive/2007/02/09/SQL-Server-2005_3A00_-View-all-permissions--_2800_2_2900_.aspx WITH perms_cte as ( select USER_NAME(p.grantee_principal_id) AS principal_name, dp.principal_id, dp.type_desc AS principal_type_desc, p.class_desc, OBJECT_NAME(p.major_id) AS object_name, p.permission_name, p.state_desc AS permission_state_desc from sys.database_permissions p inner JOIN sys.database_principals dp on p.grantee_principal_id = dp.principal_id ) --role members SELECT rm.member_principal_name, rm.principal_type_desc, p.class_desc, p.object_name, p.permission_name, …

2
既存の非パーティションテーブルをパーティション化する方法
データのある既存のテーブルがあります: dbo.Test (col1,col2,col3....) ON [PRIMARY] このようにパーティション分割されるようにこのテーブルを変更する必要があります。 dbo.Test(col1,col2,col3....) ON Ps_Date(Col2) テーブルをドロップして再作成せずにこれを達成するにはどうすればよいですか?

2
LIKEはインデックスを使用しますが、CHARINDEXは使用しませんか?
この質問は私の古い質問に関連しています。以下のクエリの実行には10〜15秒かかりました。 SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id] FROM [company].dbo.[customer] WHERE (Charindex('123456789',CAST([company].dbo.[customer].[Phone no] AS VARCHAR(MAX)))>0) 一部の記事では、インデックスを使用CASTしてCHARINDEXもメリットが得られないことがわかりました。またLIKE '%abc%'、インデックスを使用してもメリットはありませんが、インデックスを使用してもメリットがないという記事もありますLIKE 'abc%'。 http://bytes.com/topic/sql-server/answers/81467-using-charindex-vs-like-where /programming/803783/sql-server-index-any-improvement-for -like-queries http://www.sqlservercentral.com/Forums/Topic186262-8-1.aspx#bm186568 私の場合、クエリを次のように書き換えることができます。 SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id] FROM [company].dbo.[customer] WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%' このクエリは、前のクエリと同じ出力を提供します。columnの非クラスター化インデックスを作成しましたPhone no。このクエリを実行すると、わずか1秒で実行されます。これは、以前の14秒と比較して大きな変化です。 どのようにLIKE '%123456789%'インデックスからの利点は? リストされた記事にパフォーマンスが改善されないと記載されているのはなぜですか? 使用するクエリを書き直そうとしましたCHARINDEXが、パフォーマンスはまだ遅いです。クエリのCHARINDEXように表示されるのに、なぜインデックス付けのメリットがないのLIKEですか? を使用したクエリCHARINDEX: SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id] FROM [Company].dbo.[customer] WHERE ( Charindex('9000413237',[Company].dbo.[customer].[Phone no])>0 ) 実行計画: を使用したクエリLIKE: SELECT [customer].[Customer …

4
マージステートメント自体のデッドロック
次の手順があります(SQL Server 2008 R2): create procedure usp_SaveCompanyUserData @companyId bigint, @userId bigint, @dataTable tt_CoUserdata readonly as begin set nocount, xact_abort on; merge CompanyUser with (holdlock) as r using ( select @companyId as CompanyId, @userId as UserId, MyKey, MyValue from @dataTable) as newData on r.CompanyId = newData.CompanyId and r.UserId = newData.UserId and …

3
巨大なテーブルにクラスター化インデックスを作成する簡単な方法
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 そのため、パフォーマンスが大幅に低下していると不満を言っているカスタマーサイトがあります。ひと目見てみると、問題は、Somebody Else(grrrr)がクラスター化インデックスなしで約2,000万件以上のレコードを保持するテーブルを設計したためであることは明らかです。 次に、そのテーブルにクラスター化インデックスを作成しますが、テスト環境ではcreate indexコマンドが1時間実行されており、まだ実行されていません。顧客サイトは24時間年中無休で稼働する作業場であり、インデックスを作成している間は1時間のダウンタイムは許されません。 インデックスを作成するためのブルートフォースの少ない方法で、ジョブをすばやく終了するか、ビジー状態のときにサーバーのパフォーマンスを完全に低下させないスマートな方法で実行しますか? SQL Server Enterprise Editionを使用しています。

3
完全バックアップ中にトランザクションログのバックアップを停止する必要がありますか?
異なる間隔で実行するようにスケジュールされた2つのSQLエージェントジョブがあります。最初のジョブは、1日に1回完全バックアップを実行します。2番目のジョブは、15分ごとにトランザクションログのバックアップを実行します。 データベースの成長に伴い、完全バックアップは当初の計画よりも時間がかかります(圧縮しても)。そして、ログから、トランザクションログのバックアップが同時に実行されていることに気付きました。 完全バックアップの実行中に実行されないように、トランザクションログバックアップのスケジュールを変更する必要がありますか?それは重要ですか?

5
この明示的なキャストがリンクサーバーでのみ問題を引き起こすのはなぜですか?
オリジンサーバーのビューを介してリンクサーバーからデータをクエリしています。ビューは、次のような標準化された列のカップルを含める必要がありCreated、ModifiedかつDeleted、この場合には、ソース・サーバー上の表は、任意の適切な情報を持っていません。したがって、列はそれぞれの型に明示的にキャストされます。ビューを更新し、列を NULL AS Modified に CAST(NULL as DateTime) as Modified ただし、この更新の実行後、ビューは次のエラーメッセージをトリガーします。 メッセージ7341、レベル16、状態2、行3列 "(ユーザー生成式).Expr1002"の現在の行値をOLE DBプロバイダー "SQLNCLI11"からリンクサーバー ""に取得できません。 この「明示的なキャスト」の変更は、通常、問題なくオリジンサーバー全体で行われましたが、問題は関連するサーバーのバージョンに関連している可能性があります。このキャストを実際に適用する必要はありませんが、よりクリーンに感じます。今、私はなぜこれが起こっているのか興味があります。 サーバーバージョン(オリジン): Microsoft SQL Server 2012-11.0.5058.0(X64)2014年5月14日18:34:29 Copyright(c)Microsoft Corporation Enterprise Edition(64-bit)on Windows NT 6.1(Build 7601:Service Pack 1)(ハイパーバイザー) サーバーバージョン(リンク): Microsoft SQL Server 2008 R2(SP1)-10.50.2500.0(X64)2011年6月17日00:54:03 Copyright(c)Microsoft Corporation Enterprise Edition(64-bit)on Windows NT 6.1(Build 7601:Service Pack 1)(ハイパーバイザー) 編集 問題の列をすべて掲載しないことでミスを犯したことに気付いたので、重要な詳細を省いたことを謝罪する必要があります。これに気づかなかったのは早く分かりません。しかし、疑問はまだ残っています。 …

5
SQL ServerがWindowsの起動時に起動しないが、手動で起動する
SQL Serverインスタンスの(SQL Server 2008 R2 Express)サービスのスタートアップの種類=自動です。過去2、3回コンピューターを再起動しましたが、サービスは単独で開始できませんでしたが、手動でサービスを開始すると正常に開始します。 イベントビューアは、接続タイムアウトのためにサービスが開始できないことを示しています。このタイムアウトに関して2つのエントリがあります。 エントリー1 SQL Server(SQLEXPRESS)サービスの接続を待機中にタイムアウト(30000ミリ秒)に達しました。 エントリー2 次のエラーが原因で、SQL Server(SQLEXPRESS)サービスを開始できませんでした:サービスが開始要求または制御要求にタイムリーに応答しませんでした。 ERRORLOGファイルを確認しましたが、これらのイベントビューアーエントリの時間の周りにエラーは記録されていません。 この問題の原因に関するアイデアや、さらに調査する方法はありますか?

1
データベースで最近実行されたすべてのクエリを見つける
[私は初心者レベルのT-SQLプログラマーです] [..できれば、適切なスタック交換サイトにいます] 私が実行したすべてのクエリのリストを取得したいと思います(少なくとも、朝から今日実行したクエリ)。クエリの実行時間に関するレポートを作成する必要があります。 オンライン検索で役に立つ情報はあまり得られませんでした。私がオンラインで見つけた非常に近いと思われるクエリは SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query] FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest ORDER BY deqs.last_execution_time DESC このクエリはいくつかの奇妙な結果を返しました(そのほとんどは多数のsprocでした)。さらに、これらの結果はすべて、今日の午後から実行されたクエリを示しています(午前中にクエリが必要です)。 以前の質問には何も見つかりませんでした(同様の質問が既に質問されている場合は、それを指摘してください)。 SQLプロファイラーに関するいくつかの提案を見ましたが、プロファイラーは既にトレースを開始している場合にのみ役立つと思います(間違っている場合は修正してください)。 誰かが私に朝からデータベースで実行されたすべてのクエリのリストを取得する方法を提案できますか(クエリ実行時間を含む)。 [クエリを実行したユーザーのユーザー名も何らかの方法で取得できると便利です(要件ではありません)]

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