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

Microsoft SQL Serverのすべてのバージョン(MySQL以外)。sql-server-2016のようなバージョン固有のタグも追加してください。これは、質問に関連することが多いためです。

6
予測されるデータベースの増加を見積もる
私は最近、DBA研修生としてSQL Server 2008を使い始めました。データベースのサイズを計算する必要がありますが、最近の数か月間のデータベースの成長と、今後12か月の予測される成長も予測します。 sp_spaceusedステートメントを使用して実際のサイズを計算できますが、他のすべてをどのように計算しますか?

5
テーブルのスキーマを指定する必要のないクエリ
SQL Server 2000から2008データベースに一連のテーブルをインポートしました。インポートされたすべてのテーブルには、ユーザー名のプレフィックスが付いていますerpadmin.tablename。 テーブルのプロパティでは、dbスキーマとして「erpadmin」がリストされています。クエリを作成するときは、「erpadmin」を含める必要があります。混乱を招くすべてのテーブル名の前。 現在の結果: select * from erpadmin.tablename 望ましい結果: select * from tablename

3
SQL Server 2012を構成してユーザーアカウントのファイルを復元および表示できるようにするにはどうすればよいですか?
コンピューターでSQL Server 2012インスタンスをサービスとして実行しており、サービスページによると、アカウント "NT Service \ MSSQLSERVER" としてログオンしています。ただし、そのアカウント名は、コンピューターの管理画面の[ローカルユーザーとグループ]領域を含め、どこにも表示されません。これは、以下のリンクにあるように、それはユーザーアカウントではなく、そのボックスにあるサービス名であるためです。 Microsoftは「アカウント」というラベルを付けてくれました。この時点で、私は多くの人々が混乱しているのを見ることができます。 私が達成しようとしているタスクは、SSMSダイアログ「Locate Backup File」を使用してファイルを復元することです。このダイアログは、「リモート」ジョブを実行しており、 SQLサーバーのセキュリティコンテキストは、エンドユーザーの混乱のもう1つの豊富な原因であり、この質問が解決に役立つことを願っています。 これまでのところ、自分のフォルダーの1つにあるバックアップ.mdf / .bakファイルを復元する場合は、そのフォルダーをEveryoneから読み取り可能に設定する必要があります。そうしないと、SQL Serverの "Locate Backup"でそこにアクセスできませんファイル」ウィンドウ。このアイデアは、ユーザーとは異なるユーザーアカウントと権限を持つサービスと対話するGUIを使用していることを発見しました。Microsoftの誰もあなたに明確に説明することすらしませんでした。Windowsシステム管理で長年の経験があっても、非常に混乱しています。 。 新しいSQLサーバーインスタンスをインストールした後、セキュリティをどのように設定するかを説明するSQL Serverのドキュメントページを見逃したことを願っています。 このようなフォーラムの投稿には、Microsoftのスタッフも「これは複雑です」と言っており、デナリでは「再び変更された」と述べています。SQL Server 2012でこれがどのように機能するのか、また、ユーザーに属するファイルを読み取るためのアクセス許可をSQLデータベースエンジンのセキュリティに追加する方法を教えてくださいSID。

3
SQL Serverエンドポイントのセキュリティ設定を検査するにはどうすればよいですか?
現在、SQL Server開発スタッフ用のTEST環境を作成しています。 本番環境には3つのSQL Serverがあり、SQL01にミラーリングされたいくつかのデータベースが含まれていますSQL02。 SQL03「自動フェイルオーバーによる高い安全性」または同期構成での証人として機能します。 VMWare P2Vを使用して、3台すべてのマシンを個別のハードウェアに仮想化し、マシンのSIDを再構成し、これらの新しいマシンから本番サーバーのIPアドレスをブラックホール化しました。 最初はプロダクション監視マシンをブラックホール化するのを忘れていたので、TESTマシン上のデータベースはまだマシンを監視SQL03として使用していました。この問題に気付いて、私はTESTのデータベースを再構成して、新しく仮想化されたTESTの目撃者を指すようにしましたTEST03。 新しいミラーリング監視を使用するようにデータベースを再構成するには、プライマリサーバーで次のコマンドを入力しましたTEST01。 ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022'; 予期しない応答がありました: The ALTER DATABASE command could not be sent to the remote server instance 'TCP://TEST03.domain.inet:5022'. The database mirroring configuration was not changed. Verify that the server is connected, and try again. 構成は運用マシンで機能し、テストマシンではまったく変更されていないため、このエラーメッセージに非常に困惑しました。 これを機能させるためLOGINに、テストの目撃者を作成する必要がありました。 CREATE …


2
Microsoft SQL Server 2008 R2バックアップエラー
私は外付けディスクに簡単なバックアップをしようとして、このエラーが出ます: サーバー 'Server-name'のバックアップが失敗しました 追加情報: System.Data.SqlClient.SqlError:「C:\ Program Files \ Microsoft SQL ..」にロードされたメディアは、1つのメディアファミリをサポートするようにフォーマットされていますが、バックアップデバイスの仕様によれば、2つのメディアファミリが必要です。(Microsoft.SqlServer.Smo) ` バックアップタイプ:フル このエラーが発生するのはなぜC:\Program Files..ですか。また、宛先ファイルが外部デバイスである場合にメッセージが指しているのはなぜですか。


3
動的SQLバックアップコマンドにtry / catchを使用するときにエラーの詳細をログに記録する方法
try catchと動的SQLを使用するストアドプロシージャ内でバックアップコマンドを発行する場合、バックアップコマンドを直接実行する場合と比較すると、エラーメッセージは非常に一般的です。 SP内で試行/キャッチ: begin try execute sp_executesql @sql; -- a backup command end try begin catch print ERROR_MESSAGE(); -- save to log, etc. end catch 結果 50000:usp_Backup:117:BACKUP DATABASEが異常終了しています。 rawコマンドを発行するwheareas: backup DATABASE someDb to disk... より詳細な結果: ルックアップエラー-SQL Serverデータベースエラー:ファイル "H:\ FolderName \ Filename.bak:" 112で回復不可能なI / Oエラーが発生しました(ディスクに十分なスペースがありません。) これらの詳細をストアドプロシージャ内の変数にキャッチする方法はありますか(ログを記録し、呼び出し元にパスバックし、ロジックを再試行します)?詳細はメッセージチャネルで送信されているようですが、SP内で利用できるようにしたいと思います。

3
MS SQL Serverのバージンクエリのパフォーマンスを向上させる方法は?
ASP.NET Webサイトで、独自の独立したデータキャッシュを実行し、データが長期間変化しないため、同じクエリでSQL Serverに2回クエリする必要がありません。そのSQL Serverへの初回(バージン)クエリのパフォーマンスを改善する必要があります。一部のクエリは、SQL Serverが使用する可能性のある大量のデータを処理しますtempdb。一時テーブル変数や一時テーブルは使用しないので、SQL Serverはtempdb必要なときにいつでもそれ自体を使用することにしました。 私のデータベースサイズは16Gbですが、サーバーマシンで32Gbの物理RAMを使用できます。 MS SQL Serverのキャッシュ戦略は、同じデータを再度ロードする必要がある場合に、同様のクエリのパフォーマンスを向上させるために、RAMにデータを保持しようとすることを理解しています。さらに、tempdbの代わりに使用可能なRAMを使用して、ディスクアクセスを引き起こさずにパフォーマンスを高速化しようとします。 tempdb SQL Serverに何かを格納する必要があるクエリが来て、十分なRAMが利用できない場合、SQL Serverには2つの選択肢があると思います。 1)キャッシュされたデータをアンロードし、tempdbの代わりにスペアRAMを使用してディスクの書き込みを回避する 2)今後のクエリのためにキャッシュされたデータを保持し、tempdbの使用を開始します。これにより、ディスクへの書き込みが遅くなります。 この状況でSQL Serverがどのような選択をするかはわかりませんが、最初の(バージン)クエリのパフォーマンスのみを考慮し、同じクエリをSQL Serverに再度送信することはないため、選択#1をしたいと思います。 (私は同様のクエリを送信する可能性があります)。 このシナリオのSQL Serverキャッシュ戦略は何ですか? 新しいクエリのtempdbの回避と2回目のクエリの速度の間で、RAMの使用量をどのようにバランスさせますか? SQL Serverを選択#1するように構成することは可能ですか?はいの場合、どのように? 他にどのようにしてすべてのバージンSQLクエリのパフォーマンスを向上させることができますか? SQL Serverのキャッシュ戦略がわからないので、データベースをRAMディスクに配置します。これにより、SQL Serverが常に#1を選択する場合でも、キャッシュされていないデータを高速で読み込むことができます。SQL Serverが選択肢#2を選択し続けると、SQL Serverが利用可能なRAMを少なくしてより多くのtempdbを使用し始める可能性があります(RAMディスクに16Gbを使用した後は16Gbしか残りません)tempdb。 SQL 2008 R2のソリューションに興味がありますが、おそらくSQL 2008、SQL 2005でも同じで、SQL 2000かもしれません。 明確化: そのボックスで実行されている他のアプリケーションはなく、SQL Server専用です。ウェブサイトは別のボックスで実行されます。 Windows Server 2008 R2 Enterprise 64ビット上のSQL Server 2008 R2 Standard …

2
SQL Serverのキャッシュからテーブルをクリアするにはどうすればよいですか?
キャッシュすべきではないテーブルがデータベースにいくつかあります。 SQL Serverにテーブルのページをキャッシュしないように指示する方法、またはキャッシュから単一のテーブルをフラッシュする方法 すべてのキャッシュをフラッシュすることはオプションではありません。 SQL Server 2008とSQL Server 2008 R2を使用しています。

4
SQL Serverのパーティション分割-パーティションキーに何を使用するか
私はSQL Serverのパーティション分割を扱ったことがありませんが、現在、ボリュームがおそらくそれを保証するデータベースの設計に直面しています。システムはクーポン用です。クーポンは定期的に発行され、通常は6週間ごとに発行されますが、特別イベントなどの臨時の発行も行われます。1,500万人の顧客がおり、各発行イベントに対して、すべての顧客が6種類の異なるクーポンタイプを受け取り、合計9000万のクーポンインスタンスを提供します。通常、クーポンの有効期間は6週間ですが、クーポンインスタンスの償還データを追跡して6か月間維持する必要があります。無効なクーポンの引き換えリクエストは、POSによって検証されるため、データベースに到達しません。 6か月間で、クーポンインスタンステーブルには最大3億6,000万行、リデンプションテーブルには最大7,200万行(最大20%の償還率を想定)を格納する必要があります。これらの数値は単一のパーティションには大きすぎると感じますか? 私の質問は-パーティションキーとして何を使うのですか?明らかな候補の1つは、発行イベントによるもので、約6つのパーティションを提供します。しかし、それでも、パーティションサイズが大きすぎて最適なパフォーマンスを実現できないと思いますか?たとえば、発行イベント+カスタマーIDの最後の桁など、2つのキーでパーティション化することはできますか?したがって、ロジックは次のようになります。 If issuance event = 1 and last digit of customer id < 5 then Store in partition 1 Else if issuance event = 1 and last digit of customer id >4 then Store in partition 2 Else if issuance event =2 and last digit of customer …

2
SELECTでパーティション化された列ストアのデッドロックを防ぐ方法
SQL Server 2016に3つのクラスター化列ストアインデックス(CCI)テーブルがあります。これらのCCIはすべて、テナントIDに基づいて同じパーティションスキームにあります。最近、一貫性のない方法で、結合からこれらのテーブルへの単純な選択ステートメントでデッドロックが発生しています。デッドロックするクエリの例: SELECT TOP 33 r.tenantid FROM Table_r r INNER JOIN Table_cm cm ON r.MyKey=cm.MyKey INNER JOIN Table_pe pe ON r.MyKey=pe.MyKey WHERE r.TenantId = 69 AND pe.TenantId = 69 AND cm.TenantId = 69 エラーメッセージ: トランザクション(プロセスID 56)は、別のプロセスで汎用の待機可能なオブジェクトリソースでデッドロックされ、デッドロックの犠牲者として選択されました。トランザクションを再実行します。 手がかり: クエリがCCI以外の別のインデックスを使用する場合、デッドロックは発生しません。 3つのテナントフィルターのうち2つを削除しても、デッドロックしません。 トップ32以下を選択しても、デッドロックは発生しません。 OPTION(MAXDOP 1)を追加しても、デッドロックは発生しません。 スクランブルされたPRODレプリカ、PROD読み取り専用セカンダリ、およびPROD自体でこれを再現できます。 この動作をDEVまたはINTで再現できません。 3つのテーブル結合すべてにWITH(NOLOCK)を追加すると、依然としてデッドロックが発生します クエリ自体がデッドロックします。他にアクティブなプロセスがない場合はデッドロックします。 並列処理のないクエリプランはデッドロックしない デッドロックxmlはこちら PRODバージョン: …

1
スパース列、CPU時間、フィルターされたインデックス
スパース スパース列でいくつかのテストを行うとき、あなたがそうであるように、直接的な原因を知りたいパフォーマンスの低下がありました。 DDL 2つの同一のテーブルを作成しました。1つはスパース列が4つあり、もう1つはスパース列がないものです。 --Non Sparse columns table & NC index CREATE TABLE dbo.nonsparse( ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL, charval char(20) NULL, varcharval varchar(20) NULL, intval int NULL, bigintval bigint NULL ); CREATE INDEX IX_Nonsparse_intval_varcharval ON dbo.nonsparse(intval,varcharval) INCLUDE(bigintval,charval); -- sparse columns table & NC index CREATE TABLE dbo.sparse( …

1
他のデータベースのアカウントなしで、他のデータベースのテーブルに基づいてビューにアクセスする
database2のテーブルに基づいて、database1にビューを作成しました。SELECTdatabase1にのみアクセスできるユーザーに許可を与えました。データベース2にアカウントがないため、ユーザーはこのビューを機能させることができません。この問題を解決するにはどうすればよいですか?database2にアカウントを作成したくありません。

1
リンクサーバーに対するOPENQUERYの8000文字の制限
OPENQUERYSSRS / SQL Server 2014で実行しようとしているクエリがありますが、次のエラーが発生し続けます。 [...]で始まる文字列が長すぎます。最大長は8000です。 この制限を回避する方法はありますか? 参考までに、リンクされたMySQLサーバーを介してSSRSからクエリを実行しようとしています。

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