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

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

1
異なるユーザー特権でストアドプロシージャからSSISパッケージを実行する
さまざまなレベルの特権が必要なため、ユーザーが合理的な方法でSSISパッケージを実行できるようにすることに問題があります。 シナリオ:データのロードを担当する2つの異なるSSISパッケージを使用してデータウェアハウスを作成しました。1つは自動的に実行され(SQLエージェントジョブを介して正常に動作しています)、もう1つはアップストリームデータが完成してクレンジングされた後のユーザーの要求など このパッケージは、実行の開始時にデータベースをバックアップする(確実に確認する)、計算されたテーブルを削除して再作成するなど、非常に特権的な操作を実行します。 [SSISDB]。[catalog]。[create_execution]および[SSISDB]。[catalog]。[start_execution]ストアドプロシージャを介してこのジョブを実行するストアドプロシージャを記述しました。これはアカウントで実行すると正常に機能します。 (私はシステム管理者です)。 ストアドプロシージャは、SSISDBおよびMSDBで実行をキューに入れるために必要な高いレベルのアクセス許可のために通常のユーザーが実行すると失敗し、パッケージ自体は(低)セキュリティコンテキストで実行されているため失敗しました。 私が試したもの: ストアドプロシージャで「名前を付けて実行」を使用して問題を解決しようとしましたが、データベース間のチェーンの問題、信頼できるフラグなどが原因で失敗しました。 また、パッケージを実行するエージェントジョブを作成し、ストアドプロシージャからエージェントジョブを実行するだけで問題を解決しようとしましたが、次のような苦痛の世界に入りました。 ジョブごとに実行許可を設定できない 中央のサーバーロールを介してこのアクセスを構成して、スタッフの経時的な変化に対応し、ジョブが所有者として1人のユーザーしか持つことができないようにしたい プロキシアカウントの暗い世界、sql-authログインなどと組み合わせた資格情報 プランCおよびD 残っていると思う唯一のオプションは、昇格されたアクセス許可を持つ専用のSQL Serverログインを作成し、ユーザーを信用して資格情報を渡さない/インポートをスケジュールした人の監査可能性を失うことを信頼することです(この問題は組織)、または純粋にユーザーが「サーバーロール」アカウントとして認証できるようにWebフロントエンドをカスタムビルドし、Webアプリに2番目の(特権)接続でストアドプロシージャを実行させます。 そう.... 以下の方法に関するアドバイスはありますか? SSISパッケージに特権操作を実行させる 低い特権のユーザーによって実行されます(AD Windowsアカウントを使用) ジョブを実行するためのアクセスが中央のサーバーロールを介して管理されている場合(できれば、新しいWindowsグループを簡単に作成することはできません) そして、新しい中間/プロキシアカウントがSQL Server Authアカウントである場合(再び、ADに変更を加える非常に限られた機能) ここには多くの可動部品があることを理解しています(そして、一部は回転するブレードのように感じます)。 乾杯、ティム 編集... そのため、今日はssis_admin権限を持つ専用のSQL Serverログインを作成し、そのユーザーが所有する3つのSQL Serverエージェントジョブを作成し、エンドユーザーがexecute asそのユーザーに呼び出すストアドプロシージャを更新しました。これはcreate execution、SQL Serverログインとして呼び出すことができないため失敗しました。Windows アカウントが必要です。 ユーザーストアドプロシージャをexecute as、SQL Serverが(ADサービスアカウント)として実行されているWindowsアカウントに更新し、それssis_adminを許可するとエラーで失敗する 現在のセキュリティコンテキストを元に戻すことはできません。「実行方法」が呼び出された元のデータベースに切り替えて、もう一度試してください。 これはどこにも速く行きません:(

3
リンクサーバーをリロードする方法は?
Microsoft SQL Server 2014 Enterprise Editionを使用しています。サーバーを再起動するか、MSSQLSERVERサービスを停止する必要があるリンクサーバーで問題が発生します。サーバーが再び実行されると、(DB2への)リンクされたサーバーは正しく機能せず、SQL Serverは次のエラーを表示します。 メッセージ7302、レベル16、状態1、行10 リンクサーバー "Airspe"のOLE DBプロバイダー "DB2OLEDB"のインスタンスを作成できません。 サーバーを数回再起動した後にのみ、リンクサーバーが機能し始めます。 リンクサーバーを起動するためにサーバーを数回再起動する必要があるのはなぜですか? 他の解決策はありますか? これは、リンクサーバーの1つを作成するスクリプトです。 EXEC master.dbo.sp_addlinkedserver @server = N'AIRS', @srvproduct=N'Microsoft OLE DB Provider for DB2', @provider=N'DB2OLEDB', @datasrc=N'###.###.###.##',@provstr=N'Provider=DB2OLEDB; Data Source=#####;Persist Security Info=True;Password=**********; User ID=######;Initial Catalog=######; Network Address=###.###.###;Package Collection=AICOLDP;DBMS Platform=DB2/AS400', @catalog=N'#####' EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'AIRS',@useself=N'False',@locallogin=NULL,@rmtuser=N'#####',@rmtpassword='########' EXEC master.dbo.sp_serveroption @server=N'AIRS', @optname=N'collation compatible', @optvalue=N'false' …

2
SELECTをブロックする大規模なINSERT
SELECT操作をブロックしている大量のINSERTに問題があります。 スキーマ このようなテーブルがあります: CREATE TABLE [InverterData]( [InverterID] [bigint] NOT NULL, [TimeStamp] [datetime] NOT NULL, [ValueA] [decimal](18, 2) NULL, [ValueB] [decimal](18, 2) NULL CONSTRAINT [PrimaryKey_e149e28f-5754-4229-be01-65fafeebce16] PRIMARY KEY CLUSTERED ( [TimeStamp] DESC, [InverterID] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF , IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = …

2
計算列インデックスは使用されません
2つの列が等しいかどうかに基づいて高速ルックアップが必要です。インデックス付きの計算列を使用しようとしましたが、SQL Serverはそれを使用していないようです。静的に設定されたインデックス付きのビット列を使用するだけで、予想されるインデックスシークが得られます。 このような質問は他にもありますが、インデックスが使用されない理由に焦点を当てたものはありません。 テスト表: CREATE TABLE dbo.Diffs ( Id int NOT NULL IDENTITY (1, 1), DataA int NULL, DataB int NULL, DiffPersisted AS isnull(convert(bit, case when [DataA] is null and [DataB] is not null then 1 when [DataA] <> [DataB] then 1 else 0 end), 0) PERSISTED , DiffComp AS …

1
複数のCOUNTがCASEの1つのSUMよりも速いのはなぜですか?
次の2つのアプローチのどちらが速いかを知りたかったのです。 1)3つCOUNT: SELECT Approved = (SELECT COUNT(*) FROM dbo.Claims d WHERE d.Status = 'Approved'), Valid = (SELECT COUNT(*) FROM dbo.Claims d WHERE d.Status = 'Valid'), Reject = (SELECT COUNT(*) FROM dbo.Claims d WHERE d.Status = 'Reject') 2)SUMとFROM-clause: SELECT Approved = SUM(CASE WHEN Status = 'Approved' THEN 1 ELSE 0 END), …

5
プロパティサイズはデータベースでは使用できません
最近、データベースのバックアップ元と同じインスタンス(SQL Server 2008 R2 Enterprise)にデータベースを復元しましたが、データベースプロパティにアクセスできないことがわかりました。 私は次のことをしました: を使用してデータベース所有者が正しく設定されていることを確認しましたsp_helpdb。 データベース所有者をに変更しましたsa。修正ではありません。 データベースの所有者をsysadminユーザーに戻しました。修正ではありません。 DBCC updateusage影響を受けるデータベースに対して発行されました。修正ではありません。 DBCC CheckDB復元されたコピーを別のインスタンスに実行します。破損は見つかりませんでした。(同じバックアップファイルから)復元されたコピーは、データベースプロパティウィンドウにアクセスするときにエラーをスローしませんでした。 誰でも助けることができますか? プロパティを表示しようとすると表示されるエラーメッセージは次のとおりです。 要求されたダイアログを表示できません。(SqlMgmt) データベース '[DBNAME]'のプロパティサイズは使用できません。 このプロパティはこのオブジェクトには存在しないか、アクセス権が不十分なために取得できない可能性があります。(Microsoft.SqlServer.Smo) 私はsysadminこのインスタンスです。 更新:提案されたように、新しいユーザーを作成し、sysadminにし、データベース所有者をそれに変更しました。残念ながら修正ではありません。プロファイラトレースが有用なものを生成するかどうかを確認します。 更新:アーロン-元のデータベースの名前が変更され、オフラインになりましたが、そのインスタンスに残っています。その後、そのデータベースのバックアップは元の名前を使用して復元されました。新しいデータベースファイルのファイル名は、元のmdf / ldfと同じフォルダーにあるため、元のファイルとは異なります。復元されたデータベースは現在、通常どおり重要なアプリを駆動しています。

2
SQL Server dbを完全バックアップから復元できない、ログ処理が失敗、データベースが「復元中」状態
PCのローカルSQL Server Developer Edition 12.0.2000.8に開発目的でデータベースを設定しようとしています。データベース全体のバックアップと、ネットワーク経由で送られてきたトランザクションログ専用のバックアップファイルが用意されています。 完全バックアップから復元しようとすると、しばらくして(おそらく1時間以内に、データベースのサイズが〜270 GBになります)、エラーが発生します: System.Data.SqlClient.SqlError:データベース 'database name'のログの処理中にエラーが発生しました。可能であれば、バックアップから復元します。バックアップが利用できない場合、ログを再構築する必要があるかもしれません。(Microsoft.SqlServer.SmoExtended) この後、データベースは「復元中」状態になります。 私は次のようなものを実行したかった(この質問からそれを得た) ALTER DATABASE recovery_test_2 SET EMERGENCY; ALTER DATABASE recovery_test_2 SET SINGLE_USER; DBCC CHECKDB (recovery_test_2, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS; それに対して、データベースが「復元中..」状態にあるため、当然のことながらできません。復元プロセスを再起動しても同じエラーメッセージが表示され、ドロップと復元は再び役に立ちませんでした。 データベースを起動して動作させるにはどうすればよいですか?トランザクションの一貫性は私には関係ありません。 SSMS自動生成復元スクリプト: USE [master] RESTORE DATABASE [database_name] FROM DISK = N'D:\database_name.bak' WITH FILE = 1, MOVE N'database_name' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name.mdf', MOVE …

4
SQL Server Developer Edition 2012または2014-ダウンロード
Developer Editionは無料であり、ダウンロードするために登録は必要ないと聞いています(かなり確信しています)。しかし、今日それを探し始めたとき、私はそれをどこから入手するかを見つけることができませんでした。私の理解は間違っているか正しいですか?申し訳ありませんが、ここで同様の質問は見つかりませんでした。何か案は?
14 sql-server 

1
SQL Serverによる毎日の計画の再作成
実稼働環境でこの問題が発生しています。 Microsoft SQL Server 2008 R2(SP1)-10.50.2500.0(X64)-Windows NT 6.1(ビルド7601:Service Pack 1)上のEnterprise Edition(64ビット)。 SQL Serverは、すべての(ほぼ100%)古い実行計画を削除し、毎日一晩中(午後11:00から8:00に)再作成しています。これは、「自動更新統計」が無効状態のときにも発生していました。過去2〜3週間、「自動更新統計」をオンにしました。しかし、それはまだ起こっています。 この計画の再生成をトリガーするものは実際にはわかりませんが、手動でそれを行わないことは確かです。 計画が再生成されるタイミングと実際に一致するのは、DBメンテナンスジョブのみです。毎日のインデックスの再編成(断片化が5〜30%の場合)と毎日のインデックスの再構築(断片化が30%を超える場合) )仕事。通常、この毎日のメンテナンスジョブは再編成のみを行います(インデックスの断片化は毎日30%を超えないため)。 影響: これらの新しく作成されたプランにより、UDF呼び出し/クエリ呼び出し(UI / Webページから呼び出される)がかなり長くなり(1秒未満ではなく数分)、セッションが積み上げられてCPUが90%近くになります。 問題は、それらのスタックしたセッションが強制的に削除された瞬間(DB側)、1)対応するすべての実行プランが手動でクリアされたとき(クエリの場合)、2)UDFが変更されたとき(関数の場合)に消えます。その瞬間からSQLサーバーによって作成された新しい計画は、翌朝同じ問題が発生するまで1日を通して完璧に機能します。また、この動作は100%一貫しているわけではなく、毎朝実際に表示されるわけではありません。しかし、4〜5日間連続して表示されている期間がありました。 この問題は、ビジネスの朝に発生します。UI/ Webページがより集中的にアクセスされる場合です。 誰がこれを引き起こしているのか、この問題を解決する方法の手がかりを持っていますか?どんな助けでも大歓迎です。


1
C#コードおよびストアドプロシージャでトランザクションを処理する必要がありますか
データベースストアプロセスとC#の両方でトランザクション処理が本当に必要ですか? C#: Using(transaction with transaction scope) { Execute stored proc; Transaction. Complete; } SQLストアドプロシージャ: Create process As Begin try Begin transaction Commit End try Begin catch Rollback End catch

2
stats_column_idとindex_column_idは、クラスター化インデックスの物理的な順序が変更されても更新されません
列の目的を誤解していない限り、次のコードは、クラスター化インデックスの構造を変更stats_column_idしてもsys.stats_columns DMVの列の順序位置()が変更されないことを示しています。(AdventureWorks2014、AdventureWorks2008R2でテスト済み) select i.name, c.name, ic.column_id, ic.index_column_id from sys.indexes i join sys.index_columns ic on i.object_id = ic.object_id and i.index_id = ic.index_id join sys.columns c on i.object_id = c.object_id and ic.column_id = c.column_id where i.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID' order by ic.key_ordinal; select sh.name,s.name, c.name, c.column_id, sc.column_id, sc.stats_column_id from sys.stats s join sys.stats_columns …


3
自身を指すリンクサーバーの作成
servername\instancename次の呼び出しを使用して、SQL Server 2014インスタンスにリンクサーバーを作成しようとしています。 EXEC master.dbo.sp_addlinkedserver @server = N'servername\instancename', @srvproduct=N'SQL Server' エラーが発生しています: Msg 15028, Level 16, State 1, Procedure sp_addlinkedserver, Line 82 The server 'servername\instancename' already exists. これはSQL Server 2005で正常に機能し、MSDNによると、 リンクサーバーはSQL Serverの別のインスタンスである必要はありませんが、 そのため、これを許可しない最近のバージョンで何が変更されたのかわかりません。UIを使用すると、同様のメッセージが生成されます。 ローカルSQL Serverをリンクサーバーとして作成することはできません。 リクエストするのは奇妙なことだと理解していますが、2005年に機能した(かつては別のインスタンスにあった)レガシーコードをサポートすることです。ドキュメントには、動作するはずであると記載されていますが、動作しません。2014年にこれを機能させる方法はありますか、それとも基になるコードを変更する必要がありますか?

2
NVARCHAR(MAX)を圧縮する別の方法は?
NVARCHAR(MAX)フィールドを持ついくつかのテーブルを圧縮しようとしています。あいにく、圧縮rowとpage圧縮には希望の影響はありません(20 GBのテーブルに対して保存されるのは〜100/200 MBのみです)。また、列ストアおよび列ストアのアーカイブ圧縮は、NVARCHAR(MAX)フィールドの圧縮をサポートしていないため、適用できません。 ここに他の選択肢があるかどうかは誰にもわかりますか? また、列の内容は一意であるため、rowand page圧縮は効果がないと思いNVARCHAR(MAX)ます。

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