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

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

4
XACT_ABORTがONに設定されている場合、どのような場合にCATCHブロック内からトランザクションをコミットできますか?
とについてMSDNを読んTRY...CATCHでいXACT_STATEます。 構造XACT_STATEのCATCHブロックで使用してTRY…CATCHトランザクションをコミットするかロールバックするかを決定する次の例があります。 USE AdventureWorks2012; GO -- SET XACT_ABORT ON will render the transaction uncommittable -- when the constraint violation occurs. SET XACT_ABORT ON; BEGIN TRY BEGIN TRANSACTION; -- A FOREIGN KEY constraint exists on this table. This -- statement will generate a constraint violation error. DELETE FROM Production.Product WHERE ProductID …

2
コンピューター名にハイフンが含まれていてT-SQLエラーが発生する
私は開発者であり、DBAではありません(これは、私が恐れている)自宅のコンピューター(という名前のJohn-PC)でSQL Server 2014 Expressを使用してレポートビルダー3.0を実行しようとしていますが、レポートを実行できません。 私は偶然のユーザー/ログインコンボを作成user = John-PCしてlogin = John-PC\John。でエントリを削除しようとすると: Drop Login John-PC\John エラーが発生します: 「-」付近の構文が正しくありません。 問題は私のコンピューター名のハイフンだと思います。 構文エラーを回避する方法はありますか? ユーザーを変更またはドロップする別の方法はありますか(ドロップしようとしましsys.server_principalsたが、アドホックな変更ができないというエラーを受け取りました)。 どういうわけか、レポートビルダーに新しいユーザー/ログイン名を付けることはできますか? 上記のいずれでもない場合、コンピューターの名前を変更するJohn_PCことはできますか?

2
これら2つのSQL Serverロールバックはどのように異なりますか?
SQL Server 2008 R2では、これら2つのロールバックの違いは次のとおりです。 ALTER数分間ステートメントを実行し、「実行のキャンセル」を押します。完全にロールバックするには数分かかります。 同じALTERステートメントを実行しますが、これはLDFファイルが正常に完了するのに十分な大きさでないことを確認します。いったんLDF制限が満たされるとNO「自動拡張」が許されない、クエリの実行はすぐに停止します(またはロールバックが起こる)、このエラーメッセージが表示されて: The statement has been terminated. Msg 9002, Level 17, State 4, Line 1 The transaction log for database 'SampleDB' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases 次の点で、これら2つの違いは何ですか? 2番目の「ロールバック」が瞬時に行われるのはなぜですか?ロールバックと呼べるかどうかは完全にはわかりません。私の推測では、トランザクションログは実行の進行とともに書き込まれ、タスクを完全に完了するための十分なスペースがないことがわかると、コミットせずに「終了」メッセージで停止します。 最初のロールバックに非常に長い時間がかかるとどうなりますか(ロールバックはシングルスレッドです)。 2.1。SQL Serverは戻って、LDFファイルに作成されたエントリを元に戻しますか? 2.2。LDFファイルサイズは(からのロールバックの終わりに小さくなりますDBCC …

2
Setベースのアルゴリズム/ UDFを実装する方法
800K行38列のテーブルのすべての行に対して実行する必要があるアルゴリズムがあります。このアルゴリズムはVBAに実装されており、一部の列の値を使用して他の列を操作する一連の計算を実行します。 現在、Excel(ADO)を使用してSQLをクエリし、クライアント側カーソルでVBAを使用して、すべての行をループでアルゴリズムを適用しています。動作しますが、実行に7時間かかります。 VBAコードは非常に複雑であるため、T-SQLに再コーディングするのは非常に手間がかかります。 可能なルートとしてのCLR統合とUDFについて読みました。また、データベースに近づけるためにSSISスクリプトタスクにVBAコードを配置することも考えましたが、このタイプのパフォーマンスの問題に対する専門的な方法論が存在することは確かです。 理想的には、並列セットベースの方法で、できるだけ多くの行(すべて?)に対してアルゴリズムを実行できるようになります。 この種の問題で最高のパフォーマンスを得る方法に大きく依存するヘルプ。 -編集 コメントをありがとう、私はMS SQL 2014 Enterpriseを使用しています。詳細は次のとおりです。 このアルゴリズムは、時系列データの特性パターンを見つけます。アルゴリズム内の関数は、多項式の平滑化、ウィンドウ処理を実行し、入力基準に基づいて関心領域を見つけ、多数の値といくつかのブール結果を返します。 私の質問は、実際のアルゴリズムよりも方法論に関するものです。一度に多くの行で並列計算を実現したい場合、私のオプションは何ですか。 多くの作業が可能ですが、T-SQLへの再コード化が推奨されますが、アルゴリズム開発者はVBAで作業し、頻繁に変更されるため、T-SQLバージョンとの同期を保ち、すべてを再検証する必要があります変化する。 T-SQLはセットベースの関数を実装する唯一の方法ですか?

3
バックアップ内部-SQL Serverのロックとパフォーマンスオーバーヘッドの観点から、バックアップジョブの実行中はどうなりますか?
MySQLの場合、データベースはSQLステートメントでテーブルごとにバックアップされることを知っています。これによりロックが発生し、バックアップ中に列を更新すると、整合性の問題が発生する可能性があります。 私の理解では、これはMicrosoft SQL Serverには適用されませんが、SQL Serverはこれをどのように処理しますか?DBの一貫性を保つために内部フリーズがありますか? また、バックアップはシングルスレッドであり、単一のファイルにバックアップすることを想定して、1つのコアのみを使用することを聞きました。また、マルチコアマシン、たとえば16コア、または少なくとも1つよりもかなり大きな数のマシンがあるとします。 私の個人的な経験から、バックアップを取る際にロックやオーバーヘッドの問題はありませんでしたが、私の経験は限られています。そのため、サーバープロパティで常にバックアップの圧縮を有効にすることをお勧めします。 では、バックアップジョブの実行中はどうなりますか?また、バージョンごとに大きな違いはありますか?たとえば、2008、2012、2014(ライセンスではありません)。

2
sp_send_dbmailストアドプロシージャは添付ファイル付きで送信します
私は、顧客の1人に小さな月次レポートを送信するという任務を負っています。レポートは以前にインスタンスで手動で実行され、出力はスプレッドシートにコピーされ、添付ファイルとして顧客に送信されていました。 より永続的なソリューションを探しているのでsp_send_dbmail、クエリを実行して添付ファイルとして送信するためにストアドプロシージャを使用する予定です。 メッセージのフォーマット以外はすべて機能します。最初に、出力をCSVファイルとして添付しようとしました@query_result_seperator = ','が、結果はどこにでもありました! レポートを正常に実行すると、SQLで出力が正常に表示されます。ただし、CSVとして送信したり、メッセージ本文で送信したりすることはできません。 出力をHTMLとしてエクスポートし、添付ファイルまたはXMLとして送信する方がうまくいくと思いますが、これを行う方法がわかりません。 誰か提案はありますか? 前もって感謝します!

1
高可用性でのSQL Server 2012データベースの復元
別のインスタンスの別のデータベースと同期された、常時オンの高可用性モードのデータベースがあります。.bakを使用してファイルからプライマリデータベースに復元するにはどうすればよいT-SQLですか? 私は高可用性に不慣れであり、復元を行う前にデータベースを高可用性から削除してから再び高可用性に戻す必要があるとアドバイスされましたが、よくわかりません。 プライマリAlwaysOnがまだ有効であり、セカンダリと自動的に同期する間に、プライマリに直接復元できることを望んでいます。

6
トランザクションログは縮小せず、DBは複製していると考えます
Kaspersky Security Centerを実行しているSQL Server 2008 R2 Expressデータベースがあり、どのような状況でインストールが行われたのかわかりませんが、データベースはレプリケートされており、トランザクションログからスペースを解放しないと考えているようです。例えば: USE master; SELECT name, log_reuse_wait, log_reuse_wait_desc, is_cdc_enabled FROM sys.databases WHERE name = 'KAV'; SELECT DATABASEPROPERTYEX('KAV', 'IsPublished'); 戻り値: name | log_reuse_wait | log_reuse_wait_desc | is_cdc_enabled -----|----------------|---------------------|--------------- KAV | 6 | REPLICATION | 0 DATABASEPROPERTYEX('KAV', 'IsPublished') ---------------------------------------- 0 [not published] またReplication、SSMS のセクションには何もリストされていません。 これまでに、Googleの結果から収集したいくつかのステートメントを試しました。 USE KAV; …


6
PowerShellを使用してSQL Serverの実行中のすべてのインスタンスを検出する最も効果的な方法は何ですか?
私は、ドメイン内で実行されているSQL Serverのすべてのインスタンスを検出するタスクを担当しました。いくつかの場合、サーバーごとに複数のインスタンスがあります。これらのインスタンスを見つける2つの異なるPowerShellメソッドを見てきましたが、いずれもすべてのインスタンスを見つけるようには見えません。 1)WMIを使用する $srvr = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer $computerName $instances = $srvr | ForEach-Object {$_.ServerInstances} | Select @{Name="fullName";Expression={$computerName +"\"+ $_.Name}} return $instances 2)リモートレジストリを使用する(Get-SQLInstance 1と同様) 私が直面している最大の問題は、私が知っているすべてのサーバーがSQL Server WMIプロバイダーで実行されておらず、すべてがリモートレジストリを許可していないことです。3番目の方法はありますか?リモートデスクトップを使用してすべてのサーバーにアクセスできますが、約30台のマシンを見ているため、可能であれば手動の手順を避けたいと思います。これは、SQL Server 2008以降でのみ機能する必要があり、他のSQL Serverサービス(SSIS / SSAS / SSRS)について知っておくといいのですが、主な焦点はSQL Server自体にあります。

1
SQL Serverでの実行計画の作成はどの程度決定的ですか?
次の定数がある場合: 同じ構造(テーブル、インデックスなど)を持つ同じデータベース 同じデータ 同じSQL Serverとハードウェア構成 同じ統計 クライアントの同じSETオプション 同じSQL Serverバージョン 同じトレースフラグ これらの定数を指定すると、SQL Serverは特定のクエリに対して常に同じプランを生成しますか? そうでない場合、他の考慮事項はありますか?考慮すべき非決定性の要素もありますか?

3
ユーザーをコピーのみのバックアップに制限する
実稼働環境にログ配布を展開したいと考えています。これは、開発環境を更新するためにバックアップを取る人々によって中断される可能性があるバックアップチェーンを管理する必要があることを意味します。障害が発生し、ログバックアップを使用して特定の時点に復元したい場合は、開発者が作成したバックアップも必要になります。 開発者がコピーのみのバックアップのみを使用している場合、これは起こりません。だから私の質問は次のとおりです。コピーのみのバックアップのみを実行できるようにユーザーを制限する方法はありますか?

5
SQL Serverテーブルの変更を検出する
私のアプリケーションでは、SQL Server 2012で実行されているDBを使用して、高価なクエリを定期的に実行し、後でアプリケーションがクエリできるテーブルに結果を書き込むジョブ(スケジュールされたタスク)があります。 理想的には、クエリが最後に実行されてから何かが変更された場合にのみ、その高価なクエリを実行したいと思います。ソーステーブルは非常に大きいため、すべての候補列などのチェックサムを選択することはできません。 私は次のアイデアを持っています: ソーステーブルで何かを変更するたびに、最後に変更されたタイムスタンプ、「クエリである必要があります」フラグ、またはこのようなものを追跡テーブルに明示的に書き込みます。 トリガーを使用して同じことを行います。 ただし、書き込みを明示的に追跡せずに、テーブルの変更を簡単に検出する方法があるかどうかを知りたいです。たとえば、ROWVERSIONテーブルなどの「現在」を取得できますか?

3
高いCXPACKETおよびLATCH_EX待機
私が取り組んでいるデータ処理システムのパフォーマンスに問題があります。大量のCXPACKETおよびLATCH_EX待機イベントを示す1時間のperoidから待機統計を収集しました。 システムは3つの処理SQL Serverで構成され、多数の数値計算と計算を実行してから、中央のクラスターサーバーにデータを供給します。処理サーバーでは、一度に最大6つのジョブを実行できます。これらの待機統計は、ボットネックを引き起こしていると思われる中央クラスターに関するものです。中央クラスタサーバーには、16コアと64GB RAMがあります。MAXDOPは0に設定されます。 CXPACKETは実行中の複数の並列クエリからのものであると思いますが、LATCH_EX待機イベントが何を示しているのかわかりません。私が読んだことから、これは非バッファ待機かもしれませんか? これらの種類の待機統計の原因が何であるか、このパフォーマンス問題の根本原因を調査するために私が取るべき措置は何ですか? 上位のクエリ結果は合計待機統計であり、下位のクエリ結果は1時間の統計です。

1
sys.partition.rows列はどれくらい正確ですか?
システムビューにsys.partitionsは、特定のパーティション内の行の総数である「行」列があります。パーティション化されていない(または見方によってはパーティションが1つしかない)テーブルの場合、この列はテーブル内の行数を示します。 私はこの列がどれほど正確か、そしての代わりにそれを使用できるかどうかに興味がありSELECT COUNT(1) FROM TableNameます。テーブルを作成して数千行を追加し、数百を削除し、さらに数千を追加するなど、いくつかの実験を行いましたが、カウントは常に無効になっています。ただし、約700ミリ行と複数のインデックスを持つ1つのテーブルがあります。sys.partitionsクラスター化インデックスの行は再び無効になりますが、他のインデックスにはわずかな変動(+ -20k)が見られます。 この行がどのように計算され、表示されるのと同じくらい正確かどうかは誰にもわかりますか?

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