データベース管理者

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

5
ファイル/var/lib/mysql/user.lower-testを作成できません
MySQLデータベースは、数か月間問題なく使用されてきました。今日、Synaptic Package Managerを使用してアップグレード可能なパッケージを確認したところ、さまざまなMySQLコンポーネント(-common、-client、-serverなど)が思い付きました。したがって、アップグレードすることに決めました(インストールしたバージョンを書き忘れていましたが、5.6.21だったと思います)を5.6.25-1-ubuntu2.0にアップグレードしました。その後、データベースのクエリを実行すると、次のメッセージが表示されました:- Error occured: Can't connect to MySQL server on '127.0.0.1' (111) その後、サーバーが稼働していないことがわかりました。ログファイルで、次のメッセージが好きです。 Can't create file /var/lib/mysql/user.lower-test 私は1時間ほどオンラインで検索しており、この問題は以前に報告されていましたが、「更新後」の問題のコンテキストでは見ていなかったため、次のステップがわかりません。
11 mysql  linux 

2
SARGカーディナリティの推定、なぜフルスキャンではないのですか?
フルスキャンがないのはなぜですか(SQL 2008 R2および2012)。 テストデータ: DROP TABLE dbo.TestTable GO CREATE TABLE dbo.TestTable ( TestTableID INT IDENTITY PRIMARY KEY, VeryRandomText VarChar(50), VeryRandomText2 VarChar(50) ) Go Set NoCount ON Declare @i int Set @i = 0 While @i < 10000 Begin Insert Into dbo.TestTable(VeryRandomText, VeryRandomText2) Values(Cast(Rand()*10000000 as VarChar(50)), Cast(Rand()*10000000 as VarChar(50))); Set @i …

2
概念的なERDマルチテーブル多対多、またはおそらく再帰?
概念図を作成しています[そうです、属性とキーが含まれていることは知っていますが、これは、学習中に行っていることを統合するためだけのものです]-したがって、関係と図表の方法ではなく表;) 私の心のハードルは次のとおりです。 私は、プロファイル、場所、および組織の関係をモデル化する最良の方法を確認しようとしています。 まず、ルール: 1つ以上のプロファイルは、1つ以上の組織のメンバー/友達になることができます。およびその逆。 1つまたは複数のプロフィールを他のプロフィールのメンバー/友達にすることができます。 1つ以上の組織が他の組織のメンバー/フレンドになることができます。 FriendとMemberは異なります。Friendsは読み取り専用のようなものであり、[レベルに応じて]メンバーは変更するためのフルアクセス権を持っています。 さらに複雑なことに、ロケーションには独自の「さらに」洗練されたルールのセットがあります。たとえば、組織は2つのロケーションを所有しますが、ロケーションルールによっては、その組織のメンバー[ プロファイル ]が1つのロケーションでフルアクセスできますが、その他。[申し訳ありませんが、表示サイズを上げるには、別のウィンドウで画像を開く必要があります。] ご覧のように、プロファイルと組織の概念はほとんど同じです。これは、モデル化されていない友達とメンバーの概念です。[...オーナー/レコード内の管理者/メンバー/友達など]。したがって、なぜ私は次の概念を考えているのですか? 上の画像のOption.2を参照してください。これは、現在の組織とOrganization_Locationsテーブルとそれらの関係を削除し、プロファイルとのやや再帰的な関係としてOption.2組織テーブルに置き換えます。 問題の核心は、私が多態性をプログラム的に気にしすぎて、単純さと柔軟性を損ない、プロセスで完全に混乱しているのかどうかだと思います;) 事前にあなたの考えをありがとう、大いに感謝-M :)。 改訂された図: MDCCLの質問への回答: はい、プロフィールは1人の人物で構成され、同じ意味を持っています-あなたの理論的根拠が向かっているところに-私はあなたが正しいと信じています:組織と人物はプロフィールのサブタイプである可能性があります。したがって、プロファイルは1人または1つの組織で構成されます。 プロファイルごとに1つのメールアドレス。 はい。上記のように、組織には少なくともメールアドレスが必要です。 正しい、1つの固定アドレス。 それは可能性ですが、まれです-私が学んでいることから-したがって、将来の寿命などのためにそのようなモデルを作成する必要があります。したがって、確認のために、ロケーションは複数の人が所有することができます。 場所は間違いなく他のほとんどの間の不可欠なエンティティです。おそらく私はここで簡潔に何ができるかを明確にし、次にこの質問への有益な追加にうまくいけば私の他の答えを最初に読んでみましょう[ そして最後に#6への私の答えを見てください ];)Re:役割の所有者 An **Organization** can be an Owner of zero or more **Locations**. A Person can be an owner of zero of more Locations[したがって、以前に推測したとおり。簡単に言えば、プロファイルは0個以上のロケーションの所有者になることができます。 はい、ロケーションの所有者であるプロファイルは、すべてのロール権限[スーパーユーザー]を想定しています。プロファイルで管理者は、特定の細部修正できる場所が、主に他のすべてを介して供給された詳細/データ編集/助けプロファイルを/ S …

2
UPDATE CASCADEを使用したFK制約によって操作が発生した場合、FOR EACH STATEMENTトリガーはどのくらいの頻度で実行されますか?
で定義されたテーブルtのトリガーは、FOR EACH STATEMENTを実行すると1回実行されることを理解していますUPDATE t ...。 では、をtで定義しFOREIGN KEY ... REFERENCES a ... ON UPDATE CASCADE、でN行を更新aすると、トリガーが1回呼び出されるのですか、それともN回呼び出されるのですか? 別の言い方をすると、FK制約によってカスケードされたテーブルへの変更は、単一のUPDATE、または一連のUPDATEのようなものですか?

1
実際にインストールする前に、利用可能なセットアップからSQL Serverのバージョンとエディションを確認してください。
SQL Server 2008 R2 EnterpriseからStandardエディションへのダウングレードプロセスを行っています。 上記のアクティビティを開始するために、SQL Serverの利用可能なStandard Editionを探していました。見つけましたが、以下の点で混乱しました: セットアップファイル(以前のチームメンバーによって保存された)は、SQL Server 2008 R2であると言うフォルダーにありますが、インストールを開始する前にクロスチェックするために、default.iniファイルを調べました。 SQLSERVER2008 Configuration File [SQLSERVER2008] これは、これが必要なSQL Serverの正しいバージョンであるかどうか疑問を投げかけました。それで、実際に先に進んでインストールを試みる前に、上記の方法がバージョンを決定するのに正しくない場合、他の方法はありますか? 使用可能なSQL Serverのエディションも確認できますか?セットアップでは、それが本当にStandard Editionであるかどうかほとんどわかりません。 セキュリティポリシーに従って、新しいメディアを単にダウンロードすることはできません。また、ダウンロードする権利もありません。

6
2005または2008のインスタンスなしでSQL Server 2000から2012に移行する
SQL Server 2000にある3つの古いデータベースに遭遇しました。これらは2012年に移動する必要があります。標準的なアプローチは、2005または2008インスタンスに復元し、更新、再エクスポートして、最後に2012年に復元することです。 申し訳ありませんが、2005年または2008年のインスタンスはありません。 試してみる価値のある回避策やその他の方法はありますか? ちなみに、データベースには15〜20のテーブルといくつかのビューしか含まれておらず、非常にシンプルに見え、バックアップのサイズは100〜200 MBしかありません。

1
SSDTスキーマ比較は、BULK INSERTの進行中は機能しません
私は、SFSとSSDTの両方と一緒にTFS /ソース管理を使用する大規模なETLおよびDWプロジェクトで働いています。 今日、SSISパッケージがデータベーステーブルへの一括挿入を実行している間、そのデータベースに対してSSDTスキーマ比較を実行できないことがわかりました。一部のパッケージの完了には非常に長い時間がかかるため、これは残念です。データベースのバージョン管理のためにSSDTプロジェクトに保存するために、スキーマ比較機能を使用してデータベース構造への変更を検出します。 これについてもう少し詳しく見てみると、SSDTのスキーマ比較関数OBJECTPROPERTY()が、データベースのテーブルでシステム関数を呼び出すSQLスクリプトを実行していることがわかりました。特に私の場合、が現在一括挿入されているテーブルを参照する場合、への呼び出しはすべてOBJECTPROPERTY(<object_id>, N'IsEncrypted')ブロックされているよう<object_id>です。 Visual Studioでは、SSDTスキーマ比較はしばらくするとタイムアウトし、違いが検出されなかったと主張します。 SSDTでこの問題の回避策はありますか、それともMS Connectバグレポートを提出する必要がありますか? または、BULK INSERTはSSISパッケージからOBJECTPROPERTY行われるので、テーブルの呼び出しをロックせずにこの挿入を行う方法はありますか?編集: SSIS OLE DB宛先では、「テーブルのロック」からチェックマークを削除できます。チェックマークはそれを実行しますが、状況によってはパフォーマンスが低下する可能性があります。一部のオブジェクトがロックされている場合でも、SSDTスキーマ比較でその機能を実行できるようにするソリューションの方がはるかに興味があります。
11 sql-server  ssis  ssdt 

3
既存のユーザーのパスワードポリシーの確認
最近、多くのデータベースログインでenforce_password_policyフラグが有効になっていない環境に入りました。 次の監査では、これらのログインのパスワードの検証が必要です。 次のクエリを使用して、ログインのリストとフラグがオンかオフかを取得しました。 select @@SERVERNAME as servername, name, IS_SRVROLEMEMBER('sysadmin', name) as SYSADMIN, type_desc, create_date, is_policy_checked, is_disabled, password_hash, PWDCOMPARE(name, password_hash) as UsernameAsPassword FROM sys.sql_logins ただし、フラグはユーザーの作成時にのみ関連するため、パスワードが実際にパスワードポリシーに準拠しているかどうかはわかりません。 パスワードポリシーのコンプライアンスについて既存のユーザーをテストする既知の方法はありますか? 私は古いパスワードにアクセスできず、それらを必要としない方法を好みます。

2
PL / pgSQLで手動で発生した例外の例外コンテキストを取得するにはどうすればよいですか?
Postgresでは、次のコードを使用して例外の「スタックトレース」を取得します。 EXCEPTION WHEN others THEN GET STACKED DIAGNOSTICS v_error_stack = PG_EXCEPTION_CONTEXT; これは「自然な」例外では問題なく機能しますが、 RAISE EXCEPTION 'This is an error!'; ...その後、スタックトレースはありません。メーリングリストのエントリによると、これは意図的なものである可能性がありますが、私の人生では理由を理解することはできません。を使用する以外の例外をスローする別の方法を理解したいと思いRAISEます。私は明らかな何かを見逃しているだけですか?誰かがこれのためのトリックを持っていますか?私の選択した文字列を含むPostgresをスローできる例外はありますか?そのため、エラーメッセージで私の文字列だけでなく、完全なスタックトレースも取得しますか? ここに完全な例があります: CREATE OR REPLACE FUNCTION error_test() RETURNS json AS $$ DECLARE v_error_stack text; BEGIN -- Comment this out to see how a "normal" exception will give you the stack trace RAISE …

2
IPアドレスの保存-varchar(45)とvarbinary(16)
2つのフィールド(IDas BIGINTおよびIPAddressas varchar(45)またはor)を持つテーブルを作成しますvarbinary(16)。アイデアは、すべての一意のIPアドレスを保存し、他のテーブルのID実際のIPアドレスの代わりに参照を使用することIP addressです。 一般的に、ID与えられたforを返す、IP addressまたは(アドレスが見つからなかった場合は)アドレスを挿入して生成されたを返すストアドプロシージャを作成しますID。 多くのレコードがあることを期待しています(正確な数はわかりません)が、上記のストアドプロシージャをできるだけ速く実行する必要があります。それで、実際のIPアドレスをテキストまたはバイト形式で保存する方法を知りたいです。どっちがいいの? SQL CLRIPアドレスのバイトを文字列に変換したり、その逆を行ったりするための関数をすでに作成しているため、変換は問題ではありません(IPv4およびの両方で機能しますIPv6)。 検索を最適化するためにインデックスを作成する必要があると思いIP addressますが、クラスター化インデックスにフィールドを含める必要があるのか、または別のインデックスを作成し、どのタイプで検索を高速化するのかわかりませんか?

1
postgresqlの一貫したバックアップのためのストレージスナップショット-異なるデータおよびログボリューム
私たちは多くのLinux VMをvmware /共有ストレージ環境で実行しており、それぞれが独自のpostgreSQLインスタンス(9.0と9.3の混合)を実行しています。現在、VM全体が単一のルートパーティション/ボリューム上にあり、基盤となるVMFSボリュームのストレージベースのスナップショットをバックアップ/復元プロセス(および私たちのDRサイトへのレプリケーション)に使用することで大きな成功を収めています(約8年)。 ストレージのアーキテクチャーにより、postgres WALファイルをキャッシュされていない、大部分が書き込みボリュームに分離して、ストレージ側でのキャッシュチャーンを少なくすることが有利です。ストレージ(Nimble Storage)を使用すると、両方のボリュームを単一の保護/スナップショットグループに割り当てることができますが、スナップショットが保護グループ内のすべてのボリュームでまったく同時に発生することをベンダーから引き出すことができませんでした-可能性は高いですが、ミリ秒単位で離れている可能性は常にあります。 そのために、pg_benchを使用して可能な限り高速にデータをDBに書き込みながら、いくつかの実験を行いました。実験後、スナップショットのボリュームを復元し、VM + postgresを起動しました データボリュームとログボリュームの両方をほぼ同時にスナップショット作成-結果:DBが回復 最初にスナップショットデータボリューム、〜1分後にログボリューム-結果:DBが回復しました 最初にスナップショットログボリューム、約1分後にデータボリューム-結果:DBが回復しました WALチェックポイントがデータファイルに新しいデータを書き込んだ後、最初にスナップショットログボリューム、約3分後にデータボリューム:結果:DBが回復しました したがって、両方のスナップショットがボリュームレベルで一貫しており、比較的近い距離にある限り、WAL /ログボリュームのスナップショットの時間に基づいて、DBの一貫したコピーが得られます。 私の質問:これは安全ですか?テストで欠落している主なケースは何ですか?また、何が問題になる可能性がありますか? Postgresのドキュメントはこれが安全ではないことを示していますが、テストはかなり堅牢であることを示しているようです:http : //www.postgresql.org/docs/9.1/static/backup-file.html データベースが複数のファイルシステムに分散している場合、すべてのボリュームの正確に同時に凍結されたスナップショットを取得する方法がない場合があります。たとえば、データファイルとWALログが異なるディスク上にある場合、またはテーブルスペースが異なるファイルシステム上にある場合、スナップショットは同時でなければならないため、スナップショットバックアップを使用できない場合があります。このような状況でコンシステントスナップショット手法を信頼する前に、ファイルシステムのドキュメントをよく読んでください。 注:はい、PostgreSQLをホットバックアップモードにしたり、ストレージのVMware統合を使用してVM自体を静止したりするなど、一貫性を確保する他のオプションについては知っていますが、スピードと利便性のためにストレージのみのソリューションを探しています。クライアントへの影響はゼロです。

1
この逆さ銀色の鍵のアイコンは何ですか
SQL Server 2005のサードパーティサーバーとデータベースを継承して、レポートとダッシュボードを生成できるかどうかを調べました。 あるテーブルで、新しいアイコンを見つけました。他の主キーと外部キーと並んで、青銀の逆さまのキーです。 右クリックすると、コンテキストメニューに[スクリプト制約]のオプションが表示されますが、[変更]しようとすると、列のデザインフォーム(主キーなど)が開きますが、制約ではなく「インデックス」セクション。 誰かがそれが何と呼ばれ、何に使用されているか知っていますか?

1
高PAGELATCH_ *およびWRITELOG待機。それらは関連していますか?
非常に高いPAGELATCH_EXおよびPAGELATCH_SH待機タイプと、高いWRITELOG待機が発生しています。PAGELATCH待機の原因となっているクエリを診断しました。IDENTITY値で定義されたビジーなクラスター化された主キーへの挿入率を下げることで、それらを排除できます。この現象は最終ページ挿入ラッチ競合として知られていると理解しています。 ただし、私の質問は、新しいレコードが挿入されたとき、SQL Serverがバッファーページで排他的なPAGELATCH_EXを取得し、レコードをバッファーページに挿入して、トランザクションログにレコードを書き込み、詳細なhttps://として排他的なPAGELATCH_EXを解放することです。 www.microsoft.com/en-ie/download/details.aspx?id=26665ページ24.または、詳細な「高度に同時実行されているINSERTワークロードでのPAGELATCH競合の解決-背景情報SQLCATのガイド:リレーショナルエンジン レコードがラッチメカニズムの外部のログに書き込まれる場合、PAGELATCH待機が高くなる原因として、ディスクへの遅い書き込みを除外できます。しかし、レコードがログに記録されるまで強化されるまでラッチが保持されている場合は、おそらくWRITELOGを考慮する必要があります。 また、複数の非クラスター化インデックスがあると、PAGELATCH_ *ラッチがより長く保持されます。つまり、テーブルにクラスター化されており、複数の非クラスター化インデックスがラッチに追加され、各インデックスバッファーページに同時に解放されますか? 更新1 confio-sql-server-writelog-waitスライド2と一般的なWALアーキテクチャを 読んだ後。両方のホワイトペーパーで説明されている「行が変更されたログエントリを記録する」手順は、SQL Serverがディスクではなくトランザクションログキャッシュに変更を記録することを指していることを理解しました。トランザクションが完了するか、バッファがいっぱいになると、すべてのレコードがすぐにディスクにフラッシュされます。

3
トリガーを使用せずにSQL Serverでクエリを実行するクライアントのIDを見つけますか?
現在Change Data Capture(CDC)を使用してデータの変更を追跡しています。変更を行ったクエリを送信するクライアントのホスト名とIPアドレスを追跡したいと考えています。同じユーザー名でログインしている5つの異なるクライアントがある場合、5つのうちどれがクエリを起動したかを追跡するという難題に直面します。私が見つけた他の疑わしい解決策には、次のコマンドでCDCテーブルを変更することが含まれます。 ALTER TABLE cdc.schema_table_CT ADD HostName nvarchar(50) NULL DEFAULT(HOST_NAME()) ただし、これは、クエリが起動されたサーバーのホスト名を返し、クエリを起動したクライアントのホスト名は返しません。 この問題を回避する方法はありますか?クライアントのホスト名またはIPアドレス(または他の種類の一意のID)をログに記録するのに役立つもの。トリガーを使用したくありません。システムが遅くなるだけでなく、CDCがシステムテーブルを生成するため、トリガーを設定することは明らかに不可能です。

2
INSERT INTOで新しく作成された宛先テーブルの後にROLLBACKが機能しない
私は、CSVファイル(customers.csv)をMySQLテーブル(customers)にインポートするPHPスクリプトに取り組んでいます。 mysqlテーブルにCSVファイルの内容を挿入する前に、最初に元のcustomersテーブルをバックアップしています。 mysqlトランザクションでインポートプロセス全体(バックアップを含む)をラップしています(CSVが途中で破損している場合を考慮し、インポートがアトミックであることを確認するため)。 問題は、ステートメントの直後にROLLBACKを呼び出したときにROLLBACKが機能しないように見えることですINSERT INTO。phpMyAdminを介してデータベースをチェックすると、新しく作成されたテーブルとROROW INSIDE ITがroollback後も存在していることがわかります。 操作のログは次のとおりです。 [2015-01-19 14:08:11] DEBUG: "START TRANSACTION" [] [] [2015-01-19 14:08:11] DEBUG: SHOW TABLES LIKE :table_name; [] [] [2015-01-19 14:08:28] DEBUG: CREATE TABLE `customers__20150119_14_08_20` LIKE `customers` [] [] [2015-01-19 14:08:37] DEBUG: INSERT INTO `customers__20150119_14_08_20` SELECT * FROM `customers` [] [] [2015-01-19 14:08:50] DEBUG: "ROLLBACK" …

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