データベース管理者

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

2
毎週の最終日を取得するSQLクエリ
MySQLを使用して、日時フィールドを持つテーブルをクエリする必要があります。特定の週のすべてのレコードをカウントする必要があります。date_format(colname、 "%Y%V")を使用すると、週番号が返されますが、その週の最終日(月の日01-28 | 29 | 30 | 31)が必要です。 出力例 COUNT(*)| 日付 11 | 2012-01-07 22 | 2012-01-14 123 | 2012-01-21 助けて? 注:私の場合、週の最終日は日曜日です。
8 mysql 

3
SQL Server 2000からSQL Server 2012へのアップグレードプロセス
SQL Server 2012データベースにアップグレードしたい(別のサーバーで実行している)SQL Server 2000データベースがあります。 直接アップグレードパスがあるとは思いませんが、ある場合、それは何ですか? 私の現在の計画は: SQL Server 2000データベースのバックアップ SQL Server 2008がインストールされているサーバーに復元する 互換性レベルを100(SQL Server 2008 / SQL Server 2008 R2)に設定します SQL Server 2008サーバーからのデータベースのバックアップ SQL Serevr 2012がインストールされているサーバーに復元する 互換性レベルを110(SQL Server 2012)に設定します 不要な手順を実行していますか?(サポートされていないTransact-SQLの使用を識別するユーティリティを実行するなど)何か不足していますか?

3
クエリから取得できるデータを保持する新しいテーブルをいつ作成するかをどのように特定できますか?
支払い表があり、エージェントは支払いの手数料を受け取ります。コミッションは、支払いを取得するのにかかった時間など、いくつかの異なる要因に基づいているため、エージェントが取得するコミッション率を計算する際にはいくつかの計算が必要ですが、わいせつな複雑さはありません。 たとえば、おそらくこれより複雑になることはありません。 SELECT Payments.Amount * CASE WHEN DateDiff(year, Client.Received, Payments.DatePaid) = 1 THEN Rates.Rate1 WHEN DateDiff(year, Client.Received, Payments.DatePaid) = 2 THEN Rates.Rate2 ELSE Rates.Rate3 END 必要なときにいつでもクエリを実行するのではなく、このデータを保持する2番目のテーブルを作成するのは理にかなっていますか?それとも、要求されたときにデータをプルするランタイムクエリをそのまま使用する必要がありますか? さらに重要なことに、データが必要なときにクエリを実行する必要があるかどうか、またはデータを独自の別のテーブルに格納する必要があるかどうかを判断するときに使用する要素は何ですか?

4
Oracle関数から完全に動的なテーブルを返す
IN最初のパラメータがa varcharで、2番目のパラメータがのリストである2つのパラメータを持つ関数を書きたいのvarcharsですが。これらに基づいて、列の量と型の名前が異なるテーブルを返しますvarchar。 私が見た限りでは、私は常にオブジェクト/レコードとそのテーブルタイプを作成する必要があります。これは私のアイデアが機能しないことを意味しますか?基本的な目標は、システムコマンドの出力をテーブルとして呼び出し先に返すことです。 編集:タスクの詳細。OSコマンドを発行し、出力を消費して、テーブルとして返したいのですが。OSコマンドからの出力は、CSV形式のデータになります。実行時には、返される行の数はわかりませんが、2番目の引数として渡される列の数しかわかりません。私は、動的にJavaを使用して考えていたSTRUCTとARRAYそれらを含みます。私は前者のアプローチを好みますが。 次のようになります。 create function(clob query, list of varchars cols) returns table begin execute system command(query, cols); examine sysout from command; return tabular data from syscmd as table; end

4
ルートとして権限を付与することはできません
問題があったため、を除くすべてのユーザーを再作成することにしましたroot@localhost。これは正常に機能しますが、新しく作成されたユーザーは何もする権利がありません。私が欲しいのは、単にローカルIPでrootにすべての権利を与えることです。私は(としてroot@localhost)試しました CREATE USER 'root'@'10.0.3.210'; GRANT ALL ON *.* TO 'root'@'10.0.3.210'; 最初のコマンドは機能し、2番目のコマンドはメッセージで失敗します ERROR 1045 (28000): Access denied for user 'root'@'localhost' なぜroot@localhostすべてを実行できないのかわかりません。その権限を変更していなかったと思います。から SHOW GRANTS FOR 'root'@'localhost' 私は得る Grants for root@localhost GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, REPLICATION SLAVE, …

1
sp_send_mailのデータベース権限に関する問題
データベースメールを送信しようとしていますが、取得していEXECUTE permission denied on the object 'sp_send_dbmail' database 'msdb', schema 'dbo'.ます。私が実行しているコードは次のとおりです: SELECT SUSER_NAME(), USER_NAME(); Create USER kyle_temp FOR LOGIN Foo EXECUTE AS USER = 'kyle_temp'; SELECT SUSER_NAME(), USER_NAME(); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mail Profile', @recipients = 'test@test.com', @subject = 'Test', @body = 'Test' REVERT; DROP USER kyle_temp Fooログインは、msdbでFooユーザーにマッピングされていることを示しています。msdbでfooユーザーを見ると、 "DatabaseMailUserRole"がオンになっていて、dboでExecuteが実行されていることがわかりsp_send_dbmailます。 何が欠けていますか?

2
RFIDの適切なデータ型とは何ですか?また、フォーマットの標準的な定義はありますか?
靴に埋め込まれたRFIDタグに基づいて人々を追跡するデータベースがあります。このデータは、VARCHAR(MAX)他のデータが混じった列に到着し、特定の順序ではありません。これまでのところ、すべてのRFID値は次のようにフォーマットされています。 AnnnnnnnnAnnAAAA (where A = 0-9 and n = A-Z) これらのメッセージからRFIDを抽出し、それらを独自のテーブルに格納するためのレポートを書いています。RFIDが同じパターンに従っている限り、それらを見つけることができます。RFID形式が変更されると、抽出プロセスが失敗します。 RFIDタグの標準形式はありますか?RFIDタグの保存に最適なデータタイプはどれですか。 今は一緒にVARCHAR(20)行きます。

1
SQL Serverデータベース全体の統計を取得する最も効率的な方法
私がやろうとしていることは、データベースを確認してすべてのauto-shrink設定をロックし、どのデータベース/テーブルが非常に断片化されているかを把握することです。 データベースごとに良いアイデアを得るために実行できる特定のスクリプトはありますか? テーブルレベル(少なくともSQL Server 2005)で以下を実行できることはわかっています。 DBCC SHOWCONTIG ('DB.TABLE'); しかし、データベース内のすべてのテーブルを表示するために何を実行できますか? ありがとう


4
MySQLサブクエリが大幅にスローダウンしますが、独立して正常に動作します
クエリ1: select distinct email from mybigtable where account_id=345 0.1秒かかります クエリ2: Select count(*) as total from mybigtable where account_id=123 and email IN (<include all from above result>) 0.2秒かかります クエリ3: Select count(*) as total from mybigtable where account_id=123 and email IN (select distinct email from mybigtable where account_id=345) 22分かかり、90%が「準備中」の状態です。なぜこんなに時間がかかるのですか? テーブルはMySQL 5.0で3.2mil行のinnodbです

1
PostgreSQLフェイルオーバー-どのツールを使用する必要がありますか?
ここにシナリオがあります: CentOS 6.2を実行しているマシンが2つあります-machine0とmachine1 どちらにもPostgreSQL 9.1がインストールされています。 それらの1つはマスターシステムとしてアクティブでなければならず、非同期ストリーミングレプリケーションを介して他のマシンを介して、スタンバイはマスターシステムからデータベースに変更をコピーする必要があります。 最初はmachine0がマスターで、machine1がスタンバイであると想定します。 マスター(machine0など)に障害が発生した場合(ここでの障害とは、postgresqlサーバーがクラッシュしたことを意味します)、スタンバイはマスターから引き継ぎ、新しいマスターになる必要があります。 machine1は、新しいマスターがすべてのデータベース操作を処理し、machine0のpostgresqlサーバーがオンラインに戻ると、スタンバイになり、machine1との接続を失った時点から同期を開始し、すべての変更をデータベースにコピーしてスタンバイモードのままにします。 machine1に障害が発生すると、サイクル全体が繰り返されます。 スタンバイに障害が発生してオンラインに戻ると、マスターからの読み取りが開始され、データが同期されます。 PostgreSQLはデフォルトではフェイルオーバーを備えていないことを理解しているので、これを設定するために使用する必要があるツールについて混乱しています。 誰かが私が私がしようとしていることをする方法を説明するスレッド/ページに私をリンクできれば、私は本当に感謝します。

2
アジャイルソフトウェア開発アプローチはSQLに適用されますか?
ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 アジャイルソフトウェア開発方法/原則/パターンがSQLプログラミングにも有効かどうかを知りたいです。もしそうなら、それについて学び始めるのに良い場所はどこですか?SQLコンテキストでのアジャイル開発を対象とした記事や本はありますか?

2
ミラーログはプライマリでは空ですが、ミラーでは問題ありません
私たちは何十もの主要サーバーとそれに対応するミラーを持っていますが、ほとんどは正常に機能していますが、そのうちの1つは奇妙な動作をしています。具体的には、sp_dbmmonitorresultsprocは特定のプリンシパルデータベースのすべての列をNULLとして返しますがsp_dbmmonitorresults、ミラーでは有効な情報を返します。 今、私はその原因が大まかにわかっています。プリンシパルサーバーとミラーサーバーがセットアップされたとき、プライマリの地域設定が正しくなかった(時刻は正しかったが、+ 4地域(アメリカなど)を使用していた)場合、ミラーリングが設定された後、時間地域はGMT +0に修正されました(学校少年のエラーは知っていますが、c'est la vie!) 編集:19/12/2012 今日、私はミラーリングを削除し、ミラー上のコピーを削除し、ミラーリングを再セットアップしましたが、これは問題を解決しませんでした!私はこの質問に賞金を払って、この問題の根底に到達しようとしています。 確認のため、EXEC sp_dbmmonitorresults @database_name = 'ProScript'各サーバーで手動で実行すると、プライマリのほとんどの値にNULLが返されますが、ミラーでは正常に返されます。 プライマリで実行した場合: ズーム:クリックしてフルサイズバージョン 鏡で走ったとき: ズーム:クリックしてフルサイズバージョン ご覧のとおり、時刻は現在でデータベースは同期していますが、log_generation_rate、unsent_log、send_rateなどはすべてプライマリでNULLになっていますか? 両方のサーバーは、exec sys.sp_dbmmonitorupdateジョブステップなどとして毎分実行されている監視ジョブを持っています。 sys.sp_dbmmonitorupdateのソースを確認すると、これらの値が取得されます。sys.dm_os_performance_countersしたがって、ミラーで次のコマンドを実行すると、 SELECT counter_name , cntr_value FROM sys.dm_os_performance_counters WHERE instance_name = 'ProScript' AND counter_name IN ( N'Log Send Queue KB', N'Log Bytes Sent/sec', N'Redo Queue KB', N'Redo Bytes/sec', N'Transaction Delay', N'Log …

5
SQLサーバーでの長時間のブロックを自動的に通知できますか?
週に1回程度、Access 2003フロントエンドからの長期にわたる読み取りロックが原因で、SQL Server 2005データベースのブロッキングチェーンを解決する必要があります。ロックは、ユーザーが特定のフォームを開くたびに解除され、ユーザーがフォームのスクロールを終了するか、フォームを閉じると解放されます。多くのユーザーがこのフォームを参照として開いているので、これらのロックはしばらく保持されます。テーブルを更新するとブロッキングが発生し、最初のロックを待機しているため、突然このテーブルから誰も選択できなくなります。多くのアプリがこのデータに依存しているため、これは私たちにとって非常に問題です。このロック動作は、リンクテーブルでのAccessの動作の一部であることを理解しています。 私はアクティビティモニターから問題を解決してきました。ヘッドブロッカーであるSELECTプロセスを見つけたら、そのプロセスを強制終了します。これは、手動で行うのに時間がかかるだけでなく、反応的であるためにも問題です。私がそれを聞いたときまでに、それは多くの人にとってすでに問題になっています。 これらの長期にわたるブロッキングチェーンを自動的にチェックする方法があり、メールで送信されるか、問題が自動的に解決されるかどうかを知りたいです。ロジックは単純明快です(「このSELECTクエリに一致するプロセスが1分以上ブロックされている場合は、通知/強制終了する」)が、SQL Serverでこれを実装する方法がわかりません。 価値があることについては、適切な解決策はアプリを修正または書き直すことだと思います。ただし、部局の政治上の理由により、これは今後数か月間は選択肢になりません。そのため、私は一時的なギャップを探しています。

1
RDBMSでデッドロックはどのように検出および報告されますか?
面接でこのエッセイ型の質問を受けましたが、就職できませんでした。完全な質問は次のとおりです。 RDBMSでデッドロックはどのように検出および報告されますか?トランザクションの所有者とアプリケーション開発者は、検出と防止の両方のシナリオで確認する責任がありますか?
8 deadlock 

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