データベース管理者

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

1
顧客ごとに10パーセンタイルと90パーセンタイルを取得
顧客とスコア(この場合は無関係で、さまざまな要因に基づいています。顧客は複数のスコアを持つことができます)を含むテーブルがあります。 customer_id | score | score_giver_id ==================================== 1 | 100 | 1 1 | 102 | 1 1 | 101 | 1 1 | 140 | 1 2 | 131 | 3 1 | 44 | 1 3 | 223 | 1 3 | 1 | 2 3 | 201 …

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
新しいユーザーがPostgreSQLでテーブルを作成できるのはなぜですか?
次の2つのチュートリアルに従って、DBを作成しました。 完全な特権を持つユーザーリンク 読み取り専用のユーザーリンク その後、CJ Estelのチュートリアルから、「新しいユーザーに明示的にテーブルを提供しなかったとしても、テーブルを作成する機能を継承している可能性がある」というヒントを受け取りました。案の定、読み取り専用ユーザーはテーブルを作成して所有することができます! CJ Estelは根本原因、つまりテンプレートデータベースを非常によく指摘しています。しかし、テーブルを作成する機能は、postgresql.orgでホストされているものを含む「読み取り専用ユーザーpostgres」をグーグルで取得するほとんどのチュートリアルを損ないます。ユーザーには読み取り専用以上の権限があります! 新しいユーザーにこの機能があるのはなぜですか?この特権を取り消した後、データベースはそのユーザーに対して本当に読み取り専用ですか?

1
アイドルクエリをデバッグするにはどうすればよいですか?
データベースで毎日実行しているバッチクエリがあります。ただし、アイドル状態のままになっているようで、何が起こっているのかをデバッグするのが非常に困難です。 クエリは、同時に挿入されるテーブルの集計であり、何らかの問題に関連していると推測しています。(集計は前日のデータに基づいているため、挿入は結果に影響しません。) 手がかり これは、sqlalchemyを使用してPythonスクリプト内で実行しています。ただし、トランザクションレベルを自動コミットに設定しているので、トランザクション内に物事がラップされるとは思いません。一方、sqlターミナルでクエリを手動で実行しても、クエリがハングすることはありません。 照会することによりpg_stat_activity、クエリは最初としてデータベースに入ってきますstate='active'。おそらく15秒後に、状態が「アイドル」に変わり、さらにxact_startがに設定されNULLます。待機フラグがtrueに設定されることはありません。 sqlalchemyのトランザクションレベルの自動コミットを理解する前に、代わりに状態'idle in transaction'ではなく状態でハングし'idle'ます。そして、その変更を行ってからハングする可能性がわずかに少なくなりますか? 私はこれ以上深く掘る準備ができていないように感じます。明確な答えを出さずに、さまざまな状態や関連するpostgres内部についてさらに説明するフィードバックも歓迎します。

1
データベースのすべてのテーブルへのアクセスを許可する
私は最近、サーバーの一人のユーザーとの定期的なアクセス権を共有したいと思ったし、私は簡単なことを実現CREATE USERし、GRANT ALL ON DATABASEコマンドは彼が単純で実行できなかったSELECTデータのを。 特定のデータベースのすべてのテーブルへの権限を特定のユーザーに付与しpublicたいのですが、何らかの特権を許可するかどうかわからないため、スキーマ全体へのアクセスを許可するのが最善のアイデアかどうかわかりませんエスカレーション。他の方法はありますか?

2
Postgresの不完全な起動パケットエラー
Ubuntu 14.04にPostgres 9.3をインストールしようとしていますが、起動時に厄介なエラーが発生します。ここに私が見ているものがあります: $ sudo service postgresql restart * Restarting PostgreSQL 9.3 database server * Error: could not exec /usr/lib/postgresql/9.3/bin/pg_ctl /usr/lib/postgresql/9.3/bin/pg_ctl start -D /var/lib/postgresql/9.3/main -l /var/log/postgresql/postgresql-9.3-main.log -s -o -c config_file="/etc/postgresql/9.3/main/postgresql.conf" : [fail] そこで、この出力でログファイルをチェックしました。 2015-01-05 21:50:05 EST LOG: database system was shut down at 2015-01-05 21:50:03 EST 2015-01-05 21:50:05 EST LOG: …

3
複数の `or`式を避ける
私は次のOracle SQLとその作品を持っていますが、すべてのもので非常にquiteいですor。これを行うより簡潔な方法はありますか? SELECT * FROM foobar WHERE (SUBJECT ='STAT' and TERM ='111') or (SUBJECT ='STAT' and TERM ='222') or (SUBJECT ='ENGLISH' and TERM ='555') or (SUBJECT ='COMM' and TERM ='444') or (SUBJECT ='COMM' and TERM ='333') or (SUBJECT ='STAT' and TERM ='666') ...

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
大規模データベースクエリの最適化(2500万行以上、max()およびGROUP BYを使用)
私はPostgres 9.3.5を使用しており、データベースに大きなテーブルがあります。現在は2500万行以上あり、急速に大きくなる傾向があります。次のような簡単なクエリを使用して、特定の行(すべてunit_idのsに最新のもののみを含む)を選択しようとしていますunit_timestamp。 SELECT unit_id, max(unit_timestamp) AS latest_timestamp FROM all_units GROUP BY unit_id; インデックスがない場合、このクエリの実行には約35秒かかります。定義されたインデックス(CREATE INDEX partial_idx ON all_units (unit_id, unit_timestamp DESC);)を使用すると、クエリ時間は約(わずか)19秒に短縮されます。 クエリをさらに短い時間(ほんの数秒など)で実行できるようになるのではないかと考えています。その場合、クエリをさらに最適化するにはどのような手順を実行する必要がありますか。 テーブル構造のダンプは次のようになります。 CREATE TABLE "all_units" ( "unit_id" int4 NOT NULL, "unit_timestamp" timestamp(6) NOT NULL, "lon" float4, "lat" float4, "speed" float4, "status" varchar(255) COLLATE "default" ) ALTER TABLE "all_units" ADD PRIMARY …

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

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

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