データベース管理者

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

4
DELETEステートメントがREFERENCE制約と競合しています
私の状況は次のようになります: テーブルSTOCK_ARTICLES: ID *[PK]* OTHER_DB_ID ITEM_NAME テーブルの場所: ID *[PK]* LOCATION_NAME テーブルWORK_PLACE: ID *[PK]* WORKPLACE_NAME テーブルINVENTORY_ITEMS: ID *[PK]* ITEM_NAME STOCK_ARTICLE *[FK]* LOCATION *[FK]* WORK_PLACE *[FK]* INVENTORY_ITEMSの3つのFKは、明らかに、他のそれぞれのテーブルの「ID」列を参照しています。 ここに関連するテーブルは、STOCK_ARTICLEとINVENTORY_ITEMSです。 これで、上記のデータベースを別のデータベース(OTHER_DB)と「同期」するいくつかの手順(SQLスクリプト)で構成されるSQLジョブがあります。このジョブ内のステップの1つは「クリーンアップ」です。同じIDを持つ他のデータベースに対応するレコードがないSTOCK_ITEMSからすべてのレコードを削除します。次のようになります。 DELETE FROM STOCK_ARTICLES WHERE NOT EXISTS (SELECT OTHER_DB_ID FROM [OTHER_DB].[dbo].[OtherTable] AS other WHERE other.ObjectID = STOCK_ARTICLES.OTHER_DB_ID) しかし、このステップは常に失敗します: DELETEステートメントは、REFERENCE制約「FK_INVENTORY_ITEMS_STOCK_ARTICLES」と競合しました。データベース「FIRST_DB」、テーブル「dbo.INVENTORY_ITEMS」、列「STOCK_ARTICLES」で競合が発生しました。[SQLSTATE 23000](エラー547)ステートメントは終了しました。[SQLSTATE 01000](エラー3621)。ステップは失敗しました。 したがって、問題は、レコードがINVENTORY_ITEMSによって参照されている場合、STOCK_ARTICLESからレコードを削除できないことです。しかし、このクリーンアップは機能する必要があります。つまり、クリーンアップスクリプトを拡張して、最初にSTOCK_ITEMSから削除する必要のあるレコードを特定する必要がありますが、対応するIDがINVENTORY_ITEMS内から参照されているため、できません。次に、最初にINVENTORY_ITEMS内のレコードを削除してから、STOCK_ARTICLES内のレコードを削除します。私は正しいですか?SQLコードはそのときどのように見えますか? ありがとうございました。

2
グループに対して条件が満たされた行を選択(一時テーブルなし)
3列のテーブルがある場合: ID category flag 1 A 1 2 A 0 3 A 0 4 B 0 5 C 0 flag = 1カテゴリごとに少なくとも1回はあるすべての行を選択します。 予期された結果: ID category flag 1 A 1 2 A 0 3 A 0 次のような一時テーブルを使用して解決できます。 select ID into #tempTable from someTable where flag = 1 select * from someTable …

5
与えられた範囲の素数
最近、すべての素数(1〜100)を印刷するタスクが与えられました。私はそこに劇的に失敗しました。私のコード: Create Procedure PrintPrimeNumbers @startnum int, @endnum int AS BEGIN Declare @a INT; Declare @i INT = 1 ( Select a = @startnum / 2; WHILE @i<@a BEGIN @startnum%(@a-@i) i=i+1; ) END 完成せずに終わってしまいましたが、データベース(SQL Server 2008 R2)でこのようなプログラムを実行することは可能でしょうか。 はいの場合、どのように終了する可能性があります。

2
行圧縮とページ圧縮の違いを説明してください
どれを適用するか、いつ圧縮を適用するのが適切な時期かを判断しようとしています。この質問を投稿して、このコミュニティから洞察を得ます。私はいくつかの記事を読みましたが、DBアドミニストレーターでこれに対処する場所が必要でした。

1
クラスタ化インデックスシークと非クラスタ化インデックスシークの違い
クラスタ化インデックス(CI)シークと非クラスタ化インデックス(NCI)シークの違いは何ですか?一方が他方よりもパフォーマンスが良いですか? これを尋ねる理由は、5,000万行と150列のテーブルがあるためです。これにはID、クラスター化インデックスとして定義された名前の列があります。同じインデックスキーIDと7つのinclude-d列を持つNCIがもう1つあります。NCインデックスはここでは重複しており、安全に削除できるようです。 安全にドロップできる場合、またはそのままにしておく必要がある場合は、専門家の意見/アドバイスが必要ですか?

2
Cassandraがカーディナリティの高い列にインデックスを作成しないことを推奨するのはなぜですか?
Cassandraのドキュメントには、 次の状況ではインデックスを使用しないでください。 カーディナリティの高い列では、大量のレコードに対して少数の結果をクエリするため。以下のカーディナリティの高い列インデックスの使用に関する問題を参照してください。 それは続きます、 カーディナリティの高い列にインデックスを作成すると、個別の値が多くなり、フィールド間のクエリでシークが多くなり、結果が非​​常に少なくなります。10億曲の表では、アーティストではなくライター(通常は各曲に固有の値)で曲を検索するのは、非常に非効率的です。Cassandraビルトインインデックスを使用する代わりに、テーブルをインデックスの形式として手動で維持する方が効率的です。一意のデータを含む列の場合、インデックス付きの列を持つテーブルへのクエリ量が中程度で一定の負荷がかかっていない限り、便宜上インデックスを使用するとパフォーマンスが向上することがあります。 しかし、実際には決して質問に答えることはできません。なぜ非効率なのでしょうか。「手動でテーブルをインデックスの形式として維持する」が何を意味するのか私にはわかりません。ただし、「...クエリの量が中程度である限り、便宜上インデックスを使用するとパフォーマンスが向上する場合があります...」とは多少矛盾します。 これは、PKをいつ、どこで使用できるかを教えようとしているだけですか?非効率とは何ですか?私の理解では、インデックスにヒットするクエリはクラスター内のすべてのノードをクエリする必要があり、各ノードはローカルインデックスでルックアップを実行し、結果が集計されます。ロットの最も遅いノードを待たなければならないため、ネットワークの遅延を支払うことを除いて、これは必ずしも高価ではありません(各インデックスの検索はかなり安価でなければなりません)。ここで何か不足していますか? しかし、私が膨大な数のアイテムを含むコレクションを持っている場合-まれに-異なるがほとんど一意の属性で検索する必要がある…これは適切な用途ですよね? veryみんな?IDKは、レプリケーションが3のレプリケーション係数でクラスタの1/3をヒットできるかどうかを意味しますか?
10 index  cassandra 

1
SQL ServerでHEAPフラグメンテーションを下げる方法は?
私は最近、1つのヒープテーブルに70%以上の断片化があることがわかりました。だから私はすることにしました ALTER TABLE dbo.myTable REBUILD 面白いことに、その後20%の断片化がありました。それ以来、そのテーブルへの書き込みはありませんでした。だから私はもう一度リビルドをすることにしました。 2回目以降は、テーブルハットの断片化が50%増えるため、さらに多くのことを実現できます。 どうしてこんなことが起こるのか本当にわかりません...

1
SQL Server Management Studio(SSMS)内のアクティビティモニターのSQLCLR待機タイプとは何ですか?
SQL Prodサーバーをチェックすると、アクティビティモニターを開くたびSQLCLRに、アクティビティモニターのリソース待機セクションの最初のリストに常に表示されます。それは常に高い数を持っています。何のSQLCLRため?SQLCLRアクティビティモニターでリソース待機数が多いサーバーに問題がありますか?

1
HADRワーカースレッドの使用率が高い
HADRプール内の可用性グループのワーカースレッド数が、「通常、レプリカあたり3〜10個の共有スレッドがある」という最小使用量を大幅に超えるのはなぜですか? 1つのケースでは、3つの可用性グループと合計10のデータベースで300以上のスレッドの使用を観察しました。SQL Server 2014 SP1。 私たちのリードは、セカンダリレプリカのバックアップ、プライマリレプリカの高アクティビティ、セカンダリレプリカのレポートです。 AGはVMwareのデータセンターにあります。合計16のスケジューラー、通常のワーカースレッドは200未満の範囲です。サーバーのmax_dopは2です。 3 AG、10 DB、各4レプリカ-プライマリ、2読み取り専用、1読み取り不可。 セカンダリ1つは同期、2つは非同期 大規模なマルチホストクラスター上の物理32コア上の16 vcore。 過剰プロビジョニングはありません。 他の小さいVM 4-8コアは同じ場所に配置されますが、CPUを圧迫しません ワーカースレッドのスパイクが原因でサービス拒否が発生したことが確認されました。AGへのワーカースレッドの帰属は、それらのワーカースレッドのみが制限を超えることができるため、私たちの仮定です。 以下のSQL Server Premier Field Engineerブログからのリンクは、コンテキストで読んでも完全な答えにはなりません。 SQL Server 2012 AlwaysOn可用性グループのワーカースレッド消費の監視 実際のワーカースレッドは、sp_configureの「最大ワーカースレッド」値を超えていますか?

3
複数のデータベースを同じ時点にバックアップする
通常、バックアップを開始するときは、変更のコミットを許可しないか、データベースにアクセスできなくなります。データベースがシングルユーザーモードになることを意味しますが、バックアップを開始し、データベースを解放して使用します。また、バックアップを開始したら、進行中の変更をバックアップファイルに書き込まないようにします。Microsoft SQL Server 2012でこれを実現する方法を知りたいです。 さて、まず私の問題を説明させてください。現在、バックアップが完了するまで、データベースをシングルユーザーモードに設定しています。このモードは、バックアップの進行中にデータの変更を回避するという私の目的に役立ちます。しかし、私のアプリケーションは複数のデータベースに関連付けられています(各データベースは相互にリンクされており、毎月作成し続けるvar dbsがあります)。そのため、これらすべてのデータベースのバックアップは退屈なプロセスになり、さらに重要なのは、バックアップの進行中は、ユーザーをシステムから除外する必要があることです。 そこで、以下の要件を満たすバックアップメカニズムを探しています。 一度にすべてのデータベースのバックアップを開始し、使用できるようにデータベースを解放します。 データベースは相互にリンクされているので、バックアップファイルでデータの一貫性を維持したいと考えています。したがって、このデータ整合性の要件のため、進行中の変更をバックアップファイルにコミットしたくありません。 必要なのは、ある時点でのすべてのデータベースのバックアップです。

4
特定のSQL ServerにアクセスするすべてのIPまたはユーザーを検索する
SQLサーバーを見つけたが、どのアプリケーションがそれに接続しているかがわからないとします。多分私は1つのアプリケーションを見つけますが、それがそれを使用している唯一のアプリケーションかどうかはわかりません。 すべての異なる接続を見つける良い方法はありますか?

2
投稿への高評価または投票
ユーザーが投稿したりブログを書いたりする小さなプログラムを作っています。これらの投稿では、他のユーザーがFacebookのように投稿を高く評価したり、低く評価したり、Stackoverflowのように投稿に賛成または反対票を投じたりできます。一般的に使用されている適切なデータベース構造と、プログラムがその構造で効率的に機能することを知りたいのですが。2つのオプションがあります 最初 役職: id head message datepost likes dislikes 1 ab anchdg DATE 1,2,3 7,55,44,3 上記のようにid、postidです。「いい1,2,3ね!」列には、投稿またはブログを高く評価したか賛成したユーザーのIDを指定します。7,55,44,3投稿またはブログを低評価または反対票を投じたユーザーのIDです。 二番目 役職: id head message datepost 1 ab anchdg DATE いいね: id postid userid 1 1 1 2 2 2 嫌い: id postid userid 1 1 7 2 1 55 このように、私は投稿のいいねを取得するために、いいねと嫌いのために2つの個別のテーブルを作成する必要があります。このようにして、テーブル、つまりLikes&Dislikesは非常にいっぱいになります。これにより、テーブルが重くなり、処理が遅くなる場合があります。 それで、私はこのタスクを達成するためのより良い標準的な方法がどれであるか知りたいですか?

1
pgAdminはリモート操作で非常に遅い
私の開発サーバーにリモート接続しているローカルのpgAdminからこのクエリを実行します。 select * from users order by random() limit 1; それは17秒間ハングし、表示されます Total query runtime: 148 ms. 1 row retrieved. また、テーブルを右クリックしても、すべての操作でハングします。 その後、RDPを介して接続し、同じpgAdminバージョンで同じクエリを実行しますquery time: 32 ms。これにより、で結果がすぐに表示されます。 次に、ローカルのpgAdminからクエリを再度実行します。 Total query runtime: 337 ms. 1 row retrieved. サーバーに対して130ミリ秒のpingを実行しています。FTP経由でファイルをかなり高速にアップロードできるので、接続速度は十分すぎるはずです。 ローカルのpsqlで実行したときの同じクエリは、接続時間を含めて数秒で終了します。 ローカルのpgAdminでローカルのdbコピーを使用した同じクエリもすぐに終了します。 pgAdminのバージョンは1.20.0です。最新の1.22でも確認しました-まだ同じです。 pgAdminを高速化するにはどうすればよいですか? psqlは正常に動作することに注意してください。そこには同じ待ち時間がありません。 17秒間のクエリ実行のpgAdminログ: 2016-02-06 16:18:03 INFO : queueing : select * from users …

1
PowerShellでSQLCMDを介してLocalDBに接続する
SQLCMDユーティリティを使用して、PowerShellを介してコンピューター上の "localdb \ MSSQLLocalDB"サーバーにアクセスしようとしています。PowerShell v5、.NET v5.0を使用していますが、サーバー名は(localdb)\MSSQLLocalDBMicrosoft SQL Server Management Studio 2014で接続するときに使用されます。 PS C:\> sqlcmd -S localdb\MSSQLLocalDBそしてPS C:\> sqlcmd -S .\localdb\MSSQLLocalDB、このエラーが発生し: Sqlcmd:エラー:SQL ServerのMicrosoft ODBCドライバー11:SQL Serverネットワークインターフェイス:指定されたサーバー/インスタンスの検索エラー[xFFFFFFFF]。 Management Studioでサーバー名を照会し、上記のコマンドでSELECT @@ServerNameそれを使用した-Sところ、同じエラーが発生しました。 PS C:\> sqlcmd -S localdb このエラーが発生します: Sqlcmd:エラー:SQL Server用Microsoft ODBCドライバー11:名前付きパイププロバイダー:SQL Serverへの接続を開けませんでした[53] その他の注意事項:この接続文字列を使用して、サーバーに接続し、C#コンソールアプリでtestdb01という名前のデータベースを操作できSystem.Data.SqlClientます。 "Data Source=(localdb)\\mssqllocaldb;Initial Catalog=testdb01;Integrated Security=SSPI;"

2
SQL Server 2014 Expressのさまざまなインストーラーの違い
SQL Server 2014 Expressの異なるインストーラーの違いを理解しようとしています。できることは何でも教えてくれたり、それらのドキュメントを見つけられたりしたら、私は感謝します。 https://www.microsoft.com/en-us/download/confirmation.aspx?id=42299 Express 32BIT WoW64\SQLEXPR32_x86_ENU.exe Express 32BIT\SQLEXPR_x86_ENU.exe Express 64BIT\SQLEXPR_x64_ENU.exe ExpressAdv 32BIT\SQLEXPRADV_x86_ENU.exe ExpressAdv 64BIT\SQLEXPRADV_x64_ENU.exe ExpressAndTools 32BIT\SQLEXPRWT_x86_ENU.exe ExpressAndTools 64BIT\SQLEXPRWT_x64_ENU.exe LocalDB 32BIT\SqlLocalDB.msi LocalDB 64BIT\SqlLocalDB.msi MgmtStudio 32BIT\SQLManagementStudio_x86_ENU.exe MgmtStudio 64BIT\SQLManagementStudio_x64_ENU.exe

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