データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A


2
既存のSQL Serverログインとユーザーのリスト
SQL ServerのGUIを使用して、定義されているログインとユーザーを確認できることは知っていますが、スクリプトを使用してこの確認をどのように行うことができるのか疑問に思っています。 以下のクエリを実行しましたが、Permission_levelを取得するためのマッピング方法がわからないPrincipal_idが表示されます。 SELECT * FROM Sys.login_token それでは、ログインとユーザーを許可レベルでリストできる組み込みストアドプロシージャはありますか? ありがとうございました。

1
SQL Serverで「ルックアップ」が関数の予約語として色付けされているのはなぜですか?
SSMS 2208では、識別子「Lookup」は、あたかも関数であるかのようにホットピンク色になっています(たとえば、「Power」または「Convert」と同じ色)。どうして? 予約語の公式リストにはありません。Webでの検索は、私の質問とは関係のない「ルックアップ」用語が非常に多いため、役に立たないように見えます。

4
数百万行の狭いテーブルでクエリのパフォーマンスを向上させることは可能ですか?
現在、クエリの完了に平均2500msかかっています。私のテーブルは非常に狭いですが、4,400万行あります。パフォーマンスを改善するためにどのようなオプションが必要ですか、またはこれは得られるほど良いですか? クエリ SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'; テーブル CREATE TABLE [dbo].[Heartbeats]( [ID] [int] IDENTITY(1,1) NOT NULL, [DeviceID] [int] NOT NULL, [IsPUp] [bit] NOT NULL, [IsWebUp] [bit] NOT NULL, [IsPingUp] [bit] NOT NULL, [DateEntered] [datetime] NOT NULL, CONSTRAINT [PK_Heartbeats] PRIMARY KEY CLUSTERED ( [ID] …

3
SQL Server 2012で大量のSQLクエリを実行すると、システムディスクのスペースが不足する
私はSQL Server 2012を初めて使用します。誰かが助けてくれればありがたいです。巨大なデータベースのコピーをSQL Server 2012に復元し、それに対していくつかの簡単なクエリを実行しようとしました。 136898115行のデータベーステーブルに対してSELECTクエリを実行しようとしています。このSELECTクエリには単純なWHERE句のみがあります。このクエリを実行するたびに、システムディスク(Windowsがインストールされているパーティション- C:\)の領域が不足するため(このパーティションには6GBの空き領域しかないため)失敗し、その理由はわかりません。tempdbは、14テラバイト以上の空き領域がある別のドライブ上にあると定義しました。もちろん、私のデータベースも別のドライブにあります。 システムパーティションの容量が不足する原因は何ですか?ページファイルですか?

1
ユーザーが特定の効果的な権限を持っている理由を調べるにはどうすればよいですか?
私は次を使用して有効なアクセス許可を照会できることを知っていますsys.fn_my_permissions: USE myDatabase; SELECT * FROM fn_my_permissions('dbo.myTable', 'OBJECT') entity_name | subentity_name | permission_name ------------------------------------------------ dbo.myTable | | SELECT dbo.myTable | | UPDATE ... これにより、現在のユーザーがmyTabledatabaseでSELECT、INSERT、UPDATEなどの権限を持っているかどうかがわかりますmyDatabase。 ユーザーがこれらの権限を持っている理由を簡単に見つけることは可能ですか?たとえばfn_my_permissions_ex、追加のreason列を出力する関数が必要です。 USE myDatabase; SELECT * FROM fn_my_permissions_ex('dbo.myTable', 'OBJECT') entity_name | subentity_name | permission_name | reason ------------------------------------------------------------------------------------------------------------------------------------ dbo.myTable | | SELECT | granted to database role public …

3
ページ編集時にSQL Serverクエリが遅い
SQL Server 2012では、次のT-SQLクエリで奇妙な動作が見られます。 SELECT Id FROM dbo.Person WHERE CONTAINS(Name, '"John" AND "Smith"') ORDER BY Name このクエリを単独で実行すると、2秒未満で約1,300の結果が得られます(フルテキストインデックスがありますName)。 ただし、クエリをこれに変更すると: SELECT Id FROM dbo.Person WHERE CONTAINS(Name, '"John" AND "Smith"') ORDER BY Name OFFSET 0 rows FETCH NEXT 10 ROWS ONLY 10件の結果を得るには20秒以上かかります。 次のクエリはさらに悪いです。 SELECT Id FROM ( SELECT ROW_NUMBER() OVER (ORDER BY Name) AS …

5
sys.dm_db_index_physical_statsのパフォーマンスを改善する
メンテナンスジョブ中に、断片化されたインデックスのリストを取得しようとしています。しかし、クエリは非常に遅く、実行に30分以上かかります。これはsys.dm_db_index_physical_statsのリモートスキャンによるものだと思います。 次のクエリを高速化する方法はありますか? SELECT OBJECT_NAME(i.OBJECT_ID) AS TableName, i.name AS TableIndexName FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') phystat INNER JOIN sys.indexes i ON i.OBJECT_ID = phystat.OBJECT_ID AND i.index_id = phystat.index_id WHERE phystat.avg_fragmentation_in_percent > 20 AND OBJECT_NAME(i.OBJECT_ID) IS NOT NULL ORDER BY phystat.avg_fragmentation_in_percent DESC 私はDBAではないので、上記のクエリで明らかな間違いを犯している可能性があります。または、役立つインデックスまたは統計があるかもしれません。たぶん、それはデータベースのサイズだけです(約140のテーブルで約20Gb)。 私が尋ねる理由は、夜中にメンテナンスのための非常に小さなウィンドウしかなく、これがほとんどの時間を占めているからです。

7
「データベース」とは何ですか?
この質問には多くの議論がありました。大規模な検索エンジンはどのデータベーステクノロジーを使用していますか? あまりにも多くの議論があったので、混乱しました。それで...とにかく、データベースとは何ですか?リレーショナルデータベースのみが「データベース」ですか?オブジェクト指向データベースは「データベース」ですか?情報(マップ、リストなど)をデータベースに保存および取得できるシステムはありますか? または、データベースは情報を保存/取得する必要があり、ユーザーや権限などの管理機能も必要ですか?dBase IIIは、実際にはリレーショナルではないので、データベースを追加しましたか?

4
複数の行の列を単一の行に結合する
私はいくつか持っているcustomer_commentsため、データベースの設計に複数の行に分割して、レポートのために私は結合する必要がありcomments、それぞれ独自のからをid1行に。以前、SELECT句とCOALESCEトリックからのこの区切りリストで動作するものを試しましたが、思い出せず、保存してはいけません。この場合も動作するようには思えませんが、1行でしか動作しないようです。 データは次のようになります。 id row_num customer_code comments ----------------------------------- 1 1 Dilbert Hard 1 2 Dilbert Worker 2 1 Wally Lazy 私の結果は次のようにする必要があります。 id customer_code comments ------------------------------ 1 Dilbert Hard Worker 2 Wally Lazy そのため、row_num実際にはそれぞれ1行の結果しかありません。コメントはの順序で結合されるべきですrow_num。上記のリンクされたSELECTトリックは、特定のクエリのすべての値を1つの行として取得するために機能しますが、SELECTこれらすべての行を吐き出すステートメントの一部として機能する方法を理解することはできません。 私のクエリは、テーブル全体を単独で調べて、これらの行を出力する必要があります。私はそれらを複数の列(各行に1つ)に結合してPIVOTいませんので、適用できないようです。

2
ドメインアカウントのSQL Serverログインを作成する方法は?
すべて、 私は、SQL Server 2008をドメイン(ADと言う)のサーバー(Server1と言う)にインストールしています。AD \ Sql1というドメインアカウントも持っています。これはドメイン(AD)の管理者アカウントではありませんが、Server1の管理者になりたいです。次に、ローカルアカウントではなく、そのドメインアカウントのSql Serverにログインを作成します。 それ、どうやったら出来るの? 質問: ユーザーAD \ Sql1、私は彼をServer1の管理者にしたい。そのために、同じユーザー名(たとえばServer1 \ Sql1)でローカルアカウントを作成し、ローカルアカウントをマシンの管理者にするだけです。そのローカルアカウントは、同じ名前のドメインアカウントに自動的にマッピングされますか?CREATE LOGIN [AD\Sql1] FROM WINDOWS私にとってはうまくいかなかったここに追加する必要があります。私はuser does not exist in Windows(そのような何か) と言ってエラーを得ました さて、上記の手法が機能する場合。AD \ Sql1がSever1の管理者になると仮定しましょう。だから、理論的には、SQL ServerでそのWindowsドメインアカウントのSQLログインを作成する必要はありませんよね?BUILTIT \ Adminsの一部であるすべてのローカル管理者は、自動的にSQL Serverへのsysadminアクセス権を持っていますか? どこで私は間違えましたか?この概念をよりよく説明できるURLを共有してください。 編集:質問1と質問2は独立して重要であることも追加する必要があります。ドメイン/ Windowsアカウントをとして追加する方法を知っていますsysadmin。しかし、ドメインアカウントとローカルアカウント間のマッピングの仕組みに興味があります。ここでの私の目標は、ローカルアカウントをsysadminとして追加する方法ではなく、かなり迅速に行うことができることです。私の意図は失礼ではなく、可能な限り明確にすることです。それでも質問が明確でない場合は、詳細をお知らせください。 ありがとう、 _UB 編集:文法

2
ディスク領域を解放する方法は?どのログ/ディレクトリを削除しますか?
Linuxマシンのディスク領域を解放したい。スペース使用量をドリルダウンすると、次のディレクトリのサイズが大きいことがわかりました /u01/app/11.2.0/grid/cv/log /u01/app/11.2.0/grid/log/diag/tnslsnr/r1n1/listener_scan2/alert (Contains xml files) /u01/app/11.2.0/grid/rdbms/audit(Contains .aud files) /home/oracle/oradiag_oracle/diag/clients/user_oracle/host_XXXXXXXXXX/alert(Contains xml files) /u01/app/oracle/diag/rdbms/crimesys/crimesys1/alert (Contains xml files) これらのディレクトリからコンテンツを削除できますか?注:ディレクトリではなくコンテンツを意味します。

4
2008でのバックアップのSQL Server 2012下位互換性
SQL Server 2008を使用するクライアントが多数ありますが、これもサーバー上にあります。バックアップファイルを使用して、クライアント間およびオフィスでデータベースをやり取りします。 SQL Server 2012からバックアップを作成すると、2008インスタンスに復元する方法がないことを読みました。互換性レベルがこの問題を処理すると仮定しましたが、そうではありません。そのため、アップグレード方法については迷っています。すべてのクライアントを一度にアップグレードすることは不可能ですが、これは不可能ですが、これを行うためのクリーンな方法は考えられません。 データベースをクライアントに送信するだけでなく、クライアントからデータベースを受信する必要があります。これは、SQL Serverでの最初のバージョンアップグレードであるため、この問題は初めてです。進め方に関するアイデアはありますか?
14 sql-server 

2
ストアドプロシージャでのクエリの実行がクエリウィンドウよりも遅いのはなぜですか?
クエリウィンドウで2秒で実行される複雑なクエリがありますが、ストアドプロシージャとしては約5分です。なぜストアドプロシージャとして実行するのにこれほど時間がかかるのですか? クエリは次のようになります。 それは(によって識別されたレコードの特定のセット取り@idと@createdDate)、および特定の時間枠(から始まる1年間@startDateそれらの手紙の結果として受け取った手紙の要約リストが送られた)とリターンと推定支払いを。 CREATE PROCEDURE MyStoredProcedure @id int, @createdDate varchar(20), @startDate varchar(20) AS SET NOCOUNT ON -- Get the number of records * .7 -- Only want to return records containing letters that were sent on 70% or more of the records DECLARE @limit int SET @limit = IsNull((SELECT Count(*) …

3
SQL ServerでSSDドライブのRAIDアレイを構成するにはどうすればよいですか?
48 GB RAM、1 CPU、および8 SATA III(6GB / s)SSDドライブ(128 GB Crucial m4)およびLSI MegaRAIDコントローラー(SAS 9265-8i)を備えたSQL Serverを構築しています。典型的な作業負荷はほとんど読み取りであると予想されます。いくつかの期間、より重い書き込みアクティビティがあります(サードパーティのデータプロバイダーとの1時間ごとのデータ同期-毎晩のバックアップ)が、一般的な読み取り/書き込み比率は約90%読み取り/ 10%書き込みです。 オプション1: 論理ドライブC:-RAID 1(2台の物理ドライブ) -OS論理ドライブD:-RAID 10(6台の物理ドライブ)-DBファイル/ログ/ tempdb / backups? または オプション2: 論理ドライブC:-RAID 1(2つの物理ドライブ) -OS論理ドライブD:-RAID 1(2つの物理ドライブ)-Dbファイル 論理ドライブE:-RAID 1(2つの物理ドライブ)-ログファイル/バックアップ? 論理ドライブF:-RAID 1(2つの物理ドライブ)-tempdb または オプション3: その他の提案 すべてのDBアクティビティは3つのドライブにストライピング(およびアレイ内の他の3つにミラーリング)されるため、オプション1はパフォーマンスを向上させると考えていますが、オプション2は従来の知恵を模倣しているようです(機械的により多く適用されるようです)SSDよりもドライブ)。Stack Overflowはオプション1でなくなったようです。 SSDでは、その時点でI / Oが制限されているのではなく、サーバーのCPUが制限されている可能性があるため、すべてを単一の論理ドライブに配置しても問題ないと思います。 もう1つの質問は、夜間バックアップをどこに配置すればよいかということです。バックアップによってSQLサーバーの残りの部分の速度が低下することは望ましくありません。これらの場合の読み取り/書き込み動作は順次書き込みなので、ログと同じ場所にバックアップを書き込むことをお勧めします。

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