データベース管理者

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

1
SQL Server-クラスター化インデックスを使用する場合のデータページの保存方法
最近、クラスター化インデックスのデータページが連続して格納されていないことを聞きました。これは本当ですか? おそらく、データページは通常、規則のいくつかの例外を除いて連続して格納されていますか?または、間違っていると聞き、データページが常に連続して保存されている可能性があります。 どうもありがとう。

3
MySQLストアドルーチンの動的SQL
ストアドルーチンとトリガーの制限に従って、動的SQLは使用できません(バージョン5.0.13以降のストアドプロシージャの制限は解除されました)。この制限が設定されているのはなぜですか?そして、なぜそれを手順のために持ち上げますが、機能やトリガーではありませんか?

2
PL / SQLを実行するアプリケーション開発者のOracleでの作業
Oracleのスキーマレベルの権限の欠如をどのように処理しますか?オラクルのセキュリティアーキテクチャは、オブジェクトレベルの権限のみを必要とするアプリケーションに適しています。また、制限をほとんど必要としないDBAにも適しています。ただし、フロントエンドアプリケーションと複数のスキーマのPL / SQLを使用して開発を行うプログラマにとって、アーキテクチャには大きなギャップがあるようです。以下に、私のオプションとその欠点をいくつか示します。 各プログラマーが独自のスキーマで開発を行うようにします。DBAは、それらを必要とするプログラマーにオブジェクトレベルの特権を付与します。パッケージ開発はすべてDBAが行う必要があります。主な欠点は、プログラマーがデータベースのパフォーマンスを損なうために、少しバケットのようにデータベースを使用することです。プログラマーにデータベースで開発してほしいのですが、この方法では大いに落胆します。 各プログラマーに開発に必要な12個程度のスキーマのユーザー名/パスワードを与えます。これらのアプリケーションスキーマにプロシージャ、テーブルなどを作成するためのアクセス許可を与えます。このアプローチの欠点のいくつかは、複数のログイン自分自身としてログインすることはほとんどありません。クロススキーマ開発も困難です。 プログラマーが開発に必要な各スキーマのプロキシ認証特権を付与します。これにより、プロキシ権限以外の権限を付与する必要なく、ユーザーは自分自身としてログインしたままになります。欠点には、プロキシするスキーマごとに個別の接続を維持する必要があるプログラマーが含まれます。接続を絶えず変更する必要があるため、クロススキーマ開発はより面倒です。また、認証に合格したパブリックデータベースリンクを使用するパッケージは、プロキシ接続内でコンパイルされません。 各プログラマにDBA特権を付与します。–ここでの欠点はセキュリティです。スキーマプログラマーをスキーマから締め出すことはできず、プログラマーは他のプログラマー(DBA)になりすますことができます。 各プログラマーにSELECT / INSERT / CREATE / etcを付与するオプションがないようです。開発を行うために必要なスキーマに対する権限。自分でログインして、1つの接続を使用して作業を行います。アクセスできるスキーマ内の新しいオブジェクトはすぐに使用できます。 何か不足していますか?PL / SQL開発を行うアプリケーションプログラマをどのように扱いますか?

2
正規化演習リソース
データベースの正規化スキルを磨きたい。質の高い初心者から上級者向けのエクササイズ(ソリューションを含む)は、Webのどこで見つけることができますか?

2
リレーショナルデータベースでツリーのようなデータを適切かつ効率的に表すためにモデルを構成する方法は?
SQL質問を使用したリレーショナルデータベース内のツリー状データのトラバースに基づいて、物理的意味を考慮してリレーショナルデータベース上でツリー状データを記述するために定期的に使用される方法を知りたいですか? RDBMSには、通常のSQL ANSIまたは一般的な利用可能な機能以外の特別な機能はないものと想定しています。 疑いの余地なく、私は常にMySQLとPostgreSQL、そして最終的にSQLiteに興味があります。

4
SQL Server 2005/8クエリ最適化のヒント
私は、より良いSQL Serverクエリを作成することについてチームを教育することを検討しており、パフォーマンスを向上させるための最良のヒントは何であるかと考えていました。 たとえば、count(*)がcount(1)よりもパフォーマンスが悪いと主張するDBAがいました(彼女が正しいかどうか、または最新のクエリオプティマイザーに対してまだ有効かどうかはわかりません)。 どのような単純なことをチームに伝えて、常に使用または回避を試みるべきですか?私は理想的には、(a)合理的な違いを生む可能性があり、(b)明言するために1-2行であるものを探しています。


3
T-SQLからの選択出力を非表示
クエリの実行時間を取得しようとしていますが、クエリの出力も非表示にします。経過時間だけが必要です-出力はありません。 例 DECLARE @Start datetime DECLARE @End datetime SELECT @StartTimeWA=GETDATE() SELECT [id] ,[database_id] ,[proc_name] ,[exec_t] from [DB].[dbo].[STAT] SELECT @End=GETDATE() SELECT DATEDIFF(MS,@Start,@End) AS [Duration] 現時点では、私は、クエリの出力を取得し、私は限り出力が行くようにしたい唯一のものです下の私の継続、で。私はこれを行うことができず、他の誰かが同様の問題に遭遇したかどうか疑問に思っていますか?これは、Management Studioやそのようなものではなく、T-SQLでやりたいことです。 selectステートメントを実行してサーバーに報告するのにかかる時間を監視しようとしています。私はそれを毎分実行し、時間を取り戻し(所要時間)、時間とともにトレンド/ベースラインに使用する外部モニターサーバーを持っています。現在のクエリは選択結果と私の継続時間を吐き出すので、それはそれを歪め、私の監視サーバーは混乱します。期間の列が必要でした。また、挿入に対してもこれを行います。これは、選択を実行する必要がないため簡単です。 私はこれを純粋にT-SQLでやろうとしています。クエリを実行するときにかかる時間(スナップショット)を取得し、サーバーがさまざまなレベルの負荷を通過するときにこれが変化するかどうかを確認したいので、DMVを使用したくないクエリの実行時間が変わるかどうか。
13 sql-server  t-sql 

2
varchar(max)8000列と、8000文字以上を格納できる理由を理解する
この Microsoftドキュメントから、+ nは文字列の長さを定義し、1〜8,000の値にできます。maxは、最大ストレージサイズが2 ^ 31-1バイト(2 GB)であることを示します。ストレージサイズは、入力されたデータの実際の長さ+ 2バイトです。 これを理解してください。 varcharの最大文字数8000はのよう2GBです。これは、データの価値よりもはるかに少ないです。 varchar(max)特定のテーブルのこの列には、len(mycolumn)100,000を超えるレコードがあることがわかります。したがって8000、varchar(max)列よりも文字数が多いことがわかります。 質問1:8000キャラクターはどのように登場し、どこで注意すべきですか? 質問2:この列に対する.netデータリーダークエリは、常に100 000+文字の完全な結果を返しますか?

2
MariaDBはネイティブJSON列のデータ型をサポートしていますか?
私は動的列についてではなく、ネイティブ列のJSONデータ型について尋ねています。簡単に言えば、MariaDBのどのバージョンでも次のコードを実行できますか? CREATE TABLE example (names JSON); 私の知る限り、それはわかりませんが、MariaDBのJSONサポートについて長い間話題になっているので、まだわかりませんが、最終的に実装されたと言う人はいません。 -更新- MariaDB Jiraでは、JSONデータ型のサポートに関する3つの問題が未解決のままであることがわかりました。つまり、まだ実装されていません。 https://jira.mariadb.org/browse/MDEV-9056 https://jira.mariadb.org/browse/MDEV-9144 https://jira.mariadb.org/browse/MDEV-6632
13 mariadb  json 

2
SQLでの置換の使用
テーブルがあり、いくつかの名前を更新する必要がありますが、 次のクエリ: 両方とも同じことをしますか? クエリ1 Update mytable Set Name = Replace(Name,'Jeff','Joe') クエリ2 Update mytable Set Name = 'Joe' where Name = 'Jeff'
13 sql-server 

1
未使用のNONCLUSTERED INDEXでクエリの速度を向上させることはできますか?
これは奇妙な状況ですが、誰かが答えを持っていることを望んでいます。 いくつかのパフォーマンストラブルシューティング中に、NONCLUSTERED INDEXをテーブルに追加しましたsp_BlitzIndex。翌日にその使用状況を確認したところ、読み取り数が0(スキャン/シークが0、シングルトンルックアップが0)であったため、無効にしました。 すぐに、INDEXを追加したときに最初にチェックして解決しようとしていたのと同じアプリの遅さ(パフォーマンスの問題)の苦情を受け取ります。 さて、理論的には、これはまったく偶然のように聞こえます。インデックスは、証明可能、測定可能、使用されていません。無効にしても、クエリのパフォーマンスが低下することはありません。しかし、それはほとんどだTOO偶然。 質問 したがって、私の質問は、単純に十分なものです。 それはすべての可能で、その利用統計情報(のDMVから/非クラスタ化インデックスは、こと、sp_BlitzIndex)まだされており、NOの使用状況を表示しません助けて影響を受けたテーブルの上に何らかの形でクエリのパフォーマンスを?


3
ユーザーが属するADグループログインは何ですか?
この質問に適切なタイトルを選択したかどうかはわかりません。私が本当に望んでいるのは、個々のWindows ADユーザーが与えられた場合、このサーバーの特定のデータベースにアクセスできるWindows ADグループ(ログイン)のリストを見つけたいです 次のクエリを実行すると select name, principal_id, type, type_desc, default_schema_name, create_date, modify_date, owning_principal_id, sid, is_fixed_role from sys.database_principals 私のサーバーで Microsoft SQL Server 2008 R2(SP1)-10.50.2500.0(X64)2011年6月17日00:54:03著作権(c)Windows NT 6.1(ビルド7601:Service Pack 1)上のMicrosoft Corporation Standard Edition(64ビット) 次の結果が得られます(一部のリスト): 特定のログインが持つすべての許可を知る必要があります。このログインは、ADグループを介してサーバー/データベースにアクセスできます。 1)上記のリストから、私のログインはどのADグループに属しますか? 以下でこれを行っていますが、このユーザーが属するADグループ(上記の図に従ってこのサーバーにアクセスできる)のリストを見つけたいと思います。 まず、問題のユーザーとして実行します EXECUTE AS LOGIN='mycompany\HThorne' DECLARE @User VARCHAR(20) SELECT @USER = SUBSTRING(SUSER_SNAME(), CHARINDEX('\', SUSER_SNAME()) + 1, LEN(SUSER_SNAME())) …


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