データベース管理者

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

2
SQL Serverでロックされたテーブルまたは行を検出する
ブロックされたセッションの詳細を追跡する方法を理解/学習しようとしています。 そこで、次のセットアップを作成しました。 create table foo (id integer not null primary key, some_data varchar(20)); insert into foo values (1, 'foo'); commit; 次に、2つの異なるクライアントからデータベースに2回接続します。 最初のセッションの問題: begin transaction update foo set some_data = 'update' where id = 1; ロックを保持するために、明示的にコミットしません。 2番目のセッションでは、同じステートメントを発行します。もちろん、ロックのために待機します。セッション2がfooテーブルを待機していることを確認するために、さまざまなクエリを使用しようとしています。 sp_who2 以下を示します(重要な情報のみを表示するためにいくつかの列を削除しました)。 SPID | ステータス| BlkBy | DBName | コマンド| SPID | リクエストID ----- …


4
SQL Server 2012の復元ウィザードがフリーズする
2012 dbインスタンスと2008 dbインスタンスを備えたSSMS Express 2012を備えた開発用ラップトップがあります。この構成を1年以上使用しています。突然、復元ウィザードを使用できなくなりました。ウィザードはバックアップファイルを選択しますが、MDFおよびLDFの場所を指定するために左上の[ファイル]オプションを選択すると、ダイアログがハングします。私は修理を試みましたが、運はありません。
20 sql-server 


1
データベース設計:同じテーブルに対する2つの1対多の関係
私は、Chequing_Accountテーブル(予算、iban番号、およびアカウントの他の詳細を含む)を持っている状況をモデル化する必要があります。 言い換えれば、同じテーブルの2つの1対多の関係があります。 正規化の要件を尊重するこの問題の解決策を聞きたいです。私が聞いたほとんどのソリューションは次のとおりです。 1)PersonとCorporationの両方が属する共通エンティティを見つけ、これとChequing_Accountテーブルの間にリンクテーブルを作成します。これは私の場合は不可能であり、この特定のインスタンスではなく一般的な問題を解決したい場合でも可能です。 2)2つのエンティティをChequingアカウントに関連付ける2つのリンクテーブルPersonToChequingAccountとCorporationToChequingAccountを作成します。ただし、2人の人物が同じ当座預金口座を持つことは望ましくありません。また、自然人と法人が当座預金口座を共有することは望ましくありません。この画像をご覧ください 3)法人および自然人を指す2つの外部キーをChequing Accountに作成しますが、個人と会社が多数の当座預金口座を持つことができるように強制しますが、ChequingAccount行ごとに両方の関係が指すことはないことを手動で確認する必要がありますchechquingアカウントは法人または自然人のいずれかであるため、法人および自然人。この画像をご覧ください この問題を解決する他の方法はありますか?

1
「NOT FOR REPLICATION」オプションを持つ主キー
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 6年前に移行され ました。 私は最近プロジェクトを引き継ぎましたが、ほとんどのテーブルで主キーにプロパティ " NOT FOR REPLICATION" があることを発見しました。 私はDBAではありませんが、ほとんどのデータベースでは、主キーのないレコードは破損していると考えられます。ほとんどの場合、これらのレコードの主キーはどこかで外部キーとして使用されます。 これは以前の開発者(会社で働いていなかった)側のエラーですか、それとも他のロジックが関係していますか?実稼働環境ではレプリケーションさえ使用しないため、これは実際には深刻な問題には影響しませんが、気付いていないこれらのディレクティブをすべて削除する他の副作用があるかどうか疑問に思っていました。 私はこのトピックに関連する多くの検索用語で多くの有用なヒットを見つけていないので、これは私が逆にする必要がある単なる愚かなエラーであることをかなり確信しているので、この質問は本当に私の妄想を和らげることです。

1
このNO JOIN PREDICATE警告に驚かされるべきですか?
パフォーマンスの低いストアドプロシージャの細かな部分をトラブルシューティングしています。手順のこのセクションでは、NO JOIN PREDICATE警告をスローしています select method = case methoddescription when 'blah' then 'Ethylene Oxide' when NULL then 'N/A' else methoddescription end, testmethod = case methoddescription when 'blah' then 'Biological Indicators' when NULL then 'N/A' else 'Dosimeter Reports' end, result = case when l.res is null or l.res <> 1 then 'Failed' …

3
このクエリの正しい結果は何ですか?
ここのコメントでこのパズルに出会いました CREATE TABLE r (b INT); SELECT 1 FROM r HAVING 1=1; SQL ServerとPostgreSQLは 1行を返します。 MySQLおよびOracleはゼロ行を返します。 どちらが正しい?または、両方とも同等に有効ですか?

3
Postgresqlデータを別のドライブに移動する
クラウド環境としてAWSを使用しています。ルートインスタンスボリュームと同じドライブにPostgreSQLをインストールしました。インスタンスに2番目のドライブを接続してマウントしました。次に、すべてのPostgreSQLデータを別のドライブに移動します。私はまだ開発モードにいるので、この時点で転送が容易になる場合は古いデータを削除できます。これを行う最良の方法は何ですか? PostgreSQLのテーブルスペースは私が見るべきものですか?

2
MSSQL $ SQLEXPRESSの破損したNTFSアクセス許可
データベースサーバーを「保護」しています。これを行うために、SQL Expressインストールが作成したフォルダーからいくつかの権限を削除しました。 D:\SQL D:\SQL\Data D:\SQL\Backup etc.. Dataフォルダーのアクセス許可はそのままにしておきましたが、他のユーザーには必要ないと思われるものはすべて削除しました。 データベースをバックアップできなくなりました。バックアップ場所を選択しようとすると、ダイアログにはd:\ SQLフォルダーに何も表示されません。自分でパスを入力すると、次のように表示されます。 サーバー上の指定されたパスまたはファイルにアクセスできません。必要なセキュリティ特権があること、およびパスとファイルが存在することを確認してください。 ... フォルダ許可の問題のようです。同様の方法で構成された別のサーバが「と呼ばれるアカウントの「許可する」権限の束持っているMSSQL$SQLEXPRESS(私は削除さ知っている)」、しかし、そのような何もありませんので、私は、これらのアクセス許可を再度追加することはできませんグループ、ユーザーまたは構築されたが、 -サーバーのセキュリティ原則。 このMSSQL$SQLEXPRESSアカウントにアクセス許可を追加するにはどうすればよいですか?

2
この実行計画を説明できますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 このことに出会ったとき、私は他の何かを研究していました。いくつかのデータを含むテストテーブルを生成し、さまざまなクエリを実行して、クエリを記述するさまざまな方法が実行プランにどのように影響するかを調べていました。ランダムテストデータの生成に使用したスクリプトは次のとおりです。 IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('t') AND type in (N'U')) DROP TABLE t GO CREATE TABLE t ( c1 int IDENTITY(1,1) NOT NULL ,c2 int NULL ) GO insert into t select top 1000000 a from (select t1.number*2048 + t2.number …

2
式の集約LIKEクエリを高速化するためにインデックスを作成する方法は?
タイトルに間違った質問をしている可能性があります。事実は次のとおりです。 カスタマーサービスの担当者は、Djangoベースのサイトの管理インターフェイスでカスタマールックアップを実行すると、応答時間が遅いことに不満を抱いていました。 Postgres 8.4.6を使用しています。遅いクエリのログを記録し始め、この犯人を発見しました: SELECT COUNT(*) FROM "auth_user" WHERE UPPER("auth_user"."email"::text) LIKE UPPER(E'%deyk%') このクエリは、実行に32秒以上かかります。EXPLAINが提供するクエリプランは次のとおりです。 QUERY PLAN Aggregate (cost=205171.71..205171.72 rows=1 width=0) -> Seq Scan on auth_user (cost=0.00..205166.46 rows=2096 width=0) Filter: (upper((email)::text) ~~ '%DEYK%'::text) これは、Django Adminアプリケーションによって生成されたDjango QuerySetからDjango ORMによって生成されたクエリなので、クエリ自体を制御することはできません。インデックスは論理的なソリューションのようです。これを高速化するためにインデックスを作成しようとしましたが、違いはありません。 CREATE INDEX auth_user_email_upper ON auth_user USING btree (upper(email::text)) 何が間違っていますか?このクエリを高速化するにはどうすればよいですか?

1
mysqldumpはデフォルトでインデックスをエクスポートしますか?
私は、mysqldumpをして少しいじっし、それが輸出指数を(ない場合、私は、思っていたFULLTEXT、INDEXデフォルトでは、...)。私はそれを読んで、このオプションを見つけました: --disable-keys, -K 実際にインデックスをエクスポートすることを示唆しています。しかし、私は自分の解釈を信用したくありません。そして、私はそれが正しいことを確認したいです(または間違っています;-))。誰でもそれを確認できますか?

7
1つのレコードにブール値列のtrue値を強制し、他のすべての値にfalse値を強制するにはどうすればよいですか?
テーブル内の1つのレコードのみが、そのテーブルにアクセスする可能性のある他のクエリまたはビューの「デフォルト」値と見なされるように強制します。 基本的に、このクエリが常に正確に1行を返すことを保証したいと思います。 SELECT ID, Zip FROM PostalCodes WHERE isDefault=True SQLでこれを行うにはどうすればよいですか?


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