データベース管理者

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

1
SQL Serverの次のバージョンのリリース予定日[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 マイクロソフトは、次のバージョンのロードマップを公開して、計画されたリリース日を特定していますか? そうでない場合、次のバージョンが本番環境に対応できるようになるまでにどのくらいかかりますか?

1
MySQL for Windowsを.zipからインストールし、ルートパスワードをリセットします
私は自分のPC(Windows 8.1 x64)にMySQLサーバーのみを置き、Workbenchなどをインストールしたくありませんでした。だから私.zipはdev.mysql.com/downloadsからアーカイブをダウンロードしました。x86_64バージョン5.7.9(MySQL Community Server(GPL))上のWin64のダウンロードです。 Windowsサービスとしてインストールしましたが、mysqlデータベースはなく、のみでしたinformation_schema。だから私はこれを実行しました: mysql_upgrade.exe --upgrade-system-tables そして、mysqlデータベースが作成されました。しかし、それと同時に、ルートユーザーに何かが起こりましたmysql。もうアクセスできなくなったからです。 そこで、突然現れたこのパスワードをリセットすることにしました(その前にパスワードを持っていなかったためです)。私は公式マニュアルに次の解決策を見つけました、私はこのようにサーバーを起動しました: mysqld.exe --skip-grant-tables --console 次に、mysqlパスワードなしで開きました: mysql.exe –u root そして、ルートパスワードをリセットしようとしました: SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘passhere'); しかし、私はこのエラーを受け取りました: エラー1131(42000):MySQLを匿名ユーザーとして使用しており、匿名ユーザーはパスワードを変更できません。 これは何ですか?どのように私は匿名ですか?すべてのコマンドはcmd.exeアドミニストレーターの下で実行されました。 この状況でrootパスワードをリセットするにはどうすればよいですか? 更新1:現在のユーザーを確認しようとしました: SELECT USER(), CURRENT_USER(); それは与える: +--------+----------------+ | USER() | CURRENT_USER() | +--------+----------------+ | root@ | @ | +--------+----------------+ のように始めたので、それは奇妙mysql.exe -u rootです。 次に、ユーザーテーブルを確認しました。 …

2
SSMSなどの個別の行数を取得するにはどうすればよいですか?
InfoMessageイベントでとエラー出力ExectueNonQueryをキャッチすることPRINTを含め、を介してストアドプロシージャを実行しているクライアントc#プログラムがあります。正常に動作しますが、変なことに気づきました。 SSMSからストアドプロシージャを実行すると、[メッセージ]タブで実行された個々のSQLステートメントの行数が表示されます(InfoMessageから送信されたかのように)。ただし、他の同じ出力はすべてキャッチしますが、プログラムはこれらのメッセージを表示しません。代わりに、ExecuteNonQuery関数の結果で影響を受ける行を返します。これは、個々の行カウントのすべての合計です(これは一種の役に立たないものです)。 たとえば、この手順は次のとおりです。 use [tempdb] go SELECT * INTO MyCols FROM sys.columns go CREATE PROC foo As UPDATE MyCols SET name = name + N'' -- SSMS shows (662 row(s) affected) UPDATE MyCols SET name = name + N'' WHERE name like '%x%' -- SSMS shows (59 row(s) affected) PRINT …

2
複数のディスクに完全バックアップを作成できますか?
現在、私は1つのバックアップファイルIMTDB.bakしか持っておらず、それはデータベース自体と同じHDDにあります。このDBバックアップを本質的に別のディスクに「コピー」して冗長性を高めたいのですが、「サーバーのバックアップに失敗しました。メディアは2つのメディアファミリをサポートするようにフォーマットされています」というエラーが表示されます。これは、バックアップを作成したときに、1つのドライブにバックアップを配置することのみを目的としており、遡って追加することはできないことを意味していると思います。バックアップをこの別のドライブに移行したいのですが(実際にはコピーするだけです)、現在のバックアップを削除する必要はありません。 私は何をしますか?IMTDB.bakを他のドライブのフォルダーにコピーするだけで安全ですか?

6
インデックスの再構築時間は断片化レベルに依存しますか?
インデックスの再構築に必要な時間は、断片化のレベルに依存していますか? 80%フラグメント化されたインデックスの再構築は、40%フラグメント化された同じインデックスの再構築に1分かかる場合、約2分かかりますか? 特定の状況でどのアクションが必要かについてではなく、必要なアクションを実行するために必要となる可能性があるRUNTIME(たとえば、秒単位)を求めています。インデックスの再編成または再構築/統計の更新を行う必要がある場合の基本的なベストプラクティスを知っています。 この質問では、REORGおよびREORGとREBUILDの違いについては尋ねられません。 背景:さまざまなインデックスメンテナンスジョブ(毎晩、週末は重いジョブ)のセットアップのため、毎日の「非常に負荷の高い」オフラインインデックスメンテナンスジョブは、中程度の断片化されたインデックスでより適切に実行して、オフタイムが小さい-またはそれは問題ではなく、80%フラグメント化されたインデックスでの再構築は、40%フラグメント化された同じインデックスでの同じ操作と同じオフタイムを取る可能性があります。 私は提案に従い、何が起こっているのかを自分で見つけようとしました。私の実験的なセットアップ:他にNOTHINGを実行し、他の誰にも使用されていないテストサーバーで、いくつかの追加の列と異なるデータ型[2つの数値、9つの日時、 2 varchar(1000)]と単純に行を追加しました。提示されたテストでは、約305,000行を追加しました。 次に、更新コマンドを使用して、整数値でフィルタリングする行の範囲をランダムに更新し、文字列値を変更してVarChar列の1つを変更し、断片化を作成しました。その後、で現在のavg_fragmentation_in_percentレベルを確認しましたsys.dm_db_index_physical_stats。ベンチマークに「新しい」断片化を作成するたびに、この値を含めてこの値を追加しました。これにphysical_page_countは、次の図を構成する記録が含まれています。 それから私は走りました:そして私の録音に使用することによってAlter index ... Rebuild with (online=on); つかみましCPU timeたSTATISTICS TIME ON。 私の期待:私は少なくとも、断片化レベルとCPU時間の間の依存関係を示す一種の線形曲線の兆候を見ることを期待していました。 これはそうではありません。この手順が良い結果に本当に適切かどうかはわかりません。行/ページの数が少なすぎるのではないですか? しかし、結果は、私の元の質問に対する答えが間違いなくNOになることを示しています。SQL Serverがインデックスを再構築するために必要なCPU時間は、断片化レベルにも基になるインデックスのページ数にも依存していないようです。 最初のグラフは、以前の断片化レベルと比較した、インデックスの再構築に必要なCPU時間を示しています。ご覧のとおり、平均線は比較的一定であり、断片化と必要なCPU時間の間に観察可能な関係はまったくありません。 再構築に多少の時間を必要とする可能性がある、更新後のインデックス内のページ数の変化の影響を尊重するために、FRAGMENTATION LEVEL * PAGES COUNTを計算し、必要なCPU時間の関係を示す2番目のグラフでこの値を使用しました対断片化とページ数。 ご覧のとおり、これは、ページ数が変わっても、再構築に必要な時間がフラグメント化の影響を受けることを示していません。 これらのステートメントを作成した後、巨大で高度にフラグメント化されたインデックスを再構築するために必要なCPU時間は行の数によってのみ影響を受ける可能性があるため、手順が間違っていると思います。私はこの理論を本当に信じていません。 だから、私は本当にこれを絶対に知りたいので、それ以上のコメントや提案は大歓迎です。

5
動的SQLを使用したデータベース間の切り替え
複数のデータベース間でさまざまなコマンドを実行するプロセスがありますが、動的SQLを使用して 'use @var'でDBを変更しても、実際にはデータベースは変更されません。 これを[test_db]で実行: declare @currentDB varchar(max) declare @sql varchar(max) set @currentDB = DB_NAME() set @sql = 'use [' + @currentDB +']' use master exec(@sql) select DB_NAME() [マスター]を現在のデータベース名として返します- use [test_db]動的ではなくコマンドとして入力すると、正しい名前が返されます。 これを実行してデータベースを正しく切り替える方法はありますか?

5
個々の食品の最新の購入記録のみを表示するSQLクエリ
MS Access 2013で食品購入/請求システムを使用していて、個々の食品の最新の購入価格を返すSQLクエリを作成しようとしています。 ここに私が作業しているテーブルの図があります: SQLについての私の理解は非常に基本的です。次の(正しくない)クエリを試してみました。(DISTINCT演算子のため)アイテムごとに1つのレコードのみが返され、最新の購入のみが返されることを期待しています(ORDER BY [Invoice Date] DESC) SELECT DISTINCT ([Food items].Item), [Food items].Item, [Food purchase data].[Price per unit], [Food purchase data].[Purchase unit], Invoices.[Invoice Date] FROM Invoices INNER JOIN ([Food items] INNER JOIN [Food purchase data] ON [Food items].ID = [Food purchase data].[Food item ID]) ON Invoices.ID = [Food …

2
DBエンジンの盗まれたサーバーのメモリが高すぎる
System Center Operations Manager(SCOM)からエラーが発生します。 このエラーを解決するには? SQL DB 2012エンジンの盗まれたサーバーのメモリが高すぎます。 クエリを実行してこのカウンターを取得します。 ╔═══════════════════════════════╦═════════════╗ ║ Stolen Server Memory (MB) ║ 7354.773437 ║ ║ Lock Memory (MB) ║ 106.195312 ║ ║ Free Memory (MB) ║ 64.632812 ║ ║ Connection Memory (MB) ║ 24.203125 ║ ║ Log Pool Memory (MB) ║ 14.085937 ║ ║ Optimizer Memory …

1
修飾されていないインデックス付きビューでのクラスター化インデックス挿入演算子の防止
誰かがこれの回避策を知っていますか?本質的に、ストアドプロシージャは、行が修飾されていなくても、インデックス付きビューに対して挿入演算子を強制します。その結果、キャストエラーが発生します。ただし、アドホックの場合、sqlはビューを考慮から正しく除外します。 次のスキーマを検討してください。 create table testdata ( testid int identity(1,1) primary key , kind varchar(50) , data nvarchar(4000)) go create view integer_testdata with schemabinding as select cast(a.data as int) data, a.kind, a.testid from dbo.testdata a where a.kind = 'integer' go create unique clustered index cl_intdata on integer_testdata(data) go create procedure insert_testdata …

3
サロゲートキーを持つテーブルに、一意の非null値(SSNなど)を持つことがわかっている列がある場合、3NFに違反していますか?
私が理解しているように、第3正規形(3NF)は基本的に、キーが1つだけであることを意味します。 たとえば自動インクリメントid列があるテーブルに、一意であり、nullではないことがわかっている列(社会保障番号など)もある場合、この他の列をキーとして使用できます。 厳密にスキーマ設計の観点から、実用的/ビジネス上の問題(SSNをキー/ FKとして渡す場合のセキュリティ/プライバシーリスクなど)を無視すると、そのようなテーブルは実質的に2つのキーがあるため3NFに含まれませんか? 他の列に一意のキーがあったかどうかによって、答えは異なりますか?もしそうなら、なぜですか?

2
フィルターされたインデックス内にORを配置する場合の回避策はありますか?
フィルターされたインデックス内にORを配置する場合の回避策はありますか? create index FIDX_tblbOrders_sdtmOrdCreated_INCL on dbo.tblBOrder(sdtmOrdCreated) INCLUDE (sintMarketID, strCurrencyCode, sintOrderStatusID ) WHERE ((sintMarketId=1) AND ( (sintOrderStatusId < 9) OR (sintOrderStatusId > 14))) 上記のインデックスを作成しようとしています。sintOrderStatusIdがIN(9-14)である状況には興味がないためです。 もちろん、ビューやインデックス付きビューを作成することはできますが、それを避けようとしていました。 情報を追加するだけ:sintOrderStatusIdはsmallint NOT NULLであり、可能な値の範囲は1〜30です。9〜14は避けてください。したがって、フィルターされたインデックスです。

2
SQL Server 2008:毎日再起動するシーケンス
:私は、次の形式の文字列を使用して列を更新する必要があり、トリガーを追加する必要があり<current_date>_<per_day_incremental_id>、例えば2015-10-01_36。IDは増分である必要があり、ギャップは許容されます。 私のアプローチはかなり素朴です。現在の日付と現在のシーケンス値でテーブルを作成し、その中に単一のレコードを保持します。 create table DailySequence ( date date, sequence int ) insert into DailySequence values (getdate(), 1); CREATE TRIGGER MakeHumanReadableId ON dbo.AuditMeasures FOR INSERT AS DECLARE @ret int; DECLARE @tempDate date; DECLARE @nowDate date; SET @nowDate = getdate(); SELECT @ret = t.sequence, @tempDate = t.date from DailySequence as t; IF …


2
ハッシュされたパスワードでアプリケーションロールをスクリプト化する
ハッシュされたパスワードを使用してアプリケーションロールをスクリプト化する必要があるため、データベースから別のデータベースにコピーできます。 アプリケーションロールを使用して、信頼されていないユーザーに昇格されたアクセスを提供する次のサンプルコードを考えます。 USE tempdb; CREATE LOGIN LimitedLogin WITH PASSWORD = 'Password1' , CHECK_POLICY = OFF , CHECK_EXPIRATION = OFF; CREATE USER LimitedLogin FOR LOGIN LimitedLogin WITH DEFAULT_SCHEMA = dbo; CREATE APPLICATION ROLE MyAppRole WITH PASSWORD = 'Password2' , DEFAULT_SCHEMA = dbo; EXEC sp_addrolemember @rolename = 'db_datareader' , @membername = 'MyAppRole'; …

2
データベースを使用してオブジェクトのロック/ロック解除を追跡する
オブジェクトのロック/ロック解除アクションを追跡する必要があります。オブジェクト(契約、パートナーなど)に対するアクションの前に、lockイベントが発行されます。アクションが終了すると、unlockイベントが発行されます。 ロックされているがまだロック解除されていないオブジェクトを取得したい。目標は、クエリをすばやく作成し、デッドロックを回避することです。 以下は表です create table locks ( id int identity, name varchar(255), lock int ) insert into locks values('a', 1) insert into locks values('b', 1) insert into locks values('c', 1) insert into locks values('d', 1) insert into locks values('a', 0) insert into locks values('c', 0) insert into locks values('a', 1) …

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