データベース管理者

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

1
LISTEN / NOTIFY特権
私はpostgresデータベースを1つ持ち、2人のユーザーがいます。アリスとボブ。 NOTIFY alice_channel 'sensitive data'ボブがLISTENチャネル名が「alice_channel」であると推測するだけでこっそりと侵入することなく、できるようにしたいと思います。 実際には、チャネル名を推測することは非常に困難ですが、これはせいぜいあいまいさによるセキュリティです。 データベースユーザーがLISTEN&を使用する(乱用する)のを防ぐ方法はないと私は信じていますNOTIFYか?つまり、付与または取り消すことができる関連する特権はないようです。 これは行き止まりですか?

1
クロスデータベーストランザクションを実行する場合、どのトランザクションログに情報が保存されますか?
次のスニペットがあるとします。 -- error checking omitted for brevity begin tran exec database1..my_stored_procedure exec database2..my_other_stored_procedure if (@@error <> 0) rollback commit トランザクション情報はどのデータベースのトランザクションログに挿入されますか? database1トランザクションログを再生しようとしても、そのDBだけに影響を与えるのでは意味がないので、両方のログがすべてのデータを取得すると思います。また、存在しないdatabase1サーバーでdatabase2はのトランザクションログを再生できず、その逆も同様です。 ..しかし、私は修正にオープンです!

4
Linuxターミナルを介してMySQLストアドプロシージャを作成する方法
mysqlコンソールでは、delimiterコマンドを使用して区切り文字を変更します。手順を定義すると便利です。delimitermysqlクライアントのみのコマンド(クライアント側コマンド)を理解しました 。 しかし、私はのdelimiter ようなコマンドを持たないmysqlクライアントdbslayerを使用しています。この種のクライアントでは、どのようにプロシージャを定義できますか。 今のところ検討: create procedure test_pro() begin select 'hello pro'; end 私は以下を試しました: mysql -u root -pmypass test < proc_file ここで、proc_fileには上記の手順が含まれています。 しかし、それは私に次のエラーを与えています: ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right …

1
SQL Serverの複数のインスタンスのメモリを構成するにはどうすればよいですか?
同じ仮想サーバー上で実行される一連のSQL Serverインスタンス(2008 R2)があります。各インスタンスは、開発サイクル(開発/テスト/ステージなど)のステージを表します。すべてのインスタンスは常にオンラインである必要がありますが、リリースライフサイクルのどこにいるかによって、負荷は一度に1つのインスタンスに分離される傾向があります。 SQL Serverは、最大値として設定したメモリ量を取得して保持するようです。インスタンスがメモリ消費について「スマート」になるように構成して、必要なときに互いがメモリを取得するのをブロックしないようにする方法があるかどうかを知りたい。

1
コミットされた読み取りスナップショット分離(RCSI)で取得された共有ロック
LCK_M_SRCSIを使用すると、共有ロックの待機()が発生します。私の理解では、SELECTsRCSIを使用するときに共有ロックを必要としないため、これは発生しないはずです。 共有ロックを確認するにはどうすればよいですか?外部キーが原因ですか?

1
PostgreSQLのカウンターの同時増分
アイテムのリストとその使用法で構成されるプロジェクトの統計表を維持する必要があります(ページビューをカウントするWebサイトのようなものを考えてください)。アイテムがインスタンス化されるたびに、特定のアイテムの使用量を増やす必要があります。 私の最初の実装は: statistics( id integer NOT NULL, name character varying(255) NOT NULL, usage integer NOT NULL DEFAULT 0, ); UPDATE statistics SET usage = usage + 1 WHERE name = '<name>'; 私の懸念は、パフォーマンスと並行性についてです。更新プロセスは数十(おそらく80〜120)デバイスによってインスタンス化され、1秒あたり数回発生する可能性があるため、私の質問は次のとおりです。 1)このメソッドは同時実行性を維持しますか?(つまり、複数のデバイスが「同時に」更新を要求した場合、すべての要求がカウントされますか?) 2)結果を達成するための最良の方法を提案できますか?更新の書き込みには負荷がかかると思いますが、読み取りの方がはるかに頻繁です。値を増やす特定の機能はありますか?私は「シーケンス」を見ていますが、それが正しい方法であるかどうかはわかりません... アドバイスをよろしくお願いします

6
MySQL-エラー1045(28000):ユーザーのアクセスが拒否されました
Ubuntu 10.04.2 LTSの新しいコピーを新しいマシンにインストールしました。MySQLにrootとしてログインしました。 david@server1:~$ mysql -u root -p123 replという新しいユーザーを作成しました。ホストは空白のままにしたので、新しいユーザーはどこからでもアクセスできます。 mysql> CREATE USER 'repl' IDENTIFIED BY '123'; Query OK, 0 rows affected (0.00 sec) ユーザーテーブルをチェックして、新しいユーザーreplが正しく作成されたことを確認しました。 mysql> select host, user, password from mysql.user; +-----------+------------------+-------------------------------------------+ | host | user | password | +-----------+------------------+-------------------------------------------+ | localhost | root | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | server1 | …
9 mysql 

2
PostgreSQLの結合テーブルで重複するレコードを削除するにはどうすればよいですか?
次のようなスキーマを持つテーブルがあります。 create_table "questions_tags", :id => false, :force => true do |t| t.integer "question_id" t.integer "tag_id" end add_index "questions_tags", ["question_id"], :name => "index_questions_tags_on_question_id" add_index "questions_tags", ["tag_id"], :name => "index_questions_tags_on_tag_id" 重複しているレコード、つまり同じレコードtag_idとquestion_id別のレコードの両方を削除します。 そのためにSQLはどのように見えますか?

3
TempDBのパーティションが破損していると、DBCC CHECKDBで問題が報告されないのはなぜですか。
SQL Serverの1つが最近次のエラーを報告しました: DATE/TIME: 2/25/2013 9:15:14 PM DESCRIPTION: No catalog entry found for partition ID 9079262474267394048 in database 2. The metadata is inconsistent. Run DBCC CHECKDB to check for a metadata corruption. 15分以内にサーバーに接続して実行しました。 SELECT name FROM sys.databases WHERE database_id = 2; これは「tempdb」を返しました。次に実行しました: DBCC CHECKDB ('tempdb') WITH NO_INFOMSGS, TABLERESULTS; 結果は返されず、影響を受けるデータベースに問題がないことを示しています。 データベースが破損すると、上記のエラーメッセージが表示されDBCC CHECKDB、問題が報告されないのはなぜですか。ページのチェックサム計算が失敗し、そのページを参照しているオブジェクトを削除できないと疑われるページがマークされた場合、私は推測しますが、私は間違っているはずです。 …


2
OracleデータベースをCREATE DATABASEコマンドにエクスポートする方法はありますか?
既存のOracle 11インスタンスがあります。データベース(DBCAを介して作成されたもの)を同等の "CREATE DATABASE"コマンドにエクスポートし、文字セットを処理します。また、データファイルのリストと同じデータベースを作成するために必要なテーブルスペース。個々のスキーマオブジェクトを保持することに興味はありません。 テーブルなどを再作成するためのDDLを提供するDBMS_DDLパッケージがあるので、質問します。データベースレベルで同様のものがあるかどうか疑問に思っています。 ありがとう!

3
SQL Server Expressの最大接続数は?
SQL Server 2005 Expressエディションをクライアントマシンの1つにインストールし、他の多くのユーザーも、インターフェイスとして提供したC#アプリケーションを介してそのSQL Serverに接続しています。 PCがSQL Serverに接続され、例外がスローされる場合がある SQL Serverが見つかりません... Expressエディションが最大接続制限に達し、エラーが発生すると思います。 この問題を解決する方法を教えてください。 どのエディションのパラレル接続がいくつあるかを知るのに役立つホワイトペーパー、 SQL Server 2008またはSQL Server 2012にアップグレードすることはできますが、Expressエディションを好みます。私が他のバージョンでもこのコンテキストで本当に私に返済するなら、そうすることができます、そうでなければExpressエディションはうまくいきます。

2
nullまたは空のテーブル値パラメーターを確認するにはどうすればよいですか?
ストアドプロシージャ(SS2k8)があり、テーブル値パラメーターがいくつかあり、それらがnullまたは空になる場合があります。このStackOverflowの投稿を見たところ、null /空のTVPは呼び出しパラメーターリストから単に削除する必要があると述べています。私の問題は、「IF(@tvp IS NULL)」がプロシージャの作成に失敗し、「スカラー変数「@tvpを宣言する必要があります」というメッセージが表示されるため、ストアドプロシージャ内の空またはnullを確認する方法を理解できないことです。TVPでSELECT COUNT(*)を実行してゼロを確認する必要がありますか? コードの抜粋: CREATE PROCEDURE [foo] (@tvp [TvpType] READONLY) AS IF (@tvp IS NOT NULL) -- doesn't work BEGIN -- lots of expensive processing END ELSE BEGIN -- a little bit of cheap processing END ...

4
MySQLが非常に多くの一時MYDファイルを生成するのはなぜですか?
多くのPHP / MySQL Webサイト(フォトギャラリー)をホストしているDebian Linuxサーバーでは、のような「多数の」ファイルがある場合があります/tmp/#sql_6405_58.MYD。 たとえば、今日: [2012-12-15 15:18:11] /tmp/#sql_6405_6.MYD : 88MB [2012-12-15 15:18:11] /tmp/#sql_6405_3.MYD : 22MB [2012-12-15 15:18:11] /tmp/#sql_6405_4.MYD : 138MB [2012-12-15 15:18:11] /tmp/#sql_6405_10.MYD : 88MB ... [2012-12-15 15:18:11] /tmp/#sql_6405_9.MYD : 15MB [2012-12-15 15:18:11] /tmp/#sql_6405_65.MYD : 49MB [2012-12-15 15:18:11] /tmp/#sql_6405_44.MYD : 69MB (同時に59ファイル、6GB以上の場合...はい/ tmpの大きなファイルを監視します) 残念ながら、/tmpと同じパーティション上に/あり、一時的にWebサーバーが壊れ/ます。その後、ファイルが消え、サーバーは通常の状態に戻ります。 すべてのファイル名は#sql_6405_*.MYDパターンに従います。どのMySQL操作が非常に多くの一時ファイルを意味するのかを理解したいと思います。このサーバーには約2000のデータベースがあります。どのデータベースが関係しているかを知ることは可能ですか?

1
結合された仮想テーブルのNEWID()により、意図しないクロス適用動作が発生する
私の実際の作業クエリは内部結合でしたが、クロス結合を使用したこの単純な例では、ほとんど常に問題が再現されているようです。 SELECT * FROM ( SELECT 1 UNION ALL SELECT 2 ) AA ( A ) CROSS JOIN ( SELECT NEWID() TEST_ID ) BB ( B ) 私の内部結合では、NEWID()関数を使用して各行にGUIDを追加した多くの行があり、そのような行の約9に対して、2行の仮想テーブルとの乗算により期待される結果が生成されました。同じGUID。10のうち1つは異なる結果を生成します。これは控えめに言っても予想外であり、テストデータ生成スクリプトでこのバグを見つけるのに本当に苦労しました。 非決定的なgetdate関数とsysdatetime関数を使用して次のクエリを見ると、これは表示されません。私はとにかく、両方の最終結果行に常に同じdatetime値を表示しています。 SELECT * FROM ( SELECT 1 UNION ALL SELECT 2 ) AA ( A ) CROSS JOIN ( SELECT GETDATE() TEST_ID …

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