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

SQL Server 2017(メジャービルドバージョン14.00.xxxx)。sql-serverにもタグを付けてください。

1
bcpコマンド「 」付近の構文が正しくありません。キャラクターは実際には「ä」
私が持っている MSSQLサーバとMSSQL・ツールのUbuntu(Linux)の上に設置します。次のコマンドラインを使用してbcpコマンドでデータをエクスポートしようとすると、 bcp DBname.dbo.Täble_Name out Täble_Name -c -k -S127.0.0.1 -Usa -PpassWord -r ~ 私はこのエラーを受け取ります: SQLState = 37000、NativeError = 102 エラー= [Microsoft] [ODBC Driver 13 for SQL Server] [SQL Server]「 」付近の構文が正しくありません。 �ですä。 私は囲む場合はTäble_Name角括弧で: bcp DBname.dbo.[Täble_Name] out Täble_Name -c -k -S127.0.0.1 -Usa -PpassWord -r ~ オブジェクト名でこのエラーが発生します: SQLState = S0002、NativeError = 208 エラー= …

2
Ubuntu 16.04でSQL Serverを起動できない
昨日、Ubuntu 16.04マシンにSQL Server v.Nextパブリックプレビューをインストールして動作させました。しかし、今日は機能していません。 エラーを取得: root @ OraServer:/ var / opt / mssql / log#systemctl status mssql-server ●mssql-server.service-Microsoft(R)SQL Server(R)データベースエンジン ロード済み:ロード済み(/lib/systemd/system/mssql-server.service; enabled; vendor preset:enabled) アクティブ:非アクティブ(デッド)(結果:終了コード)Sun 2016-11-27 13:34:23 IST以降; 18秒前 プロセス:6368 ExecStart = / opt / mssql / bin / sqlservr(code = exited、status = 1 / FAILURE) メインPID:6368(コード=終了、ステータス= 1 /障害) 11月27日13:34:23 OraServer …

2
SSMSがサーバーのファイルシステムを参照できないようにする
私の管理下でMS SQLサーバー2017を共有するユーザーが何人かいます。彼らは、そのサーバー上の他のユーザーとそのデータを見てはいけません(または気づいてさえいません)。各ユーザーは自分のデータベースを持っています。彼らは自分のデータベースで好きなことをすることができます。 SQL ServerのPartial Containment機能を使用して、ユーザーを適切にロックしています。ログインはデータベース内に作成されます。この方法では他のユーザーアカウントやデータベースが表示されないため、これはうまく機能します。DBログインは、このコマンドで作成したデータベースロールに追加されます。 USE dbname CREATE ROLE dbrole GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TABLE, CREATE VIEW, ALTER ANY SCHEMA TO dbrole DENY EXECUTE TO dbrole 私は新たにdbログインアカウントを作成し、それを上記の役割にのみ追加します。ユーザーには他の権限はありません(私が知っていることです)。 残っている唯一の問題は、SSMSがサーバーのファイルシステムを参照できることです。データベースを右クリックしてを選択した場合は、ファイルをTasks -> Restore -> Database選択Device: -> [...]して追加します。これにより、SSMSがサーバーのファイルシステムを参照できるようになります。これを拒否します。ユーザーは実際にDBを復元することはできませんが、ファイルシステムを参照することはできます。 ここでこの質問は SSMSは、ストアドプロシージャを使用していることを示唆しているxp_fixeddrives、xp_dirtreeとxp_fileexist。ただし、これらのストアドプロシージャは、そのグループの権限を持つユーザーとして実行されると、空の結果を返します。これは、ユーザーがsysadminロールのメンバーでない場合の動作であると読みました。私は明示的にEXECUTEをdbroleに対して拒否しているため、すでに少し混乱していますが、ユーザーは引き続きストアドプロシージャを実行できます。しかし、それでも、SSMSを介してファイルシステムを参照すると、空ではありません。 SSMSはどこからファイルシステム情報を取得し、どのようにしてこれを防ぐことができますか? 編集:私はまた、SSMSがすべてのデータベースのサーバーに存在するすべてのDBバックアップのリストを取得できることにも気づきました。繰り返しますが、どのようにしてこの情報を取得し、どのようにしてそれを防ぐことができるかは知りません。

1
JOIN句でORを使用する場合の奇妙なクエリプラン-テーブル内のすべての行の定数スキャン
JOIN句でORを使用するよりも2つの結果セットのUNIONが優れている理由を示すために、サンプルクエリプランを作成しようとしています。私が書いたクエリプランには困惑しています。Users.Reputationの非クラスター化インデックスでStackOverflowデータベースを使用しています。 クエリは CREATE NONCLUSTERED INDEX IX_NC_REPUTATION ON dbo.USERS(Reputation) SELECT DISTINCT Users.Id FROM dbo.Users INNER JOIN dbo.Posts ON Users.Id = Posts.OwnerUserId OR Users.Id = Posts.LastEditorUserId WHERE Users.Reputation = 5 クエリプランはhttps://www.brentozar.com/pastetheplan/?id=BkpZU1MZEにあります。クエリの所要時間は4:37分で、26612行が返されました。 このスタイルの定数スキャンが既存のテーブルから作成されるのを見たことがありません-常に一定のスキャンがユーザーによって入力された単一の行に対して使用される場合、すべての単一の行に対して一定のスキャンが実行される理由がわかりませんたとえば、SELECT GETDATE()。なぜここで使用されるのですか?このクエリプランを読む際に、いくつかのガイダンスをいただければ幸いです。 そのORをUNIONに分割すると、同じ26612行が返される12秒で実行される標準プランが作成されます。 SELECT Users.Id FROM dbo.Users INNER JOIN dbo.Posts ON Users.Id = Posts.OwnerUserId WHERE Users.Reputation = 5 UNION SELECT Users.Id …

2
なぜこれがより速く、安全に使用できますか?(最初の文字がアルファベットの場合)
要するに、非常に大きな人々のテーブルからの値で人々の小さなテーブルを更新しています。最近のテストでは、この更新の実行に約5分かかります。 私たちは可能な限り最も賢い最適化のように思われるものに偶然出会いました。同じクエリが2分未満で実行され、同じ結果が完全に生成されます。 これがクエリです。最後の行は「最適化」として追加されます。クエリ時間が大幅に減少するのはなぜですか?何かが足りませんか?これは将来的に問題を引き起こす可能性がありますか? UPDATE smallTbl SET smallTbl.importantValue = largeTbl.importantValue FROM smallTableOfPeople smallTbl JOIN largeTableOfPeople largeTbl ON largeTbl.birth_date = smallTbl.birthDate AND DIFFERENCE(TRIM(smallTbl.last_name),TRIM(largeTbl.last_name)) = 4 AND DIFFERENCE(TRIM(smallTbl.first_name),TRIM(largeTbl.first_name)) = 4 WHERE smallTbl.importantValue IS NULL -- The following line is "the optimization" AND LEFT(TRIM(largeTbl.last_name), 1) IN ('a','à','á','b','c','d','e','è','é','f','g','h','i','j','k','l','m','n','o','ô','ö','p','q','r','s','t','u','ü','v','w','x','y','z','æ','ä','ø','å') テクニカルノート:テストする文字のリストには、さらに数文字が必要になる場合があることを認識しています。また、「DIFFERENCE」を使用した場合のエラーの明らかなマージンも認識しています。 クエリプラン(通常): https : //www.brentozar.com/pastetheplan/?id=rypV84y7V クエリプラン( "最適化"付き): …

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
MS SQL ServerのシーケンスにOracleのようなORDERパラメータがないのはなぜですか?
ドキュメントのCREATE SEQUENCET-SQLのため、あなたがいることを確認できCREATE SEQUENCEコマンドには、持っていないORDERパラメータを。 比較のためにCREATE SEQUENCE、ORDER/のNOORDERオプションを示すOracleのドキュメント: ORDER ORDERシーケンス番号が要求順に生成されることを保証することを指定します。この句は、シーケンス番号をタイムスタンプとして使用する場合に役立ちます。通常、主キーの生成に使用されるシーケンスでは、保証順序は重要ではありません。 ORDEROracle DatabaseをReal Application Clustersで使用している場合、順序付けられた生成を保証するためにのみ必要です。排他モードを使用している場合、シーケンス番号は常に順番に生成されます。 NOORDER NOORDER要求順にシーケンス番号が生成されることを保証しない場合に指定します。これがデフォルトです。 Microsoft SQL ServerはSEQUENCEsに強い順序付け制約を提供していますか?それともマイクロソフトはそれを一般的に重要とは考えていませんか?

3
FROM句がなく、エラーにならないのはなぜですか?
そのため、タイプミスのあるサブクエリを含むクエリがあります。FROM句がありません。しかし、実行してもエラーにはなりません!なぜ!? SELECT 1 ,r.id ,'0D4133BE-C1B5-4141-AFAD-B171A2CCCE56' ,GETDATE() ,1 ,'Y' ,'N' ,oldItem.can_view ,oldItem.can_update FROM Role r JOIN RoleObject oldReport ON r.customer_id = oldReport.customer_id JOIN RoleItem oldItem ON oldReport.id = oldItem.role_object_id AND r.id = oldItem.role_id WHERE r.id NOT IN (SELECT role_id WHERE role_object_id = '0D4133BE-C1B5-4141-AFAD-B171A2CCCE56') AND oldReport.id = '169BA22F-1614-4EBA-AF45-18E333C54C6C'

3
SQL Serverは、コミットする前に、トランザクション内のトランザクションへのDDLを許可(可視化)しますか?
PostgreSQLでは、いくつかのテストデータを使用してテーブルを作成し、トランザクションでそれを別のタイプの新しい列に移行することで、1回のテーブル書き換えでCOMMIT、 CREATE TABLE foo ( a int ); INSERT INTO foo VALUES (1),(2),(3); に続く、 BEGIN; ALTER TABLE foo ADD COLUMN b varchar; UPDATE foo SET b = CAST(a AS varchar); ALTER TABLE foo DROP COLUMN a; COMMIT; ただし、MicrosoftのSQL Serverでは同じことがエラーを生成するようです。この作業の比較デシベルのフィドル、ADD(列)コマンドは、トランザクションの外にあります -- txn1 BEGIN TRANSACTION; ALTER TABLE foo ADD b varchar; COMMIT; …

2
単一の行をアンピボットするときに、役に立たない並列分岐をどのようにして取り除くことができますか?
少数のスカラー集計をアンピボットする次のクエリを考えてみます。 SELECT A, B FROM ( SELECT MAX(CASE WHEN ID = 1 THEN 1 ELSE 0 END) VAL1 , MAX(CASE WHEN ID = 2 THEN 1 ELSE 0 END) VAL2 , MAX(CASE WHEN ID = 3 THEN 1 ELSE 0 END) VAL3 , MAX(CASE WHEN ID = 4 THEN 1 …

2
SMO、SSMSは、ローカルホストに接続するときにDockerでのSQL Serverの管理に時間がかかる
TL; DR: IPv6ループバック(::1)に解決される名前でSQL Server Dockerコンテナーに接続すると、SMO呼び出しが非常に遅くなります。を使用すると127.0.0.1、高速になります。 Dockerイメージmicrosoft / mssql-server-windows-developerの使用方法を学習しようとしています。Microsoftのドキュメントによると、このコンテナはポート1433 TCPのみを公開しています。 docker run -d -p 1433:1433 -e sa_password=Passw0rd! -e ACCEPT_EULA=Y -v C:\dockerdb:C:\dockerdb microsoft/mssql-server-windows-developer 私はWindows 10でコンテナーを実行していますが、コンテナーの起動、SQL Server認証による認証、WindowsホストでのsqlcmdおよびSSMS 17.4を使用したインスタンスに対するクエリの実行(localhostまたは「。」に接続)、およびSQL操作に成功しています。 IPで接続する隣のMacのスタジオ。この方法でクエリを実行しても、目立ったパフォーマンスの問題はありません。 SSMSでは、オブジェクトエクスプローラーを参照することもできますが、インスタンスエクスプローラーウィンドウを開いたり、データベースを接続したりするなど、オブジェクトエクスプローラーのオブジェクトで右クリックメニューから何かを行おうとすると、SSMSは約5秒間応答を表示しません-10分。この時点で、要求したウィンドウが表示されるか、次のエラーメッセージが表示されます。 また、SMO Scripterオブジェクトを使用して、このインスタンスに対してPowerShellスクリプトを実行して、同じような動作を確認しようとしています。PSスクリプトは、データベース内のオブジェクトをループしてスクリプトでファイルに保存し、オブジェクトのリストを比較的迅速に収集するように機能しますが、個々のオブジェクトのスクリプト作成には5〜10分かかり、使用するには遅すぎます。 公開された単一のポートでは不十分であり、SMOとSSMSが同様の方法で接続を試みて速度が低下しているのではないかと思います。また、localhostに接続するときに、これらのツールは、通常はファイアウォールで保護されない他の通信チャネルが存在すると想定しているのでしょうか。使用できる追加の接続パラメーターはありますか?SSMSがSMOなどを使用してSQL Serverと通信しているという私の仮定を誰かが検証できますか? 更新:まだ調査中ですが、これはリソースの制約に関するDockerの問題であると考えられます。ほとんどのドキュメントでは、Windowsコンテナにデフォルトのリソース制約がないことを示しているようです(そして、これらはDocker for Windows GUIでは設定できません。Linuxコンテナの場合のみです)が、実際にはWindows Windows 10で実行されているコンテナーは、1 GBのデフォルトのRAM割り当てを取得します。実行中のコンテナーを検査してそのRAMとCPUの割り当てを確認する方法をまだ考えていますが、次にdocker runパラメーターを使用して、デフォルトの値からそれらを増やしてみます。 更なる更新:Dockerから、コンテナに設定されているCPUとメモリの制限を教えてくれる信頼できるメトリックを取得できませんでした。さまざまな調査により、Dockerコンテナーにはデフォルトでメモリ制限がないか、1 GBであることが示されていますが、現時点で確認できるのdocker statsは、SQLコンテナーが750〜850 MBのメモリしか使用していないということです。使用可能なメモリを4 GBに設定する実行パラメータを追加しようとすると、エラーになります。だから私はその問い合わせのスレッドに従うのをやめ、別の腸のチェックに行きました:実行中のコンテナーでインタラクティブなPowerShellセッションを入力してから、コンテナー内から上記のリンクされた私のPowerShellスクリプトを呼び出します。 コンテナー内で実行しても問題はありませんでした。ほんの数分で2780個のオブジェクトを突破しました。これは問題がコンテナー/ホスト境界にあることを確認していると思います。そのため、そのUDPポートを開くことができるかどうかを確認します。更新: UDPポート1434を開いても解決しませんでした。 その他のアップデート—回避策は達成されましたが、リソース制約の問題ではありません。Windowsコンテナに大きなメモリ割り当てを設定することに関連する問題があるようです— 3gと2gでも同様のエラーが発生しましたが、最終的に1.5gでコンテナを起動できました。docker statsコンテナーのの違いを確認しましたが、コンテナーがデフォルトの割り当てである1GBで実行されていることを確認しました(そう思います)。デフォルトの設定では、PRIV WORKING …

2
SSRSは間もなく消滅し、PowerBIは新しいモデルになりますか?
SQL Server 2017にPowerBI Serverが含まれるようになったことを確認しました。また、SSRSを別のインストーラーに移動したため、元のSQL Serverインストールにパッケージ化されていません。これは、Microsoftが最終的にSSRSを廃止しようとすることを意味しますか?私たちのチームは、PowerBIで新しいレポートを作成し、以前のSSRSレポートを移行する必要がありますか?

1
「警告:操作により、残留I / Oが発生しました」とキールックアップの比較
SQL Server 2017実行プランでこの警告を見てきました: 警告:操作によりIOが残りました[sic]。実際に読み取られた行数は(3,321,318)でしたが、返された行数は40でした。 SQLSentry PlanExplorerからのスニペットは次のとおりです。 コードを改善するために、SQL Serverが関連する行にアクセスできるように、非クラスター化インデックスを追加しました。これは正常に機能しますが、通常は(大きな)列が多すぎてインデックスに含めることができません。次のようになります。 インデックスのみを追加し、列を含めない場合、次のようになります。インデックスを強制的に使用すると、 明らかに、SQL Serverは、キールックアップは残りのI / Oよりもはるかにコストがかかると考えています。(まだ)多くのテストデータを含まないテストセットアップがありますが、コードが運用環境に入ると、より多くのデータを処理する必要があるため、何らかの非クラスター化インデックスが必要だとかなり確信しています。 SSDで実行する場合、キールックアップは本当に高価ですが、私は(多くのインクルード列を含む)全脂肪インデックスを作成する必要がありますか? 実行計画: https : //www.brentozar.com/pastetheplan/?id=SJtiRte2Xこれは、長いストアドプロシージャの一部です。を探しIX_BatchNo_DeviceNo_CreatedUTCます。

1
SQL Server 2017およびAzure SQL DBでの既定の分離レベルの検索
トランザクションと並行性に関する本を読んでいます。1つの段落では、次のように述べられています。 オンプレミスのSQL Serverインスタンスでは、デフォルトの分離レベルはロックに基づいて読み取りコミットされています そして次の文は: SQLデータベースのデフォルトは読み取りです-行のバージョン管理に基づいてコミットされたスナップショット 私の質問は、これらの2つの文で「オンプレミスSQL Serverインスタンス」と「SQLデータベース」の違いは何ですか? デフォルトの分離レベルとは何ですか?どのようにして見つけることができますか?デフォルトの分離レベルを確認するための特別なクエリはありますか?

1
DBCC CheckDBの後にパフォーマンスモニターのデータベースキャッシュメモリが大幅に低下する
私たちはいくつかSQLServer: Memory Managerの指標を監視しており、DBCC CheckDB仕事の後、指標が Database Cache Memory (KB) 大幅に低下します。正確には、キャッシュされた140 GBのDBメモリから60 GBに減少しました。その後、週の間にゆっくりと再び増加します。(「Free Memory KB」の量は、直後に20 GBから100 GBになりましたCheckDB) DBCC CheckDB は毎週日曜日に実行されるため、データベースキャッシュメモリは毎週再び増加する必要があります What is the behavior of this ? Why CheckDB pushes database pages out of memory ? 2番目の質問は、「buffer cache hit ratio」がDBCC CheckDB完了後に変更されなかった理由です。 データベースのデータをストレージからRAMに再度読み込む必要があるため、平均して99.99%で、DBCC CheckDBジョブ終了後は約98.00%に低下し、99%にかなり速くbuffer cache hit ratio戻ります。

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