データベース管理者

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

2
インポートしようとしているファイルで許可が拒否されました
\ipsql.exeフォルダーにないファイルで使用しようとすると、それは言いC:: permission deniedます。たとえば、私は、SQLコマンドを使用してファイルに持っているC:\Users\Work\Desktop\School Work\load_database.sqlと私は入力し\i "C:\Users\Work\Desktop\School Work\load_database.sql"、それは言うがC:: permission denied。どうすれば修正できますか? 私の周りの仕事見つけ、ここ psql.exeがでているとあなたは同じフォルダに.sqlファイルをコピーします。 ところで、\ iはインポートの略ですか?


4
SQL Serverは、15秒以上かかるI / O要求の発生を検出しました
実稼働SQL Serverには、次の構成があります。 3台のDell PowerEdge R630サーバーを可用性グループに統合3台すべてがRAIDアレイである単一のDell SANストレージユニットに接続されている 時々、PRIMARYで次のようなメッセージが表示されます。 SQL Serverは、データベースID 8 のファイル[F:\ Data \ MyDatabase.mdf]で完了するのに15秒以上かかるI / O要求が11回発生しました。OSファイルハンドルは0x0000000000001FBCです。 最新の長いI / Oのオフセットは0x000004295d0000です。 長いI / Oの継続時間は37397ミリ秒です。 パフォーマンストラブルシューティングの初心者です ストレージに関連するこの特定の問題のトラブルシューティングで最も一般的な方法またはベストプラクティスは何ですか?このようなメッセージの根本原因を絞り込むには、どのパフォーマンスカウンター、ツール、モニター、アプリなどを使用する必要がありますか?役立つ可能性のある拡張イベント、または何らかの種類の監査/ログがありますか?


1
オペレーターがtempdbを使用して、実行中に流出レベル2でデータを流出させました
警告Operator usedtempdbを使用して、クエリプランでの並べ替え操作のコストを最小限に抑えるのに苦労していますto spill data during execution with spill level 2 流出レベル1で実行中に流出データに関連するいくつかの投稿を見つけましたが、レベル2ではありません。レベル1は古い統計に起因しているようですが、レベル2はどうですか?に関連するものは見つかりませんでしたlevel 2。 この記事はソート警告に関連して非常に興味深いものでした。 SQL Serverで並べ替え警告を無視しない 私のSQLサーバー? Microsoft SQL Server 2014(SP2)(KB3171021)-12.0.5000.0(X64)2016年6月17日19:14:09 Copyright(c)Microsoft Corporation Enterprise Edition(64ビット)on Windows NT 6.3(Build 9600:)(Hypervisor) 私のハードウェア? ハーウェアを見つけるために以下のクエリを実行します: -SQL Server 2012のハードウェア情報 SELECT cpu_count AS [Logical CPU Count], hyperthread_ratio AS [Hyperthread Ratio], cpu_count/hyperthread_ratio AS [Physical CPU Count], physical_memory_kb/1024 AS …

2
postgresqlでデータベースを複製する方法は?
スキーマと構造を含む既存のデータベースを別の新しいデータベースに複製する必要があります。これはpgadminではなくシェルコマンド環境で必要です。親切に私を助けてください。 nohup pg_dump exampledb > example-01.sql createdb -O postgres exampledbclone_01 私のユーザーは「postgres」です nohup psql exampledbclone_01 < example-01.sql $ pg_dump mydb > db.sql $ psql -d newdb -f db.sql
16 postgresql 

1
複数の値に対するPostgreSQL JSONクエリ配列
jsonb顧客IDの配列に対応するグループが見つかるというPostgresのタイプに対するクエリを作成します。 この例の表を考えます: CREATE TABLE grp(d JSONB NOT NULL); INSERT INTO grp VALUES ('{"name":"First","arr":["foo"], "customers":[{"id":"1", "name":"one"},{"id":"2", "name":"two"}]}') , ('{"name":"Second","arr":["foo","bar"], "customers":[{"id":"3", "name":"three"},{"id":"4", "name":"four"}]}') , ('{"name":"Third","arr":["bar","baz"], "customers":[{"id":"5", "name":"five"},{"id":"6", "name":"seven"}]}'); 私は同様の質問(複数の値に対するPostgreSql JSONB SELECT)を見つけ、このクエリを使用して単純な配列で必要なものを達成することができました: SELECT d FROM grp WHERE d->'arr' ?| ARRAY['foo', 'bar']; ただし、配列にJSON オブジェクトが含まれている場合は動作しません: SELECT d FROM grp WHERE d->'customers' ?| ARRAY['{"id":"1"}', '{"id":"5"}']; クエリに期待することは次のとおりです。 …

1
マルチテナントSQL Serverデータベースの複合主キー
ASP Web API、Entity Framework、およびSQL Server / Azureデータベースを使用して、マルチテナントアプリ(単一データベース、単一スキーマ)を構築しています。このアプリは、1000〜5000人の顧客が使用します。すべてのテーブルにはTenantId(Guid / UNIQUEIDENTIFIER)フィールドがあります。現在、私はId(Guid)という単一フィールドの主キーを使用しています。しかし、Idフィールドのみを使用することで、ユーザーから提供されたデータが正しいテナントからのものであるかどうかを確認する必要があります。たとえばSalesOrder、CustomerIdフィールドを持つテーブルがあります。ユーザーが販売注文を投稿/更新するたびにCustomerId、同じテナントからのものかどうかを確認する必要があります。各テナントに複数のコンセントがあるため、状況はさらに悪化します。次に、確認する必要がTenantIdありOutletIdます。これは本当にメンテナンスの悪夢であり、パフォーマンスに悪影響を及ぼします。 TenantIdとともに主キーに追加することを考えていIdます。また、おそらく追加OutletIdします。だから、主キーSalesOrder:テーブルになりますId、TenantIdとOutletId。このアプローチの欠点は何ですか?複合キーを使用すると、パフォーマンスが大幅に低下しますか?複合キーの順序は重要ですか?私の問題に対するより良い解決策はありますか?

1
サブクエリを使用する場合のPostgresエラー[GROUP BY句に表示するか、集計関数で使用する必要があります]
2つのテーブルemployeeとがありphonesます。従業員は0〜n個の電話番号を持つことができます。従業員の名前と電話番号をリストしたいと思います。私はうまく動作する以下のクエリを使用しています。 SELECT empname,array_agg(phonenumber) AS phonenumbers FROM employee LEFT OUTER JOIN phones ON employee.empid = phones.empid GROUP BY employee.empid 従業員表には多数の行が含まれる場合があります。一度に数人の従業員のみを取得します。たとえば、電話番号で3人の従業員を取得します。このクエリを実行しようとしています。 SELECT empname,array_agg(phonenumber) AS phonenumbers FROM (SELECT * FROM employee ORDER BY empname LIMIT 3 OFFSET 0) AS employee LEFT OUTER JOIN phones ON employee.empid = phones.empid GROUP BY employee.empid しかし、私はこのエラーを受け取ります。ERROR: column …

1
pg_restore.exeを使用する前に制約を無効にします
pg_restore.exeデータベースからダンプファイルを実行しようとすると、同じように何十ものエラーがスローされます。 ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName" これは、データベースをダンプファイル(このファイルは運用データベースから取得)から復元する前に空にしたという事実によるものです。 ... を呼び出す前に、すべてのテーブルの制約とすべての外部キーを無効にし、pg_restore.exeその後、制約と外部キーを再度有効にする方法はありますか。 SOで何か面白いものを見つけました。制約チェックをコミット時間まで延期します。しかし、制約を延期した後にpg_restore.exe内部から呼び出すことはできないと思いpsql.exeます。 また、10年前のこの投稿もあり、制約を削除してから再度追加することを提案しています。または、pg_class reltriggersの値を0に変更すると、制約に対しても可能になります...しかし、それは良い習慣よりもハッキングされているのではないかと思います... この場合のベストプラクティスは何ですか?フラグを使用pg_dump.exe して-clean使用すると、データベースを復元するときに制約チェックをバイパスするダンプが作成されますか?

1
psql 9.5:gen_random_uuid()が機能しない
SELECT gen_random_uuid() 出力を生成します ERROR: function gen_random_uuid() does not exist SQL state: 42883 Hint: No function matches the given name and argument types. You might need to add explicit type casts. 私は走ったCREATE EXTENSION pgcrypto;、選択したデータベースにしてSELECT gen_random_bytes(1)(完全に動作しgen_random_bytes、他のデータベースでは動作しませんpgcrypto拡張子が手動で作成されていません)。 % psql --version psql (PostgreSQL) 9.5.3 Ubuntuバージョンは16.04です。

3
パフォーマンスを低下させるKey Lookup(クラスター化)オペレーターを排除
実行計画でキー検索(クラスター化)演算子を削除するにはどうすればよいですか? テーブルにはtblQuotes既にクラスター化インデックス(QuoteID)と27個の非クラスター化インデックスがあるため、これ以上作成しないようにしています。 私QuoteIDはクエリにクラスター化インデックス列を入れて、それが役立つことを願っていますが、残念ながらまだ同じです。 実行計画はこちら。 またはそれを見る: これは、キールックアップオペレーターによるものです。 クエリ: declare @EffDateFrom datetime ='2017-02-01', @EffDateTo datetime ='2017-08-28' SET NOCOUNT ON SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED IF OBJECT_ID('tempdb..#Data') IS NOT NULL DROP TABLE #Data CREATE TABLE #Data ( QuoteID int NOT NULL, --clustered index [EffectiveDate] [datetime] NULL, --not indexed [Submitted] [int] NULL, [Quoted] …

1
要素をテーブルにアップサートするときに「列参照があいまいです」
データベースとしてPostgreSQLを使用しています。そして、データベースにエントリを作成する必要があります。それが既に存在する場合は、そのフィールドを更新するだけですが、フィールドの1つは、設定されていない場合にのみ更新する必要があります。 私はこの質問の情報を使用しました:https : //stackoverflow.com/questions/13305878/dont-update-column-if-update-value-is-null、それは私が持っているものとかなり関連しています。 このクエリを使用しようとしましたが、実行すると次のエラーが発生しColumn reference 'affiliate_code' is ambiguousます。 INSERT INTO accounts (id, token, affiliate_code) VALUES (value1, value2, value3) ON CONFLICT (id) DO UPDATE SET token = value2, affiliate_code = COALESCE(affiliate_code, value3); (もちろん、実際の値は置き換えられます)。 で置き換えるaffiliate_code = COALESCE(affiliate_code, value3)とaffiliate_code = value3、すべてが機能しますが、希望どおりには機能しません。 どうすればこれを機能させることができますか? これが私のテーブルの定義方法です: CREATE TABLE accounts ( id VARCHAR NOT NULL UNIQUE, …

2
証明書チェーンは信頼されていない機関によって発行されました
少し前に、Windows 10 Home Edition環境(正確にはラップトップ)にSQL Server 2016 Developer Editionをインストールしましたが、すべて問題ありませんでした。 その後、誰か-ボックスの管理者-私に言わずに、ボックスの名前を変更することにしました。 その後、SQLサーバーに接続しようとすると、次のエラーメッセージが表示されます。 これはこれと非常によく似た質問です。 AzureのWebサイトからVMロールのDBに接続すると、「証明書チェーンは信頼されていない機関によって発行されました」 私もここにいます: ターゲットプリンシパル名が正しくありません。SSPIコンテキストを生成できません。(Microsoft SQL Server、エラー:0) Kerberos Configuration Managerを使用していて、別のエラーメッセージが表示される SQLサーバー認証でこのSQLサーバーのインスタンスに接続できますが、 Windows認証を使用して接続したいと言っておく必要があります。 明確にするために-これはすべてローカルマシンであり、どのドメインにも属していません。 ここから先に進む方法がよくわからないので、Windows認証を使用します。 証明書に関連するエラーメッセージにより、ここで証明書を再発行することについて考えさせられます。これを行う方法について、またはこれがこの状況を回避するための有効な方法であるかどうか、私にはわかりません。 私はその日はこのマシンの周りにいませんが、できるだけ早く追いつきます。時間が許せば研究を続けます。

2
INSERTステートメントのOUTPUT INTO句でのソース列の使用(SQL Server)
私はバッチ処理の挿入ステートメントを書いていて、自分でアイテムをループして挿入された各行に対してSCOPE_IDENTITY()を呼び出す代わりに、一時テーブルを使用して挿入されたIDを追跡したいと考えています。 挿入する必要のあるデータには、(一時的な)IDが他のデータにリンクする(一時的な)IDがあるため、実際のIDと一時的なIDの相互参照が必要です。 これは私がこれまでに持っているものの例です: -- The existing table DECLARE @MyTable TABLE (ID INT IDENTITY(1,1), [Name] NVARCHAR(MAX)); -- My data I want to insert DECLARE @MyInsertData TABLE (ID INT, [Name] NVARCHAR(MAX)); INSERT INTO @MyInsertData ( ID,Name) VALUES ( -1 , 'bla'),(-2,'test'),(-3,'last'); DECLARE @MyCrossRef TABLE ([NewId] INT, OldId INT); INSERT INTO @MyTable ( …

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