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

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

4
Active Directoryに存在しないアカウントを削除するSQL Serverスクリプト
SQL Server 2000があり、間もなくSQL Server 2005に移行されます。ActiveDirectoryに存在しないWindows認証アカウントが何年も作成されているため、データベースコピーウィザードがこれらのアカウントを新しいサーバーに作成できません。 Active Directoryに存在しないアカウントを削除するスクリプトまたは自動化された方法はありますか? 編集:明確にするために、削除する必要があるログインはSQL Server 2000上にあり、このDROP LOGINコマンドはサポートされていません。 それとは別に、SQL Server 2000でログインを手動で削除することは(exec sp_droplogin 'loginname'おそらく)で行われますが、私の場合、「domain \ loginname」または「loginname」のどちらを使用しても、ログイン名が見つかりません 混乱を増すだけで、exec sp_revokelogin 'domain\loginname'動作しているように見えます。 編集2:最後に問題を解決しました。問題のあるログオンの多くはプログラムによってデータベースに追加され、ユーザーが接続できるという意味で機能していましたが、SQL Serverがドメインを予期していない場合、ユーザー名とNTログイン名はドメインプレフィックスのログオンが一致しませんでした。その逆。 これを解決するために、エラーになったチェックの1つを削除するようにsp_droploginプロシージャを変更しました。 SQL Server 2000で動作するので、自分の回答を受け入れます。

1
サーバークラッシュ後にレプリケーションを復元する方法
1つのSQL Server 2005インスタンスに2つのデータベースがあり、それらの間でトランザクションレプリケーションが行われていました(記事として3つのテーブル)。このサーバーは、パブリッシャーとディストリビューターの両方として機能しました。 次に、サーバーのRAIDに障害が発生しました。しかし.mdf、クラッシュする前に、ほぼすべてのファイルを切り離してコピーすることができました。 システムの復元後、SQL Serverを再インストールし、システムデータベース(master、model、msdb)を復元して、.mdfファイルを同じパスに配置しました。それで始まった。 レプリケーションで問題が発生しました。ローカルパブリケーションのフォルダは、空であったけれどもローカルサブスクリプション問題のサブスクリプションが含まれていたフォルダ。私が新しい出版物を追加しようとしたとき、私は得ました: 新しいパブリケーションウィザードで、パブリケーション名の取得中に1つ以上のエラーが発生しました。 Transact-SQLステートメントまたはバッチの実行中に例外が発生しました。(Microsoft.SqlServer.ConnectionInfo) 無効なオブジェクト名 'dbo.syspublications'。(Microsoft SQL Server、エラー:208) 左側のサブスクリプション(最終的にはなんとか管理できました)を削除して、サーバーでの公開と配布を無効にすることを試みることにしました。 SQL Serverは 'someserver'での公開と配布を無効にできませんでした。 無効なオブジェクト名 'dbo.syssubscriptions'。EXECUTEの後のトランザクション数は、COMMITまたはROLLBACK TRANSACTIONステートメントが欠落していることを示しています。以前のカウント= 0、現在のカウント=1。EXECUTE後のトランザクションカウントは、COMMITまたはROLLBACK TRANSACTIONステートメントがないことを示しています。以前のカウント= 0、現在のカウント=1。EXECUTE後のトランザクションカウントは、COMMITまたはROLLBACK TRANSACTIONステートメントがないことを示しています。以前のカウント= 0、現在のカウント=1。EXECUTE後のトランザクションカウントは、COMMITまたはROLLBACK TRANSACTIONステートメントがないことを示しています。以前のカウント= 0、現在のカウント=1。EXECUTE後のトランザクションカウントは、COMMITまたはROLLBACK TRANSACTIONステートメントがないことを示しています。以前のカウント= 0、現在のカウント=1。データベースコンテキストを「マスター」に変更しました。(Microsoft SQL Server、エラー:208) システムデータベースバックアップから一部の情報が復元されなかったようです(おそらくdistributionデータベースに何かが欠落している可能性があります)。 また、公開と配布を無効にできないという質問に答えるようにしました。しかし、成功しませんでした。私が作成しようとしたsyspublicationsの両方をmasterしてdistribution、何も変わっていません。 では、このサーバーでレプリケーションを機能させるにはどうすればよいですか? サーバー上で他のデータベースを公開しようとしましたが、うまくいきました。したがって、問題は公開されたデータベースに関連しているようです。どうすればそれをクリアして、その上に新しいパブリケーションを作成できますか? System Tables 問題のあるデータベースのサブフォルダは、データベースがパブリッシュされたときに作成されるレプリケーションテーブルを見逃します。 レプリケーションモニターでは、これらの古いサブスクリプションを確認できますが、レプリケーションフォルダーでは使用できません 。

2
SQL Serverは、再起動するまで時間が経過すると遅くなります
OLAP / OLTPのワークロードが混在するデータベースがあります。クエリは非常にアドホックであり、中間層アプリケーションサーバーで動的に作成されます。サーバーを起動すると、パフォーマンスは許容範囲内ですが、使用可能なすべてのメモリ(30GB)がなくなるまで、メモリ消費量はどんどん増えます。その後、システムはますます遅くなります。 のようなコマンドDbcc freeproccacheは効果がありません。 トランザクションは多くありませんselect * from sys.dm_tran_session_transactions(システムが正常な場合を超えない)。このリストが空の場合もあります。 の最初の結果dbcc memorystatusは VM Reserved 42136628 VM Committed 1487176 Locked Pages Allocated 24994048 Reserved Memory 1024 Reserved Memory In Use 0 SQL Serverを再起動すると、しばらくの間問題が解決します。 この動作の原因は何ですか?どうすればそれを回避できますか? 原因の実際の解決策が難しすぎる場合、DBMSを完全に再起動せずにSQL Serverにすべてのメモリを実際に解放させるコマンドはありますか? サーバーは専用のハードウェア(VMではなく)で実行されています。スケジュールされたジョブがいくつかありましたが、変更なしでしばらく無効にしました。同じサーバー上で実行されている他の中間層アプリケーションがありますが、それらは2GB以下のメモリ、ごくわずかなCPU、ほとんどI / Oを使用しません。そのようなアプリケーションはすべて変更せずに再起動しました。

1
データベースコピーウィザードの使用中にタイムアウトでエラーが発生しました
マイクロソフトは、SQL Server 2012データベースコピーウィザードがSQL Server 2000データベースをSQL Server 2012にコピーする最も最適な方法であると私に信じさせました。数時間苦労した後、いくつかの問題を乗り越えることができ、中規模のSQL Server 2000データベースからSQL Server 2012へ。 ただし、30GBデータベースの場合、ウィザードは次のエラーで常に失敗します。 メッセージ:データの転送中にエラーが発生しました。詳細については、内部の例外を参照してください。 StackTrace:Microsoft.SqlServer.Management.Smo.Transfer.TransferData() at Microsoft.SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.TransferDatabasesUsingSMOTransfer() InnerException->タイムアウト。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。 CREATE DATABASEが失敗しました。リストされている一部のファイル名を作成できませんでした。関連するエラーを確認してください。 StackTrace: System.Data.SqlClient.SqlConnection.OnError(SqlException exception、Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet bulkCopyHandler、TdsParserStateObject stateObj)で 私は再確認しましたが、ファイルパス、権限、またはディスク容量の問題ではありません。このCREATE DATABASEステップには2分ほどかかると思います。ウィザードは操作がタイムアウトしたと想定します。SQLを使用して同じファイルパスとファイルサイズで空のデータベースを手動で作成しましたが、うまくいきました。興味深いことに、1GBのデータベースコピーは同じエラーで失敗し、2回目の試行で成功しました。 助けてください。

3
未使用のデータベースをオフラインにすることによるパフォーマンス上の利点
私はいくつかの履歴を見る必要があるまで現在オフになっているVMで実行されるレガシーアプリケーション用のデータベースをいくつか持っています。これらのアプリケーションで使用される各データベースをオフラインに設定しましたが、知りたいと思います。 これらの未使用のデータベースを、オンラインに接続する代わりにオフライン状態にして、データベースに接続したりクエリを実行したりせずに未使用にすると、パフォーマンス上のメリットはありますか?

2
可用性グループは、スケジュールされたジョブとSSISパッケージでどのように機能しますか?
AlwaysOn可用性グループのデータベースを使用して2つのSQL Serverをセットアップしています。 また、データベースに対して実行するジョブを設定しています。フェイルオーバー中に、セカンダリサーバーでジョブが引き続き実行されるようにするにはどうすればよいですか?ジョブとSSISパッケージを両方のマシンにインストールし、セカンダリマシンで手動で無効にする必要がありますか?フェイルオーバーの場合は手動で有効にしますか?またはこれを処理するための組み込み機能はありますか?

3
SQL Serverストアドプロシージャの条件付きコンパイル
ショートバージョン: Visual Studio 2010のSQL Serverデータツールを使用して、SQL ServerデータプロジェクトのTSQLコードのチャンクを条件付きでコンパイルする方法はありますか? Visual Studio 2010でSQL Serverデータツールを使用して、実験的なSQL Server Expressデータベースで作業しています。物事がうまく機能する場合の最終的な宛先は、エンタープライズSQL Serverプラットフォームです。私の会社は多くのエンタープライズデータベースについても2008から2012への移行を進めているため、あるボックスに2008インスタンスと別のボックスに2012インスタンスの両方を持っています。 私が使用した他のプログラミング言語では、プリプロセッサディレクティブを使用すると、コードベースの一部を条件付きで簡単にコンパイルできます。これの最も一般的な用途は、制限されたセクションに異なるプラットフォームの異なるコードを含めること、またはリリースビルドからデバッグ出力コードを除外することです。 これらの両方は、私が取り組んでいるいくつかのストアプロシージャで非常に役立ちます。このようなものはありますか?sqlcmd展開中に変数を使用して特定の値を交換できることはわかっていますが、それを使用して後続のコードのチャンクを含めたり除外したりする方法を理解できません。 例: #IF $(DebugVersion) = 'True' -- A bunch of useful PRINTs and what not #ELSE SET NOCOUNT ON #ENDIF #IF $(SSVersion) = '2012' SET @pretty_date = FORMAT(@some_date, 'dddd, MMM dd, yyyy') #ELSE SET @pretty_date = …

2
SQL Server 2012のリンクサーバーでKerberos認証が機能しない
Windows Server 2012でSQL Server 2012を実行している2つのSQL Serverを使用してDEV / TEST環境をセットアップしています。WindowsServer 2008でSQL Server 2005から移行していますが、これはすでに正常に稼働しています。 SQL Server 2012では、Kerberos認証が機能していません。 各サーバーには独自のActive Directoryアカウントがあり、Active Directoryユーザーとコンピューターを通じて「サービスプリンシパル名の書き込み」および「サービスプリンシパル名の読み取り」権限が付与されています。SQL Server 2005サーバーに接続して実行する場合: SELECT net_transport, auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID; そうですか: net_transport auth_scheme TCP KERBEROS 新しいSQL Server 2012インスタンスに対して同じクエリを実行すると、次のようになります。 net_transport auth_scheme TCP NTLM を使用SetSPN -Q MSSQLSvc/*してサービスプリンシパル名をアクティブドメインにクエリすると、サーバーの名前以外はまったく同じ方法で、2005サーバーと2012サーバーの両方が一覧表示されます。 例えば: MSSQLSvc/SERVERa2005.domain.inet MSSQLSvc/SERVERa2005domain.inet:1433 MSSQLSvc/SERVERb2005.domain.inet MSSQLSvc/SERVERb2005domain.inet:1433 MSSQLSvc/SERVERa2012.domain.inet MSSQLSvc/SERVERa2012domain.inet:1433 …

1
48コアAMD Opteronボックスでの24の物理tempdbファイルによるTempDB競合
SQL Server 2005のインスタンスについて次の通知を受信しました。インスタンスのコアとtempdbファイルの比率は2:1で、tempdbファイルの総数は24ファイルです。競合は発生してはなりません。この競合の原因をどのように検出しますか?TempDBと他のすべてのデータベースは、10 GBイーサネット経由でSANストレージ上にあります。SANには、1つのRAID-60アレイに構成された46個の10k SASドライブがあります。このアレイは、複数のVMWareサーバーと1つまたは2つのExchangeサーバーで共有されます。 Idera SQL Diagnostic Managerからの通知: 11/8/2012 10:49:00 PM、MGSQL01のTempdb競合(ミリ秒)は重大です。 Tempdbラッチの競合がMGSQL01で検出されました。検出された合計待機時間は1782ミリ秒です。これは、tempdbの割り当てマップの競合によってパフォーマンスが影響を受けていることを示しています。これが定期的な問題である場合は、tempdbファイルの数、サイズ、およびIOサブシステムに関するベストプラクティスに従うことで軽減できる場合があります。 PFS待機時間:1782 ms GAM待機時間:0 ms SGAM待機時間:0 ms Tempdb競合(ミリ秒):tempdb割り当てマップ(GAM、SGAM、およびPFS)の現在の待機時間(ミリ秒単位)。このアラートは、SQL 2005以降を実行しているインスタンスでのみ発生する可能性があります。

3
SSMSのユーザーインターフェイス言語を変更するにはどうすればよいですか?
SQL Server Management Studioでユーザーインターフェイス言語を変更するにはどうすればよいですか? たとえば、英語でインストールしたが、日本語で表示したい場合(名前を付けるための1つの例)。 私はこの環境を[第一言語としての英語]以外の環境で実行しており、すべてのウィンドウで自然言語で読むことを望んでいます。(私の特定の自然言語はそれほど重要ではありませんか?)

1
ビューを保存するときにSSMSがコードを書き換えないようにするにはどうすればよいですか?
次のWHEREような句を含むステートメントを使用するビューを作成しています。 WHERE ( col1 IS NOT NULL OR col2 IS NOT NULL ) AND NOT EXISTS (SELECT ...) 実行には平均10秒かかります。ただし、このクエリをビューとして保存しようとすると、SQL Server(またはMS SQL Server Management Studio Client)がクエリを「最適化」して、代わりにこの構造を使用します。 WHERE (col1 IS NOT NULL AND NOT EXISTS (SELECT ...)) OR (col2 IS NOT NULL AND NOT EXISTS (SELECT ...)) クエリを6分以上に減速します。この動作を無効にして、ビューがSQLクエリを正確に使用するようにする方法はありますか?

1
OUTPUTを使用したMERGEが正しく動作していないようです
テーブルに外部キーを追加し、FKに違反する行を削除して、ModifiedTable_invalidテーブルにコピーしています。スクリプトの一部として、次のMERGEコマンドを取得しました。 MERGE ModifiedTable t1 USING TargetTable tt ON t1.JoinColumn = tt.JoinColumn WHEN MATCHED THEN UPDATE SET t1.FkColumn = tt.FkSource WHEN NOT MATCHED BY SOURCE THEN DELETE OUTPUT DELETED.* INTO ModifiedTable_invalid; ただし、このコマンドは、MERGEコマンドによって削除された行だけでなく、ModifiedTableからModifiedTable_invalidにすべての行を挿入しているようです。何が起こっているのですか?削除された行のみをModifiedTable_invalidに配置するにはどうすればよいですか?

2
すべてのSQL Serverデータベースで自動縮小をオフにします。なぜこれが機能しないのですか?
sp_MSforeachdbを使用してこの問題を解決できると考えていましたが、エラーメッセージが表示されます。 sp_MSforeachdb ' BEGIN USE [?] DECLARE @dbid INT SET @dbid = DB_ID() IF(@dbid > 4) BEGIN --PRINT ''[?]'' + CONVERT(VARCHAR, @dbid) --ALTER DATABASE [?] SET AUTO_SHRINK OFF END END; ' PRINT行のコメントを外して上記のクエリを実行すると、システムデータベースを除くすべてのデータベースのリストが表示されます。ただし、ALTER DATABASE行のコメントを外すと、次の2つのエラーメッセージが表示されます。 メッセージ5058、レベル16、状態2、行9 オプション 'AUTO_SHRINK'をデータベース 'master'に設定できません。 メッセージ5058、レベル16、状態1、行9 オプション 'AUTO_SHRINK'をデータベース 'tempdb'に設定できません。 これにより、ある時点で操作が中断され、一部のデータベースのみで自動圧縮が無効になります。 すべてのデータベースで自動縮小を無効にするにはどうすればよいですか?おまけの質問:なぜ私のアプローチが機能しないのですか?

3
SQL Server仮想ログサイズ
私はやや偶発的なDBAで、データベース管理についてほとんど知らない人からいくつかのデータベースサーバー(2005年と2008年)を引き継いだ開発者であり、このテーマについてもっと学ぶことにあまり興味がなかったようです。 私は進むにつれて学んでいて、現在トランザクションログファイルを理解しようとしています。 すべてのデータベースは、単純な復旧モデルと自動圧縮で設定されています。自動圧縮を使用することは通常ひどい考えであることを理解しましたが、これはトランザクションログが制御不能に成長するのを防ぐために行われたことを理解しています。(自動圧縮は実際にログファイルまたはDBのみを圧縮しますか?) SQL Server 2012についてこれが見つかり、2005と2008のどちらが正しいのか、そしてそれが何を意味するのかについて疑問に思っていました。 ..]仮想ログが70%になると、データベースエンジンはシンプルリカバリモデルで自動チェックポイントをトリガーします。」仮想ログのサイズはどこに指定されていますか? すべてのデータベースで自動縮小を無効にしたいのですが、その前に、ログファイルがすぐに制御できなくなることがないことを知っておく必要があります。 どんな助けでも大歓迎です。

2
ストアドプロシージャ内の権限を選択しますか?
動的SQLを使用するストアドプロシージャの実行権限をユーザーに付与しました。しかし、それを実行しようとすると、エラーが発生します。 SELECT権限がオブジェクト '[テーブル名]'、データベース '[データベース名]'、スキーマ 'dbo'で拒否されました。 ストアドプロシージャが使用するテーブルに対するアクセス許可をユーザーに付与する必要がありますか?それは私には本当に意味がありません。

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