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

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

1
SQL ServerのSGAM&GAM&IAM&PFSに関するいくつかの質問
SQL Serverの内部構造についていくつか質問があります。 データベースにテーブルがあるとしましょう。 SGAMおよびGAMページは、単一のGAM間隔(〜4GB)内で共有エクステントと均一エクステントを追跡し、ページ/エクステントを割り当てるときに適切なタイプのエクステントを見つけるのに役立ちます(最初の8ページは、混合エクステントとそれらのページの位置から割り当てられます) IAMページへのレコーダー、およびその後のGAMエクステント(均一エクステント)からのこの情報は、次のチェーンIAMページに格納されます)。 たとえば、テーブルのページが割り当てられ、テーブルのサイズが8ページを超えていて、しばらくしてから行が削除され、再利用可能な領域が残ったとします。SQL Serverは、エクステントに空き領域があることをどのように認識しますか? ページには空き領域のサイズに関する情報がありますが、すべてのページをチェックするには時間がかかりすぎます。SGAM&GAMページのビットは、extendが割り当てられているか、いくつかの空きページがあることを除いて何も通知しません(ページ全体が部分的にではなく、空きです)。 ファイルヘッダー、SGAM、GAM、IAMページは、ファイル内の最初のページに含まれます。実際にそれらを指すデータ構造は何ですか?

1
大きなDBのログ配布-ログはどうですか?
現在、大容量のDB(約1.5 TB)のログ配布を設定しており、ログファイルに対して何ができるか疑問に思っています。 現状では、次の手順を実行したいと思います。 DBを完全復旧に変更する プライマリで完全バックアップ(5〜6時間)を取る フルバックアップをセカンダリに復元(NORECOVERYのまま) プライマリでDIFFバックアップを作成 DIFFバックアップをセカンダリに復元(まだNORECOVERYのまま) 「データベースはすでに初期化されています」を使用してログ配布を初期化します 問題は、フルバックアップを実行しているときに、ログファイルがバックアップの完了よりも早くいっぱいになることです。 ログファイルがいっぱいにならないようにするには、どのようなオプションが必要ですか?DIFFリストアはその期間中に行われたトランザクションをすべてカバーするため、フルバックアップ中に通常どおりにログバックアップを実行できますか?これまでにこのサイズのDBでこれを行ったことがありますか?それを簡単にするためのヒント/トリック?

1
データベースを切り替えずにユーザー/ログインを別のデータベースのロールに追加したい
私は「新しい」、データベース内の役割/ログイン持ってmynewdb役割を持つが"emailsender"。私はのプロファイルをスクリプト化しましたsp_send_dbmailが、ログインをDatabaseMailUserRoleinに追加するスクリプトを作成しようとしていますが、msdb円を描いて回っているようです。重要なのは、更新スクリプトをで実行したいことですmynewdb。私SSMSはこれを行うために使用できることを知っています。質問は: に切り替えずにT-SQL、mynewdbデータベースからのロールにユーザーを追加するスクリプトを作成するにはどうすればよいmsdbですか?

2
テキストと画像からvarchar(max)とvarbinary(max)への移行
いくつかのimageおよびtext列を含むSQL Serverデータベースがあり、それらを非推奨でない対応するvarbinary(max)とに移行することから発生する可能性のある潜在的な問題を調査していますvarchar(max)。 アプリケーションコードの変更は別として、私の主な関心事は、これに関連する潜在的な「問題」です。たとえば、古いデータ型ではサポートされているが、新しいデータ型ではサポートされていない機能はありますか? 新しい型は少なくとも古い型と同じくらい大きいので、切り捨てによるデータの損失は少なくとも問題にはならないようです。

3
SQL Server TDEの代替
透過的データ暗号化機能を含むSQL Server Enterprise Editionのコストが高いため、代替製品を探していますが、いくつかのオプションしか見つかりませんでした。 DbDefence NetLib暗号化 上記の製品のいずれかでの経験の詳細(パフォーマンスへの影響、使いやすさなど)を誰かが提供できますか? SQL Server TDEの他の選択肢はありますか? 注:現在SQL Server 2008 R2 Standard Editionを使用しています。

2
どちらを信頼しますか?
ベンダーとの長期にわたる問題のトラブルシューティングを行っています。彼らのソフトウェアはフリーズして、週に1〜2回作業を停止する傾向があり、私たちの操作に大きな混乱を引き起こしています。多くのGBのログとDBのバックアップを送信しても、原因を特定できませんでした。最近、彼らは問題が私たちのメンテナンスに関するものであり、おそらくソフトウェアに関するものではないことを示唆し始めています(問題が発生したときに長時間実行されているクエリ、CPU / RAM / IOプレッシャー、またはデッドロックさえないにもかかわらず)。特に彼らは私たちのインデックスが問題であると言っています。 彼らが使用するのにお気に入りのツールはDBCC showcontigですが、これはMSによって廃止されると主張しています。彼らは特にスキャン密度と範囲の断片化にこだわっています。言い訳を取り除くために、<90%のスキャン密度または> 10%の断片化でインデックスを再構築する積極的な夜間メンテナンスを行いました。これにより、スキャン密度トレインからそれらをある程度放棄しましたが、エクステントの断片化に固定されたままです。DBCC showcontigは、数時間前に再構築されたインデックスでも、高度な断片化を示します。以下は、「可能性のある問題」として指摘されたテーブルのdbcc_showcontigおよびsys.dm_db_index_physical_statsの結果です。 DBCC SHOWCONTIG スキャンしたページ................................:1222108 スキャンされた範囲..............................:152964 エクステントスイッチ..............................:180904 平均 エクステントごとのページ..................................:8.0 スキャン密度[ベストカウント:実際のカウント] .......:84.44%[152764:180905] 論理スキャンの断片化..................:3.24% エクステントスキャンの断片化...................:35.97% 平均 ページあたりの空きバイト..................................:692.5 平均 ページ密度(フル).....................:91.44% sys.dm_db_index_physical_stats index_type_desc alloc_unit_type_desc Avg_fragmentation_in_percent page_count CLUSTERED INDEX IN_ROW_DATA 3.236803129 1222070 NONCLUSTERED INDEX IN_ROW_DATA 0.680074642 48230 NONCLUSTERED INDEX IN_ROW_DATA 0.093237195 48264 NONCLUSTERED INDEX IN_ROW_DATA 0.03315856 48253 NONCLUSTERED …

3
誤ってデータベース名を変更する(SQL Server 2008)
それは私にはまだ起こりませんでした。しかし、私はこれについて考えていました。 トレーニング環境をいじくり回していて、誤ってデータベース名をクリックしてから、文字Aに触れました。 Enterキーを押したとしましょう。現在、データベースの名前はAですが、元の名前を覚えていません。CTRL + Zは機能しません。 このような場合、本番環境ではどうしますか? データベースがSINGLE USERとして設定されていないため、それが起こり得ないことはわかっています。しかし、それが起こった場合。何をすべきか?議論のために、それは現在誰も使用していないデータベースだとしましょう。

3
大量のレコードを短時間でデータベースに挿入する方法は?
最速の方法で、大量のレコード(500,000)を一度にデータベースに挿入する必要があります。一度に1,700件のレコードを挿入してみましたが20分かかりました!! とを使用SQL-SERVERしていC#ます。 次の表は高速挿入の手法には貢献しませんが、挿入する必要のあるフィールドの数について理解を深めるために、とにかくリンクすることにします(約500Kで複製します)。
8 sql-server  c# 

3
sp_MSForEachDBを使用してデータベースをループするときにIFステートメントがTempDBをスキップしない
[SQL Server 2012 SP2 EE] 次のスクリプトでtempdbに関するエラーが発生するのはなぜですか? exec sp_MSForEachDB ' IF ( (select database_id from sys.databases where name = ''?'') > 4) BEGIN ALTER AUTHORIZATION ON DATABASE::? TO [sa]; ALTER DATABASE [?] SET RECOVERY SIMPLE; END' ここに私が得るエラーがあります: Msg 5058, Level 16, State 1, Line 5 Option 'RECOVERY' cannot be set in …


1
SQL Serverのマージ行サイズオーバーフロー-「サイズの行を作成できません。」
データをマージしようとしているターゲットテーブルには、約660列があります。マージのコード: MERGE TBL_BM_HSD_SUBJECT_AN_1 AS targetTable USING ( SELECT * FROM TBL_BM_HSD_SUBJECT_AN_1_STAGING WHERE [ibi_bulk_id] in (20150520141627106) and id in(101659113) ) AS sourceTable ON (...) WHEN MATCHED AND ((targetTable.[sampletime] <= sourceTable.[sampletime])) THEN UPDATE SET ... WHEN NOT MATCHED THEN INSERT (...) VALUES (...) 初めてこれを実行したとき(つまり、テーブルが空のとき)は成功し、1行挿入しました。 同じデータセットを使用してこれを2回実行したときに、エラーが返されました。 許容最大行サイズ8060より大きいサイズ8410の行を作成できません。 すでに挿入されている同じ行を2回目にマージしようとしたときにエラーが発生したのはなぜですか。この行が最大行サイズを超えた場合、そもそも挿入できない可能性があります。 だから私は2つのことを試しました(そして成功しました!): マージステートメントから「WHEN NOT MATCHED」セクションを削除する マージしようとした同じ行で更新ステートメントを実行する …

2
プログラムでテーブルを結合するために必要なすべての結合を見つける
SourceTableとTargetTableを指定して、すべての結合が必要な文字列をプログラムで作成します。 要するに、私はこのような文字列を作成する方法を見つけようとしています: FROM SourceTable t JOIN IntermediateTable t1 on t1.keycolumn = t.keycolumn JOIN TargetTable t2 on t2.keycolumn = t1.keycolumn 特定のテーブルのすべての外部キーを返すクエリがありますが、これをすべて再帰的に実行して最適な結合パスを見つけ、文字列を作成しようとすると、制限が生じます。 SELECT p.name AS ParentTable ,pc.name AS ParentColumn ,r.name AS ChildTable ,rc.name AS ChildColumn FROM sys.foreign_key_columns fk JOIN sys.columns pc ON pc.object_id = fk.parent_object_id AND pc.column_id = fk.parent_column_id JOIN sys.columns rc …

3
IF EXISTSクエリでのCTEの使用
SQL Server 2012で次のようなことを行うことはできますか? IF EXISTS ( WITH DATA AS ( SELECT *, ROW_NUMBER() OVER(PARTITION BY column ORDER BY Column) AS rn FROM table ) SELECT * FROM DATA WHERE rn = 2 ) BEGIN ... END この構文を使用しようとすると、エラーが発生しました。これが不可能な場合、一時テーブルを使用することがこれを達成するための最良の方法でしょうか?
8 sql-server  cte 

3
値のいずれかがサブクエリ結果にあるかどうかを確認します
注文IDのリストを返す複雑なサブクエリがあります。これらの注文がある顧客のリストを取得する必要があります。問題は、顧客を注文に割り当てる方法が2つあることです(2つのフィールドのうちの1つ)。私はこのようなことをすることができます: select * from Customers where orderId in (select...) or secondaryOrderId in (select ...) 問題は、サブクエリが実行にかかる時間と画面スペースの両方で非常に大きいことです。いずれかのフィールドに目的の結果が含まれているかどうかを確認する方法はありますか?

3
BLOBのマージレプリケーション中の高tempdbディスクI / O
BLOB(タイプimage)を複製するためのマージパブリケーションがあり、私のデータサイズに対して非常に高いtempdbディスクI / Oを取得しました。パブリケーションはダウンロード専用であり、フィルターはありません。 高いディスクI / Oは同期によって引き起こされ(サブスクライバーが同期していない場合はすべて問題ありません)、サブスクライバーの数と強く相関しています。同期の間にパブリッシャーでデータが変更されていない場合でも発生します。 複製されたテーブルのサイズ:7MB(行の総数は約100) tempdb I / O:書き込み(ログおよびデータファイル)の場合、最大30 MB /秒 サブスクライバーの数:100をわずかに超え、それぞれが30分ごとに(ほぼ均等に)同期しています。 保存期間を14日に設定 パブリッシャーではSQL Server 2008を、サブスクライバーではSQL Server 2005-2008R2を使用します。すべてのサブスクライバーはWeb同期を使用します。 さらに、サブスクライバーでの同期には多くの時間がかかり、replmerg.log次のように複数回発生します。 DatabaseReconciler, 2015/04/21 12:13:40.348, 3604, 25088, S2, INFO: [WEBSYNC_PROTOCOL] Sending client ReconcilerPhase WebSyncReconcilerPhase_RegularDownload DatabaseReconciler, 2015/04/21 12:13:47.063, 3604, 25194, S2, INFO: [WEBSYNC_PROTOCOL] Received server ReconcilerPhase WebSyncReconcilerPhase_LastRegularDownload @stream_blob_columns効果なしで設定のオンとオフを試みた。 質問がある:それは加入者にこれらのブロブを送信するためにマージレプリケーションを使用することをお勧めしますか?tempdbの問題のない大量のデータを含む他のパブリケーション(BLOB列はありません)があります。それはSQL Serverの欠陥ですか、それとも不適切な設定ですか? パブリッシャーとディストリビューターは同じインスタンス、SQL Server …

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