データベース管理者

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

2
公式のPostgreSQL大文字表記規則[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 DB、テーブル、およびフィールド名の大文字使用に関する公式のPostreSQL規約はありますか? 公式サイトの例は小文字と_単語の分離を示唆しており、このポリシーが公式かどうか疑問に思います。 CREATE TABLE films ( code char(5) CONSTRAINT firstkey PRIMARY KEY, title varchar(40) NOT NULL, did integer NOT NULL, date_prod date, kind varchar(10), len interval hour to minute );

3
データベースをオフラインにせずにログファイルを移動する
データベースをオフラインにせずに、データベースログファイルを新しいパーティションに移動する必要があります。 これを行う通常の方法は、DBをデタッチし、ログファイルを移動してから、dbを再アタッチすることです。 データベース自体をオフラインにせずにこれを行うことは可能ですか?

3
JSONデータ型のJSON要素を更新する
PostgreSQL 9.3データ型の要素をどのように更新できるかわかりません。 私の例: CREATE TABLE "user" ( id uuid NOT NULL, password character varying(255), profiles json, gender integer NOT NULL DEFAULT 0, created timestamp with time zone, connected timestamp with time zone, modified timestamp with time zone, active integer NOT NULL DEFAULT 1, settings json, seo character varying(255) NOT NULL, …

1
SQL Server 2012での2つのクエリの比較
SQL Server 2012の2つのクエリを比較しています。目標は、最適なクエリを選択するときに、クエリオプティマイザーから利用可能な関連情報をすべて使用することです。両方のクエリは同じ結果を生成します。すべての顧客の最大注文ID。 FREEPROCCACHEおよびDROPCLEANBUFFERSを使用して各クエリを実行する前に、バッファプールをクリアしました 以下の情報を使用して、どのクエリがより良い選択ですか? -- Query 1 - return the maximum order id for a customer SELECT orderid, custid FROM Sales.Orders AS O1 WHERE orderid = (SELECT MAX(O2.orderid) FROM Sales.Orders AS O2 WHERE O2.custid = O1.custid); -- Query 2 - return the maximum order id for a customer SELECT …

5
データベース全体で単一のプライマリキーシーケンスを共有していますか?
すべてのテーブルで単一のシーケンスを主キーとして使用することは受け入れられる慣行ですか?その場合、テーブル全体で単一の主キーシーケンスを使用するよりも客観的に優れていますか。 私はDBAではなく、ジュニアソフトウェア開発者なので、優れたデータベース設計の基本の多くをまだ学んでいます。 編集:誰かが疑問に思っている場合、私は最近、私たちのデータベース管理者の1人によるデータベース設計の批判を読みました。私はこれまでに学びました。 編集2:コメントの質問に答えるために、これはOracle 11g用ですが、データベース固有ではないレベルで疑問に思っていました。この質問がデータベースに依存する場合、その理由を知りたいと思いますが、そのような場合、Oracleに固有の回答を探しています。

1
SQL Server多対1レプリケーション
8つの個別のSQL Server 2008 R2マシンがあり、それぞれが1つのデータベースをホストしています。各データベースには、同一のテーブル構造とスキーマ、および完全に一意のデータがあります。 レポートサーバー(2008または2012)を確立して、8つのソースサーバーの選択したテーブルの行をレポートサーバー上のそれらのテーブルの単一インスタンスに統合します。これは一方向のレプリケーションです(レポートサーバーは変更されません)。比較的低いレイテンシ(20〜30秒など)でソースデータベースから変更を複製する必要があります。 さらに、ソースサーバーへの影響をできるだけ少なくしてこれを実現する方法を見つけたいと思います。これらのサーバーに対するサードパーティのエージェント、トリガー、またはスキーマの変更は、私の環境では困難です。 私の質問: この目標を達成するための有望なアーキテクチャとテクノロジーは何ですか? SQL Serverマージレプリケーションを見てきましたが、遅延が心配です。これはこの目標に適した技術ですか? トランザクションレプリケーション用の多対1のアーキテクチャはありますか? レポートサーバー上の8つのデータベースへの1対1のレプリケーションと、それに続くカスタムマージ機能(2ステップレプリケーション)を検討する必要がありますか? ありがとう、ジョン

5
SQL Serverに、記述されたクエリ条件を強制的に実行しますか?
私はSQL Server 2008 R2を使用していますが、この疑似クエリ(SP)があります: select ... from ... WHERE @LinkMode IS NULL AND (myColumn IN (...very long-running query...)) ... ... 問題は、クエリを実行するのに非常に長い時間がかかること@LinkMode=2です。 お気づきのように、@ LinkModeがnullの場合にのみ長時間実行クエリを実行する必要がありますが、ここではそうではありません。私の場合、@ LinkMode = 2! ただし、次のように変更すると: select ... from ... WHERE 1=2 AND (myColumn IN (...very long time exeted query...)) ... ... SP は高速で実行されます。 以前に、オプティマイザーが条件の順序を最適化できることを聞いたことがあります。 だから私は尋ねる: オプティマイザが別のルートを選択した場合でも、次のことを確認するよりも高速なのは何=nullですか?私が意味する、私はそのチェックが考えるif a==nullあるずっと速く、他の長いクエリを実行するよりも... どのように私がすることができます強制、私はそれ(同じ順序)書いたとして、クエリを実行するために、SQL …



3
外部キー-代理キーまたは自然キーを使用してリンクしますか?
テーブル間の外部キーを自然キーまたはサロゲートキーにリンクするかどうかのベストプラクティスはありますか?私が本当に見つけた唯一の議論は(私のgoogle-fuが欠けていない限り)この質問でのJack Douglasの答えです。私はルールが変わるということを超えた議論を知っていますが、これはどんな状況でも考慮する必要があるものです。 尋ねる主な理由は、自然キーを持つFKを使用するレガシーアプリケーションがあることですが、開発者からOR / M(この場合はNHibernate)に移行する強いプッシュがあり、フォークは既にいくつかを生成していることです変更を壊すので、自然キーを使用して変更を元に戻すか、FKのサロゲートキーを使用するようにレガシーアプリを移動します。私の腸は元のFKを復元すると言っていますが、これが本当に正しい道かどうかは正直わかりません。 テーブルの大部分には、既に一意キーとPKが定義された代理キーと自然キーの両方が既に定義されているため、このインスタンスでは余分な列を追加する必要はありません。SQL Server 2008を使用していますが、これがすべてのDBに十分な汎用性を持っていることを願っています。


5
TRY-CATCHでキャッチされないリンクサーバーエラー
リンクサーバーのリストをループし、各サーバーに対して特定のクエリを実行するジョブを設定しています。TRY-CATCHブロック内でクエリを実行しようとしているので、特定のサーバーに問題がある場合はログに記録できますが、他のサーバーで続行します。 ループ内で実行しているクエリは次のようになります。 BEGIN TRY SELECT * FROM OPENQUERY([server1], 'SELECT 1 AS c;'); END TRY BEGIN CATCH SELECT ERROR_NUMBER(), ERROR_MESSAGE(); END CATCH; PRINT 'We got past the Catch block!'; サーバーへの接続に問題がある場合、コードはただちに失敗し、CATCHブロックに転送されません。サーバーは接続しているが、実際のクエリにエラーがある場合(ゼロ除算など)、CATCHブロックで期待どおりにキャッチされます。 たとえば、存在しないことがわかっている名前でリンクサーバーを作成しました。上記を実行するとき、私はちょうど得る: OLE DB provider "SQLNCLI" for linked server "nonserver" returned message "Login timeout expired". OLE DB provider "SQLNCLI" for linked server …

4
MySQLの2つのテーブルの継承をモデル化する方法
データを保存するテーブルがいくつかあり、仕事をした人のタイプ(労働者、市民)に応じてeventテーブルに保存しますが、今ではこれらの人が動物を救いanimalます(テーブルがあります)。 最後に、男(労働者、市民)が動物を救ったというイベントを保存するテーブルが必要ですが、お辞儀をする必要がありidますか、または仕事をした市民または労働者の価値を知る方法はありますか? さて、このデザインでは、どの人が仕事をしたかをどのように関連付けるかわかりません、私はこの最後の表の列にcivil_idベールを保存するだけの人(別名市民)しかいpersonません...しかし、どのように市民か労働者かを知っている場合、他の「中間」テーブルが必要ですか? 次の図の設計をMySQLに反映する方法は? 追加の詳細 次の方法でモデル化しました。 DROP TABLE IF EXISTS `tbl_animal`; CREATE TABLE `tbl_animal` ( id_animal INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(25) NOT NULL DEFAULT "no name", specie VARCHAR(10) NOT NULL DEFAULT "Other", sex CHAR(1) NOT NULL DEFAULT "M", size VARCHAR(10) NOT NULL DEFAULT "Mini", edad VARCHAR(10) NOT …

1
システムテーブルから選択する許可を与える
データベースMicrosoft SQL Server 2008 r2があります。メインデータベースのテーブルにアクセスできるmarieというユーザーが定義されています。これはうまく機能します。ここで、marieがこのクエリを実行できるようにしたいと思います。 SELECT resource_type,spid,login_time,status,hostname,program_name,nt_domain,nt_username,loginame FROM sys.dm_tran_locks dl JOIN sys.sysprocesses sp on dl.request_session_id = sp.spid 関連するテーブルはマスターテーブルです。マリーに彼らから読む許可を与えるにはどうすればいいですか?私はすでにdboとして以下を実行しようとしました: GRANT ALL on sys.dm_tran_locks TO marie GRANT ALL on sys.sysprocesses TO marie それでも、marieが上記のクエリを実行しようとすると、エラーは次のようになります。 Msg 297, Level 16, State 1, Line 1 The user does not have permission to perform this action. 私は何を間違えていますか?
14 sql-server 

2
MySQLでREGEXPを使用してSUBSTRINGを使用する方法
次のような状況があります。MySQLを使用して、記述から正規表現を部分文字列にする必要があります。説明: Lorem D9801 ipsum dolor sit amet D9801はREGEXPです。すべての強力なテキスト記述は、異なるコンテンツを持っていますが、私の正規表現すべきであるように見えます:REGEXP「D [[:桁:]] {4}」 REGEXPの先頭は常に「D」、末尾は「xxxx」-末尾は4桁:Dxxxx REGEXPがtrue / false値のみを返すことは知っていますが、「D9801」値のみを返すクエリを作成するにはどうすればよいですか? 私はこのようなことを試しました: SELECT SUBSTRING (description, LOCATE(REGEXP 'D[[:digit:]]{4}', description), 5) FROM ( SELECT "Lorem D9801 ipsum dolor sit amet" AS description ) temp 私はそれが間違っていることを知っているので、これを試してみます: SELECT id, SUM(description REGEXP 'D[[:digit:]]{4}') AS matches, CASE WHEN (SUM(description REGEXP 'D[[:digit:]]{4}') > 0) …

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