データベース管理者

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

1
DATABASE vs SCHEMAでユーザーのデフォルト特権を管理する方法
私は、SQLite3からPostgreSQL 9.3にかなりシンプルな内部データベース駆動型アプリケーションを移行し、DBのアクセス許可を強化したいと思っています。 アプリケーションは現在、データを更新するコマンドで構成されています。そして、それをクエリするもの。当然、他の方法でデータベースを維持する必要もあります(新しいテーブル、ビュー、トリガーなどを作成します)。 このアプリケーションは、最初はサーバーでホストされる唯一のアプリケーションですが、将来的に他のデータベースを備えたサーバーでホストされる可能性があると仮定して、それが必要になった場合に後でスクランブルする必要はありません未来。 これらはかなり一般的な一連の要件になると思いますが、この種のユーザー/特権の分離を使用して、PostgreSQLで新しいデータベースをセットアップする方法を説明する簡単なチュートリアルを見つけるのに苦労しています。参照は、グループ、ユーザー、ロール、データベース、スキーマ、およびドメインに関する詳細に続きます。しかし、私はそれらを混乱させます。 これは私がこれまでに試したものです(psql「postgres」として): CREATE DATABASE hostdb; REVOKE ALL ON DATABASE hostdb FROM public; \connect hostdb CREATE SCHEMA hostdb; CREATE USER hostdb_admin WITH PASSWORD 'youwish'; CREATE USER hostdb_mgr WITH PASSWORD 'youwish2'; CREATE USER hostdb_usr WITH PASSWORD 'youwish3'; GRANT ALL PRIVILEGES ON DATABASE hostdb TO hostdb_admin; GRANT CONNECT ON …

3
COALESCEとISNULLのパフォーマンスの違いは?
多くの人がISNULLの代わりにCOALESCE関数を使用するのを見てきました。インターネット検索から、COALESCEはANSI標準であることがわかったので、COALESCEを使用するときに何を期待するかを知っているという利点があります。ただし、ISNULLの方がわかりやすいため、ISNULLの方が読みやすいようです。 ISNULLは、データベースサーバーや言語によって動作が異なるため、ややこしいこともわかります。 私の考えでは、そのすべてがスタイルと標準に要約されています。スタイルが主観的であることを考えると、ISNULLではなくCOALESCEを使用する(またはその逆)理由はありますか?具体的には、一方のパフォーマンスが他方より優れていますか?

7
SQL Serverでdatetime2に日付と時刻を組み合わせる方法は?
次のコンポーネントを考える DECLARE @D DATE = '2013-10-13' DECLARE @T TIME(7) = '23:59:59.9999999' それらを組み合わせてDATETIME2(7)価値のある結果を生成する最良の方法は何'2013-10-13 23:59:59.9999999'ですか? 動作しないものを以下にリストします。 SELECT @D + @T オペランドデータ型の日付は、追加演算子には無効です。 SELECT CAST(@D AS DATETIME2(7)) + @T オペランドのデータ型datetime2は、add演算子には無効です。 SELECT DATEADD(NANOSECOND,DATEDIFF(NANOSECOND,CAST('00:00:00.0000000' AS TIME),@T),@D) datediff関数の結果、オーバーフローが発生しました。2つの日付/時刻インスタンスを分離する日付部分の数が多すぎます。精度の低い日付部分でdatediffを使用してみてください。 *を使用して、Azure SQL DatabaseおよびSQL Server 2016でオーバーフローを回避できますDATEDIFF_BIG。 SELECT CAST(@D AS DATETIME) + @T 日付と時刻のデータ型は、add演算子と互換性がありません。 SELECT CAST(@D AS DATETIME) + CAST(@T AS …

12
主キー/外部キーの一致が結合に使用されないのはなぜですか?
多くのDBMS(mysql、postgres、mssqlなど)を見つけることができる限り、fkとpkの組み合わせはデータへの変更を制限するためだけに使用されますが、それらはネイティブで結合する列を自動的に選択するために使用されることはほとんどありません(名前での自然な結合のように)。何故ですか?pk / fkを使用して2つのテーブル間のリレーションシップを既に定義している場合、データベースでそれらのテーブルを結合するとpk / fk列で結合したいことがわかりません。 編集:これを少し明確にするために: table1とtable2があるとします。table1の列aには外部キーがあり、これはtable2の主キーbを参照します。これらのテーブルを結合する場合、次のようにする必要があります。 SELECT * FROM table1 JOIN table2 ON table1.a = table2.b ただし、table1.aがtable2.bを参照するキーを使用してすでに定義しているので、DBMSシステムがtable1.aとtable2.bを結合列として自動的に使用することを難しくするべきではないようです。次のように単純に使用できます: SELECT * FROM table1 AUTO JOIN table2 ただし、多くのDBMSはこのようなものを実装していないようです。
48 mysql  sql-server 

2
NUMERICとDECIMALに違いはありますか?
SQL ServerのNUMERICとDECIMALのデータ型は同じように機能することを知っています。それらを作成するための構文は同じで、格納できる値の範囲は同じです。 ただし、MSDNのドキュメントでは、この2つの関係を次のように説明しています。 numericは機能的には10進数と同等です。 通常、「機能的に同等」という修飾子を見ると、2つのことはまったく同じではなく、外部から区別できない 2つの異なるタイプであることを意味します。 この意味は本当ですか?NUMERICとDECIMALには、たまたま外部の観測者と同じ動作をする違いがありますか?または、それらは実際に同等ですか、たとえば、NUMERICはDECIMALの従来の同義語ですか?
47 sql-server 

4
クラスタリングとトランザクションレプリケーションと可用性グループ
1台のサーバーマシンに障害が発生した場合でも、データベースバックエンドが24時間利用可能であるため、SQL Server 2012に依存するアプリケーションを確認する必要があると仮定します。 DBAではなく開発者として、フェールオーバー/高可用性にどのシナリオを使用するかを理解するのに苦労しています。 Windowsフェールオーバークラスター内の2つ(またはそれ以上)のサーバー、クラスター化されたインスタンスとしてのSQL Server トランザクションレプリケーションで最新の状態に保たれる2つ(またはそれ以上)のSQL Serverインスタンス 同期コミットモードで構成されたSQL Server可用性グループ内の2つ(またはそれ以上)のSQL Server これらのシナリオのどれが、どのような種類のワークロードで機能し、どのような種類の障害/停止がそれらのシナリオで処理できるのでしょうか?彼らは同等/交換可能ですか?


2
互換性レベル80の実際の動作は何ですか?
互換モード機能に関するより良い洞察を誰かが提供してくれますか?予想とは異なる振る舞いをしています。 互換モードを理解している限り、SQL Serverのさまざまなバージョン間の特定の言語構造の可用性とサポートに関するものです。 データベースエンジンバージョンの内部動作には影響しません。以前のバージョンではまだ利用できなかった機能と構成の使用を防止しようとします。 SQL Server 2008 R2で互換レベル80の新しいデータベースを作成しました。単一のint列を持つテーブルを作成し、いくつかの行を追加しました。 次に、row_number()関数を使用してselectステートメントを実行しました。 私の考えでは、row_number関数は2005年にのみ導入されたため、compat 80モードではエラーがスローされます。 しかし、驚いたことに、これはうまくいきました。そして、確かに、コンパットルールは、「何かを保存」して初めて評価されます。そこで、row_numberステートメントのストアドプロシージャを作成しました。 ストアドプロシージャの作成は問題なく行われ、完全に実行して結果を得ることができました。 誰かが互換モードの動作をよりよく理解するのを手伝ってくれますか?私の理解には明らかに欠陥があります。


8
すべてのデータベースのすべてのファイルをすばやく圧縮するにはどうすればよいですか?
SQL Server(この場合は2008)では、インスタンス上のすべてのデータベースのすべてのファイル(ログとデータの両方)をどのようにすばやく縮小できますか?SSMSを実行し、それぞれを右クリックして[タスク]-> [縮小]を選択できますが、もっと速いものを探しています。 私はいくつかの「データベースの作成」スクリプトのスクリプトを作成しましたが、デフォルトのバルーンサイズがあったことを忘れており、このプロジェクトでこれらのファイル用に予約されたスペースをそれほど必要としません。

3
sqlplusの出力を1行で表示する方法は?
100列のテーブルがあります。SQL Plus出力ラップでデータを選択すると、読みにくくなります。 私が望むのは、水平スクロールバーを表示するか、何らかの方法で出力を送信することです less 私はSQLPlusで次のステートメントを実行します- SET LINESIZE 32000; SET PAGESIZE 40000; SET LONG 50000; SPOOL output.txt SELECT * FROM big_table; それからbash私は走る- less output.txt 出力はラップされたままで、読み取り不能です。
47 oracle  sqlplus 

2
これまでのキャストは検索可能ですが、良いアイデアですか?
SQL Server 2008では、日付データ型が追加されました。 datetime列のキャストdateは検索可能であり、datetime列のインデックスを使用できます。 select * from T where cast(DateTimeCol as date) = '20130101'; 他のオプションは、代わりに範囲を使用することです。 select * from T where DateTimeCol >= '20130101' and DateTimeCol < '20130102' これらのクエリは同等に優れていますか?
47 sql-server 

6
SSMSのどのディレクトリにも表示されない.bakファイル
今日、SSMS 2008 R2を使用して手動で作成された.bakファイルが他の誰かによって作成されています。データベースを手動で復元しようとしていますが、残念ながら、参照するときにファイルが表示されません。 復元プロセスのスクリプトを作成できますが、この問題は以前に見たことがあり、.bakが表示されない原因はわかりません。

6
データベースを移動した後(バックアップ、復元)、ユーザーを再追加する必要があります
SQL Server Management Studioでデータベースのバックアップと復元を使用して、データベース(SQL Express 2012)を開発マシンからサーバーに、またはその逆に時々移動します。 これを行うたびに、ターゲットユーザーのアプリケーションは、使用するユーザー「george」をデータベースユーザー(データベース、セキュリティ、SQL Server Management Studioのユーザー)から削除し、次のように再追加するまでデータベースにアクセスできません。セキュリティ、ログイン、george / properties、ユーザーマッピングの下の所有者。 これを行うためのより良い方法はありますか?少し複雑に思えます。

2
データベースの「所有者」の目的は何ですか?
今日、サービスブローカーの問題のトラブルシューティングを行っているときに、データベースの所有者が退職した従業員のWindowsログインであることを発見しました。彼のログインは削除されたため、クエリ通知は失敗していました。 おそらくこれに対処するためのベストプラクティスは、「sa」をデータベース所有者にすることです。変更して、キューをクリアしました。 私の(非常に初歩的な)質問:データベースの所有者は何で、その目的は何ですか?

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