データベース管理者

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

3
SQL Server:ビューではなく、テーブル内のユーザーに選択アクセスを許可します
データベースがいくつかあるSQL Server 2012インスタンスがあります。それらの1つで、データベース以外のテーブルを選択するビューを作成しました。 ユーザーがそのビューを選択できるようにしたいのですが、そのテーブルを選択してはなりません。ユーザーがテーブルを選択できないため、ビューが作成されました。 /programming/368414/grant-select-on-a-view-not-base-tableおよびhttp://msdn.microsoft.com/en-us/library/ms188676を読みました。 aspx、それでも動作しません。 GRANT SELECT TABLE TO USERすべてのテーブルに対してaを実行すると、ユーザーはビューを選択できます。しかし、いずれかのテーブルを取り消すと、失敗します。 これは簡単な手順ですが、機能させるのに苦労しています。以前にそれが発生するのを見たことがありますが(インスタンスの所有者がビューへのアクセスを許可し、テーブルへのアクセスを許可しませんでした)、それを実行したり、方法を知っている人を見つけることができません。 誰かがそれを行う方法についてのチュートリアル、またはコード例を私に提供できますか? ユーザーSELECTsがビューを受け取ると、次のメッセージが表示されます。 オブジェクト<TABLE>、データベース<DB>、スキーマに対するSELECT権限が拒否されましたdbo。 そのテーブルに選択を許可すると、エラーメッセージにより、テーブル名がビューが読み取る別のテーブルに変更されます。

2
連続する各行の合計期間を見つける
MySQLバージョン コードはMySQL 5.5で実行されます バックグラウンド 次のようなテーブルがあります CREATE TABLE t ( id INT NOT NULL AUTO_INCREMENT , patient_id INT NOT NULL , bed_id INT NOT NULL , ward_id INT NOT NULL , admitted DATETIME NOT NULL , discharged DATETIME , PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; このテーブルは入院中の患者に関するものであり、入院中に各患者が時間を費やしたベッドが格納されています。 各病棟には複数のベッドがあり、各患者は同じ病棟内の異なるベッドに移動します。 目的 私がしたいのは、各患者が別の病棟に移動せずに特定の病棟で過ごした時間を見つけることです。つまり、彼が同じ病棟内で過ごした連続した時間の合計時間を見つけたいのです。 …

1
クエリプランをステートメントで分割して再利用できるようにした方がよいでしょうか。
クエリによってクエリプランがどのようにコンパイル、格納、および取得されるかについての限られた知識から、複数ステートメントクエリまたはストアドプロシージャがクエリプランを生成し、クエリプランキャッシュに格納されて、今後の実行でクエリによって使用されることを理解しています。 このプランは、クエリハッシュを使用してクエリプランキャッシュから取得されると思います。つまり、クエリを編集して実行すると、ハッシュが異なり、クエリプランキャッシュで一致するハッシュが見つからないため、新しいプランが生成されます。 私の質問は次のとおりです。ユーザーがマルチステートメントクエリのステートメントの1つであるステートメントを実行した場合、マルチステートメントクエリのキャッシュに既にあるクエリプランの関連部分を使用できますか?ハッシュ値が明らかに一致しないため、答えはノーだと思いますが、マルチステートメントクエリの各ステートメントをハッシュして、クエリから個々のステートメントを実行しているユーザーが使用できるようにした方がよいでしょうか? 私は考慮していない複雑な問題があると思います(そして、私が本当に知りたいのはこれらです)が、より多くのスペースを使用し、さらに多くのクエリプランに同じ「ステートメントプラン」を格納することができるようです生成するCPUと時間。 私の無知を示​​しているだけかもしれません。

2
統計、実行計画、および「昇順の主要な問題」を理解する
統計、実行計画、ストアドプロシージャの実行の間の関係を(概念的に)よりよく理解しようとしています。 統計はストアドプロシージャの実行プランを作成するときにのみ使用され、実際の実行コンテキストでは使用されないというのは正しいことですか?つまり、これが当てはまる場合、プランが作成されたら(そしてプランが適切に再利用されていると仮定して)、「最新の」統計はどのくらい重要ですか? 特に私が読んだ記事(統計、行の見積もり、昇順の日付の列)は、クライアントのデータベースのいくつかで毎日直面しているシナリオと非常によく似たシナリオを説明しています。 特定のストアドプロシージャを使用して定期的にクエリする最大のテーブルの1つに昇順の日付/時刻列があります。 1日に10万行が追加されるときに、実行プランが古くならないようにするにはどうすればよいですか。 この問題に対処するために統計を頻繁に更新する場合、このストアドプロシージャのクエリでOPTION(RECOMPILE)ヒントを使用することは理にかなっていますか? アドバイスや推奨事項をいただければ幸いです。 更新:SQL Server 2012(SP1)を使用しています。

3
メールアドレスは一意ですか、それとも主キーですか?
私はデータベースの初心者です。文字列の比較が遅く、複雑な結合のパフォーマンスに影響するため、メールアドレスを主キーとして使用することはおそらく良いアイデアではないことがわかりました。メールを変更すると、すべての外部キーを変更する必要があり、多くのことを必要とします。努力の。 しかし、私のユーザーテーブルですべてのユーザーがメールアドレスを持っている必要があり、それらのメールアドレスはそれぞれ一意である必要がある場合、メール列に一意のインデックスを追加するだけで十分ですか?Afaikの一意のフィールドではnull値が許可されているため、私はすべてのユーザーがnull値を許可せずに電子メールアドレスを持っている必要があります。ここで見逃しているものはありますか?または、電子メール列を一意にし、サーバーでのデータ検証中に、ユーザーが電子メールアドレスを入力してすべてのユーザーが1つ持つことを確認するとしますか?

2
SQL CLRを使用したセキュリティまたはパフォーマンスのリスク[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 SQL ServerでCLRを使用する際に、特定のセキュリティまたはパフォーマンスのリスクはありますか?


3
参照するすべての外部キーへの主キー更新のカスケード
それを参照するすべての外部キー間で更新をカスケードして主キー列の値を更新することは可能ですか? #編集1: followinqクエリを実行すると select * from sys.foreign_keys where referenced_object_id=OBJECT_ID('myTable') 、update_referential_actionが0に設定されていることがわかります。したがって、主キー列を更新した後は何も行われません。外部キーを更新してCASCADE UPDATEでそれらを作成するにはどうすればよいですか? #EDIT 2: スキーマ内のすべての外部キーの作成または削除をスクリプト化するには、次のスクリプトを実行します(ここから取得) DECLARE @schema_name sysname; DECLARE @table_name sysname; DECLARE @constraint_name sysname; DECLARE @constraint_object_id int; DECLARE @referenced_object_name sysname; DECLARE @is_disabled bit; DECLARE @is_not_for_replication bit; DECLARE @is_not_trusted bit; DECLARE @delete_referential_action tinyint; DECLARE @update_referential_action tinyint; DECLARE @tsql nvarchar(4000); DECLARE @tsql2 nvarchar(4000); …

1
自分のトレーニング目的でOracle StandardまたはEnterpriseエディションを使用できますか?
質問は、Oracleのライセンス条件についてです。 Oracle Databaseの管理について詳しく知りたい。残念ながら、32ビット版のLInuxを使用しているため、Oracle 11 XEをインストールできません(32ビット版は見つかりません)。 Oracle StandardまたはEntrpriseをダウンロードして自分の個人用ノートブックにインストールし、それを追加費用なしで使用し、ライセンスの問題を隠蔽したとしても、それは可能ですか?オープンソースのプロジェクトでさえ、私はそれをいかなる商取引にも使用しません-私はこのインストールを使用して、私のDBAスキルを向上させます。

2
PARTITION BYなしのROW_NUMBER()でもセグメントイテレータが生成される
私は、ランク付けおよび集計ウィンドウ関数、特にセグメントおよびシーケンスプロジェクトイテレータに関する私のブログ投稿を書いています。私が理解している方法は、Segmentがグループの終了/開始を構成するストリーム内の行を識別するため、次のクエリです。 SELECT ROW_NUMBER() OVER (PARTITION BY someGroup ORDER BY someOrder) セグメントを使用して、行が前の行以外の別のグループに属していることを通知します。次に、Sequence Projectイテレーターは、Segmentイテレーターの出力に基づいて、実際の行番号を計算します。 ただし、そのロジックを使用する次のクエリには、セグメント式がないため、セグメントを含める必要はありません。 SELECT ROW_NUMBER() OVER (ORDER BY someGroup, someOrder) ただし、この仮説を試すと、これらのクエリは両方ともセグメント演算子を使用します。唯一の違いは、2番目のクエリはGroupByセグメントにa を必要としないことです。そもそもセグメントの必要性を排除していませんか? 例 CREATE TABLE dbo.someTable ( someGroup int NOT NULL, someOrder int NOT NULL, someValue numeric(8, 2) NOT NULL, PRIMARY KEY CLUSTERED (someGroup, someOrder) ); --- Query 1: SELECT …

2
大きなテーブルでのインデックススキャンが遅い
PostgreSQL 9.2を使用すると、比較的大きなテーブル(2億を超える行)でクエリが遅くなるという問題が発生します。クレイジーなことは何もしていません。単に歴史的な価値を加えているだけです。以下は、クエリとクエリプランの出力です。 私のテーブルレイアウト: Table "public.energy_energyentry" Column | Type | Modifiers -----------+--------------------------+----------------------------------------------------------------- id | integer | not null default nextval('energy_energyentry_id_seq'::regclass) prop_id | integer | not null timestamp | timestamp with time zone | not null value | double precision | not null Indexes: "energy_energyentry_pkey" PRIMARY KEY, btree (id) "energy_energyentry_prop_id" btree (prop_id) …

3
誰がレコードを削除したかに関する情報を削除トリガーに渡す
監査証跡を設定する際に、テーブルのレコードを更新または挿入している人を追跡することには問題はありませんが、レコードを削除した人を追跡することはより問題が多いようです。 挿入/更新フィールドに「UpdatedBy」を含めることで、挿入/更新を追跡できます。これにより、INSERT / UPDATEトリガーはを介して "UpdatedBy"フィールドにアクセスできますinserted.UpdatedBy。ただし、削除トリガーを使用すると、データは挿入/更新されません。誰がレコードを削除したかを知ることができるように、情報を削除トリガーに渡す方法はありますか? これは挿入/更新トリガーです ALTER TRIGGER [dbo].[trg_MyTable_InsertUpdate] ON [dbo].[MyTable] FOR INSERT, UPDATE AS INSERT INTO AuditTable (IdOfRecordedAffected, UserWhoMadeChanges) VALUES (inserted.ID, inserted.LastUpdatedBy) FROM inserted SQL Server 2012の使用

5
SQL Server 2012がマシンアカウントでログインできない
IIS / SQL Serverサイトを2008年から2012年に移行していますが、認証に問題があります。Windows認証を使用してとして認証しますDOMAIN\COMPUTER$が、これは機能せず、次のエラーが表示されます。 ユーザー「DOMAIN \ COMPUTER $」のログインに失敗しました。理由:指定された名前に一致するログインが見つかりませんでした。[クライアント:<ローカルマシン>] アカウントが存在することを確認し、削除して再作成した create login "DOMAIN\COMPUTER$" from windows もう一度実行すると、応答が返されます。 メッセージ15025、レベル16、状態2、行1 サーバープリンシパル 'DOMAIN \ COMPUTER $'は既に存在します。 (DOMAIN\COMPUTER実際のドメインとコンピュータ名の代わりに使用されます) したがって、サイトはSQL Serverにクエリを実行しているようですが、SQL Serverはログインを非常に厳しく調べていません。 私は何を逃したのですか?

2
MySQLを構成または開始できません
まったく新しいKubuntu 14.04インストールで、私は走りましたsudo aptitude install mysql-server-core-5.6。の一部のKDEパッケージが依存しているため、インストールを完了できませんでしたmysql-server-core-5.5。置き換えられました。実行sudo aptitude install mysql-server-5.5すると、パスワードを指定した後にこのエラーが発生します。 Configuring mysql-server-5.5 Unable to set password for the MySQL "root" user An error occurred while setting the password for the MySQL administrative user. This may have happened because the account already has a password, or because of a communication problem with the …

1
ビジーテーブルが掃除機にかけられていません
WindowsではPostgres 9.2を使用して低頻度の時系列データを保存しています。毎秒約2000行を毎秒24時間、週7日、ダウンタイムなしで挿入しています。あるDELETE日の固定数にテーブルの長さを保つためにテーブルの上におき、10分ほどにこれが実行されます。これはかなり安定した9億行になります。(興味のある方のために、SELECT、INSERT、DELETEすべてのパフォーマンスです)。 そのためDELETE、行を削除してもディスク領域は解放されません。そのためVACUUMに実行する必要があります。 私はしました照会pg_stat_user_tablesとVACUUM、これまで実行していないように見えます。 さまざまなドキュメントから理解できること(http://www.postgresql.org/docs/9.2/static/routine-vacuuming.html): 自動バキュームがオンになっているようで、他のテーブルで実行されています。 auto-vacuumは実行されませんFULL。また、テーブルの排他ロックは必要ありません。 自動バキュームが実行されていない理由はありますか?これは純粋にテーブルが常にビジーであるためですか? そして、この場合はVACUUM毎回実行する価値がありますDELETE(10分ごとに実行されます)? 編集: 以下のSOリンクからSQLを使用してクエリを実行します。 -[ RECORD 2 ]---+--------------------------- schemaname | stats relname | statistic_values_by_sec last_vacuum | last_autovacuum | n_tup | 932,315,264 dead_tup | 940,727,818 av_threshold | 186,463,103 expect_av | * 生の出力: -[ RECORD 3 ]-----+--------------------------- relid | 501908 schemaname | stats relname | …

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