データベース管理者

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


1
Postgresqlはそれ自体で「高速シャットダウン」を実行しました。どうして?どのようにしてそれを行うことができましたか?
ここに投稿する前に、私はすでにグーグルでマニュアルをできるだけ読んでいます。 バージョン情報:Ubuntu10.x上のPostgres8.4 私はpostgresサーバーを実行しているパーソナルラップトップを持っていて、JDBCを使用するJavaスクリプトが1600分間(以前は数週間実行していた)実行された後、管理者がサーバーを再起動すると言って死にました。これが私がpgsqlログで見つけたものです: Feb 29 07:46:55 krufe-laptop postgres[3578]: [2-1] 2012-02-29 07:46:55 EST LOG: incomplete startup packet Feb 29 07:46:56 krufe-laptop postgres[1113]: [2-1] 2012-02-29 07:46:56 EST LOG: received fast shutdown request Feb 29 07:46:56 krufe-laptop postgres[1113]: [3-1] 2012-02-29 07:46:56 EST LOG: aborting any active transactions Feb 29 07:46:56 krufe-laptop postgres[24095]: [2-1] …
12 postgresql 

3
複数の関係に対して1つのテーブルを用意するべきではないのはなぜですか?
データベースにStore、Employee、Saleなどの複数のリレーションがあり、ペアを単純なバイナリリレーションで接続するとします。個人的には、外部キーで構成される自然キーを使用して、Employee_StoreおよびEmployee_Saleという名前のテーブルを作成します。 現在、私の同僚は、複数のリレーションシップ用に1つのテーブルを作成することを強く求めています。上記の例の場合、EmployeeLinksというテーブルがある可能性があります。 EmployeeLinks( IdLink int PK, IdEmployee int FK null, IdStore int FK null, IdSale int FK null, LinkType int not null ) これが良い考えではない理由を教えてください。私は自分の主張を持っていますが、私はそれらを非公開にし、あなたの公平な意見を聞きたいと思います。 編集: 最初、上のテーブルには主キー(!)がありません。外部キーはnullを許可するため、代理キーが唯一のオプションです。

1
CAP定理対BASE(NoSQL)
CAP定理対BASE(NoSQL) こんにちは、私はNoSQLに関する私の仕事のための小さな論文を書こうとしています。CAP定理をすべてではないにしてもほとんどのNoSQLデータベースが準拠していると説明しました。私は後でNoSQLとRDBMSの違いについての論文を読みましたが、NoSQLデータベースはACIDの対応するBASEを使用すると述べています。 BASE、ACID、CAPのプロパティは知っていますが、CAPの定理とBASEの関係を理解するのに苦労しました。私が理解しているように、CAPの定理はBASEの頭字語につながりますが、それは正しい結論ですか?または、いくつかの類似したプロパティを共有するデータベースを「構築」するための2つの異なるアプローチですか? このブログ投稿(http://www.johndcook.com/blog/2009/07/06/brewer-cap-theorem-base/)で、著者はこう書いています: フォールトトレラントなBASEの世界でソフトウェアを開発するのは、退屈なACIDの世界と比較すると困難ですが、BrewerのCAPの定理では、スケールアップする場合は選択肢がないとされています。ただし、Brewerがこのプレゼンテーションで指摘しているように、ACIDとBASEの間には連続性があります。優先順位に従って、連続体の一方の端またはもう一方の端にどれだけ近づけるかを決定できます。 別の記事で著者はこう書いている: 上記のNOSQLデータベースの多くは、より良い可用性とパーティショニングを実現するために、整合性に関する要件を緩和しています。これにより、システムはBASE(基本的に使用可能、ソフト状態、結果的に整合性)と呼ばれます。これらには古典的な意味でのトランザクションがなく、データモデルに制約を導入して、より優れたパーティションスキーム(Dynamoシステムなど)を有効にします。CAP、ACID、およびBASEのより包括的な議論は、この紹介で利用できます。 これは、CAP がBASEをもたらすことを明確に述べています。 誰かがこれを明確にして、私の混乱を取り除くことができるといいのですが。 ありがとう -Mestika
12 nosql 

4
実行中のジョブ内からジョブIDまたはジョブ名を取得する
すべてのサーバーでジョブの結果を書き戻す中央DBがあります。SQLジョブでpowershellを介して3つのパラメーターを中央サーバーのspに戻し、ジョブがその時点で実行されていることを確認します。次に、情報がSSRSを介して公開されるため、ジョブの失敗/長時間実行されているジョブ/ &まだ実行されていないはずのジョブ(または誰かがスケジュールをめちゃくちゃにした場合)。 これを行うには、すべてのサーバーの各ジョブに2つのジョブステップを追加します。スクリプトを各ジョブに1ステップだけ追加して、ネットワーク共有から呼び出すこともできます。 しかし、私の問題は、渡す3つのパラメーターの1つです。実行中のジョブ内から実行中のジョブIDまたはジョブ名を取得する必要があるので、nameパラメーターをハードコーディングする必要はありません。私が渡す3つのパラメーターは、jobid、status(success / fail)、errormsgです。私が書いたPowerShellスクリプトは非常に単純です。 Invoke-sqlcmd -ServerInstance "MYRemoteSYSTEM" -Database remoteDB -Query "exec dbo.JOB_LOG 'JOBNAME / ID'、 'Success / FAIL'、 'BAD MESSAGE HERE'" これにより、必要なものがテーブルに書き込まれます。msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs /を見てきましたが、実行中のジョブが複数ある場合に、正しい実行ジョブのIDまたは名前を取得できることは保証されません同時に。 私もsys.sysprocessesを調べてみましたが、エージェントジョブはpowershellスクリプトなので、「。Net SqlClient Data Provider」と表示されるので、「SQLAgent-」と表示されるジョブからバイナリJOBIDをトリミングできません。 TSQL JobStep(Job 0xF1800243164745429C30474FFD5C990C:Step 1) "---これはデニーチェリーの投稿から学んだ-感謝デニー - 実行中のジョブIDを取得する方法についてのアイデアは、大歓迎です。 おかげで、 クリス

4
RESTORE HEADERONLYからフィールドを抽出する
「RESTORE HEADERONLY」を使用して、復元しようとしているバックアップが作成された日付を取得しようとしています。 コマンド: RESTORE HEADERONLY FROM DISK = '<path to .bak file>' クエリアナライザーで正常に動作し、50列などの結果セットを提供します。 問題は、実際にコードからこれにアクセスすることです。 これを一時テーブルに入れるには、50:ish列の1つ1つを宣言し、それに挿入してexec、そこから必要な値を取得します。 問題は、将来のバージョンで列を追加する場合、非常に脆弱なソリューションのように思われるので、結果セット全体を一時テーブルとして宣言する必要がないようにしたいということです。 すべての列を宣言せずに、この結果セットから単一の列を取得する方法はありますか?

5
MySQL-InnoDBのALTER TABLEへの最速の方法
変更したいInnoDBテーブルがあります。テーブルには約8,000万行あり、いくつかのインデックスを終了します。 列の1つの名前を変更し、さらにいくつかのインデックスを追加したいと思います。 それを行う最速の方法は何ですか? 「プレーン」alter table、最速のソリューションですか? この時点で、私が気にしているのは速度です:)

2
1つのクエリでMySQL ENUMカラムの値の名前を変更できますか?
を含むデータベーステーブルがあるとしENUM('value_one','value_two')ます。それをに変更したいENUM('First value','Second value')。私は現在次のようにしています: ALTER TABLE `table` MODIFY `column` ENUM('value_one','value_two','First value','Second value'); UPDATE `table` SET `column`='First Value' WHERE `column`='value_one'; UPDATE `table` SET `column`='Second Value' WHERE `column`='value_two'; ALTER TABLE `table` MODIFY `column` ENUM('First value','Second value'); これを行うためのより効率的な方法はありますか?EGはこれを単一の ALTER TABLEステートメントで達成する方法 ですか?

5
PostgreSQL:テーブルの作成日
私は最近、多くのDBテーブルが作成されているプロジェクトを終了しました。 これらのテーブルのほとんどには一時的なゴミが含まれているので、これらすべてのテーブルを一覧表示する簡単な方法を探しています。 作成日に基づいてソートされたすべてのDBテーブルを一覧表示する方法はありますか?

5
一連の値から、テーブルの列に格納されていない値を見つけるにはどうすればよいですか?
数十万の整数を潜在的に格納するテーブルがあります desc id_key_table; +----------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+--------------+------+-----+---------+-------+ | id_key | int(16) | NO | PRI | NULL | | +----------------+--------------+------+-----+---------+-------+ プログラムから、私は整数の大きなセットを持っています。上記のid_key列にない整数を確認したいのですが。 これまでのところ、私は次のアプローチを考え出しました: 1)各整数を反復処理し、以下を実行します。 select count(*) count from id_key_table where id_key = :id_key countが0の場合、id_keyはテーブルにありません。 これは恐ろしくて恐ろしい方法のようです。 2)一時テーブルを作成し、各値を一時テーブルに挿入して、2つのテーブルでJOINを実行します。 create temporary table id_key_table_temp …
12 mysql 

5
オープンソースの階層型データベース管理システムはありますか[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 10か月前に閉鎖。 階層型データベース管理システムを探していて、出会ったのはIBMのimsだけでした。使用できるオープンソースシステムはありますか?

3
T-SQLでCASTを使用したパフォーマンスヒット
指定されたフィールドに対して一般的にSQL条件ステートメントを発行するSQLジェネレーターがあります(説明のために、次のようにラベルを付けますmyField)。 myFieldタイプがの場合NVARCHAR、次のように、上記のフィールドと文字列を比較できますmyField = 'foo'。 ただし、これはタイプのフィールドでは機能しませんNTEXT。したがって、キャストとの比較を行う必要があります CAST(myField as NVARCHAR(MAX)) = 'foo'。これmyFieldは、タイプがNVARCHARまたはの場合に実際に機能しNTEXTます。 すでにタイプのあるフィールドで前述のキャストを実行すると、パフォーマンスにどのような影響がありNVARCHARますか?私の希望は、SQL ServerがそれmyFieldが既に型であると動的に認識できるほどNVARCHAR効果的になることです(事実上をCAST何もしない状態に変えます)。

3
シリーズから各日付をカバーする日付の範囲の数を数える最速の方法
次のようなテーブル(PostgreSQL 9.4)があります。 CREATE TABLE dates_ranges (kind int, start_date date, end_date date); INSERT INTO dates_ranges VALUES (1, '2018-01-01', '2018-01-31'), (1, '2018-01-01', '2018-01-05'), (1, '2018-01-03', '2018-01-06'), (2, '2018-01-01', '2018-01-01'), (2, '2018-01-01', '2018-01-02'), (3, '2018-01-02', '2018-01-08'), (3, '2018-01-05', '2018-01-10'); 次に、指定された日付と種類dates_rangesごとに、各日付の行数を計算します。ゼロはおそらく省略できます。 望ましい結果: +-------+------------+----+ | kind | as_of_date | n | +-------+------------+----+ | 1 | …

1
PostgreSQLデータベースの圧縮
500GBを超える大きなPostgreSQLデータベースがあり、大きすぎます。とにかく、データベースをより扱いやすいサイズに圧縮する方法はありますか?SquashFSと177GBに圧縮されたデータベースでこれを実行しようとしましたが、PostgreSQLではデータベースに書き込みアクセスがあり、Squashedシステムは読み取り専用である必要があります。より経験豊富なデータベースユーザーは、この目標を達成するための提案を持っていますか? データベースは地球のGISデータを保持し、展開されたシステムでローカルに使用されます。現在は1TB SSDに搭載されていますが、大規模なデータベースに対応するためだけに、追加のハードドライブを使用しないようにしています。データベースは問題なく動作します。管理しやすいサイズに圧縮し、別のドライブに配置しないようにします。

4
カウントがゼロのグループを取得するにはどうすればよいですか?
SQLサーバーデータベースのデータからグラフを作成しようとします。カウントがゼロであっても、このストリートに住んでいるユーザーのカウントを含むすべてのストリートを取得します。 このために私はこのクエリを試しました: Create table Streets( ID int IDENTITY primary key, Name varchar(100) ); create table users( ID int IDENTITY primary key, Username varchar(100), StreetID int references Streets(id) ); insert into streets values ('1st street'), ('2nd street'), ('3rd street'), ('4th street'), ('5th street'); insert into users values ('Pol', 1), ('Doortje', 1), …

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