データベース管理者

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

5
SQL Server 2012:コマンドラインからのスクリプトの生成
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 5年前に移行され ました。 SQL Server 2012を実行しています。 SQL Server Management Studioには、データベースを右クリックして、[タスク]および[スクリプトの生成]を選択するオプションがあります。 コマンドライン経由でそれを自動化する方法はありますか? データベース全体のスキーマとデータを含むスクリプトを作成したい。 ツールのようにScriptDBしてsqlpubwiz.exe、すべては何SQL Server 2012のについてSQL Serverの2005を対象とするように見えますか?

5
データベースのmdfファイルの場所
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 6年前に移行され ました。 データベースがありますProject。私は見つけることができます私の問題はある.mdfと_log.ldf私のデータベースの私は別のユーザーに自分のデータベースを転送できるようにします。Microsoft SQL Server 2008 Management Studioを使用しています 私Ssms.exeはこのパスに保存されています C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe

1
この構文はどのように機能しますか?{fn CurDate()}または{fn Now()}など
最近、SQL Server 2005用に作成されたかなり古いストアドプロシージャを調べてきましたが、理解できないことがわかりました。何らかのタイプの関数呼び出しのようです。 サンプル: SELECT o.name, o.type_desc, o.create_date FROM sys.objects o WHERE o.create_date < {fn Now()} -1; これは、すべての行が表示されますsys.objects持ってcreate_date前から24時間前。 このクエリの実行プランを表示する{fn Now()}とgetdate()、データベースエンジンに置き換えられていることがわかります。 SELECT [o].[name],[o].[type_desc],[o].[create_date] FROM [sys].[objects] [o] WHERE [o].[create_date]<(getdate()-@1) 明らかに、を使用すること{fn Now()}は、よりもはるかに鈍いですGetDate()。文書化されていないので、私はペストのようなこの構文を避けます。


2
クエリが論理的に似ている場合、なぜ計画が異なるのですか?
Seven WeeksのSeven Databasesから3日目の最初の宿題の質問に答えるために、2つの関数を作成しました。 好きな映画のタイトルや俳優の名前を入力できるストアドプロシージャを作成すると、俳優が主演した映画または類似のジャンルの映画に基づいて上位5つの候補が返されます。 私の最初の試みは正しいが、遅い。結果を返すには最大2000msかかります。 CREATE OR REPLACE FUNCTION suggest_movies(IN query text, IN result_limit integer DEFAULT 5) RETURNS TABLE(movie_id integer, title text) AS $BODY$ WITH suggestions AS ( SELECT actors.name AS entity_term, movies.movie_id AS suggestion_id, movies.title AS suggestion_title, 1 AS rank FROM actors INNER JOIN movies_actors ON (actors.actor_id = movies_actors.actor_id) …

3
SQLCMDコマンドはアクセントを挿入できません
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 6年前に移行され ました。 コマンドラインから新しいデータベースをセットアップするために、sqlcmd.exeを実行しようとしています。Windows 7 64ビットでSQL SERVER Express 2012を使用しています。 私が使用するコマンドは次のとおりです。 SQLCMD -S .\MSSQLSERVER08 -V 17 -E -i %~dp0\aqualogyDB.sql -o %~dp0\databaseCreationLog.log 次に、SQLファイル作成スクリプトの一部を示します。 CREATE DATABASE aqualogy COLLATE Modern_Spanish_CI_AS WITH TRUSTWORTHY ON, DB_CHAINING ON; GO use aqualogy GO CREATE TABLE [dbo].[BaseLayers] ( [Code] nchar(100) NOT NULL , [Geometry] nvarchar(MAX) NOT NULL …

5
リンクサーバーでCASE式に10ブランチという制限があるのはなぜですか?
なぜこのCASE式は: SELECT CASE column WHEN 'a' THEN '1' WHEN 'b' THEN '2' ... c -> i WHEN 'j' THEN '10' WHEN 'k' THEN '11' END [col] FROM LinkedServer.database.dbo.table この結果を生成しますか? エラーメッセージ:メッセージ8180、レベル16、状態1、行1 ステートメントを準備できませんでした。メッセージ125、レベル15、状態4、行1のケース式はレベル10にのみネストできます。 CASE10個以上の「ブランチ」がありますが、ここには明らかにネストされた式はありません。 もう一つの奇妙な。このインラインテーブル値関数は、同じエラーを生成します。 ALTER FUNCTION [dbo].[fn_MyFunction] ( @var varchar(20) ) RETURNS TABLE AS RETURN ( SELECT CASE column WHEN 'a' …

5
SQL Server 2008R2の最適なドライブ構成
SQL Server 2008 R2を実行している次のセットアップを備えたかなり忙しいデータベースサーバーがあります。 SATA RAID 1(2ドライブ)-OS /プログラム SAS RAID 10(4ドライブ)-SQLデータベースファイル(データとログ) SAS RAID 1(2ドライブ)-TempDB(データとログ) このサーバーにドライブを追加できないと仮定して、利用可能な構成を最大限に活用しましたか?または、たとえばログをデータファイルから分離する別のスキームを検討する必要がありますか? 更新: ハードウェアの詳細をさらにリクエストした場合: SATAドライブ(OS /プログラムパーティションに使用)は次のとおりです。WD 7200 RPM 3 Gb / s 3.5インチSATA 他のアレイで使用されるSASドライブは次のとおりです。Seagate 15K RPM 6 Gb / s 3.5インチSAS 使用されるRAIDコントローラーは、LSI 9260-8i SAS / SATA 6 Gb 8ポートです。 アップデート2: 私が受け取ったフィードバックに基づいて、選択可能な次の実行可能なオプションがあるように見えます-私が概説した環境で最高である可能性が高いことを教えてくれる人に賞金を授与します: すべてをそのままにしておきます-私はおそらくあまり良くはしません 2台のSAS RAID 1ドライブを既存のRAID 10アレイに移動して、合計6台のディスクで構成する ログファイルをSAS …

3
選択で一致する余分な文字を含む一意の識別子
一意の識別子を使用してSQL Server 2012を使用していますが、末尾に追加文字(36文字ではない)を追加して選択すると、UUIDとの一致が返されることに気付きました。 例えば: select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8' 行をuuidで返します7DA26ECB-D599-4469-91D4-F9136EC0B4E8。 しかし、あなたが実行した場合: select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8EXTRACHARS' また、uuidを持つ行を返します7DA26ECB-D599-4469-91D4-F9136EC0B4E8。 SQL Serverは、選択を行うときに36を超えるすべての文字を無視するようです。これはバグ/機能または構成可能なものですか? フロントエンドで長さの検証を行っているため、大きな問題ではありませんが、私には正しい動作とは思えません。


2
指定された主キーに関連付けられた外部キーを見つける
特定のデータベースのどの列がPK / FK関係を介して結合されているかを確立する方法が必要です。特定のテーブルのPK / FK情報を返すには SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS cu WHERE EXISTS ( SELECT tc.* FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc WHERE tc.CONSTRAINT_CATALOG = 'MyDatabase' AND tc.TABLE_NAME = 'MyTable' /*AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY'*/ AND tc.CONSTRAINT_NAME = cu.CONSTRAINT_NAME); GO しかし、そのようなクエリから返されたPKの場合、関連付けられたFKを確立するにはどうすればよいですか(1つがある場合)。 参照されたテーブルは次の方法でも取得できます。 SELECT CONSTRAINT_NAME = name, FOREIGN_SCHEMA = OBJECT_SCHEMA_NAME(parent_object_id), FOREIGN_TABLE = OBJECT_NAME(parent_object_id), …

1
選択されているインデックス付きビューのクラスター化インデックスに含まれる要因は何ですか?
簡単に言えば、 オプティマイザによるインデックス付きビューのインデックスの選択をクエリする要因は何ですか? 私にとって、インデックス付きビューは、オプティマイザーがインデックスを選択する方法について理解していることに反しているようです。私が見てきた、これは前に尋ねたが、OPはあまり好評ではなかったです。 私は本当に道しるべを探していますが、擬似的な例を作成してから、多くのDDL、出力、例を含む実際の例を投稿します。 私はEnterprise 2008+を使用していると仮定し、理解します with(noexpand) 疑似の例 この擬似的な例を見てみましょう。22個の結合、17個のフィルター、1000万行のテーブルを横断するサーカスポニーを含むビューを作成します。このビューは、実現するのに高価です(ええ、大文字のE)。SCHEMABINDとビューのインデックスを作成します。それから SELECT a,b FROM AnIndexedView WHERE theClusterKeyField < 84。私を回避するオプティマイザーロジックでは、基になる結合が実行されます。 結果: ヒントなし:720行で4825の読み取り、76ミリ秒で47 CPU、0.30523の推定サブツリーコスト。 ヒントあり:17読み取り、720行、4ミリ秒で15 CPU、0.007253の推定サブツリーコスト ここで何が起こっているのでしょうか?Enterprise 2008、2008 -R2、および2012で試してみました。ビューのインデックスを使用すると考えられるすべてのメトリックで、はるかに効率的です。これはアドホックであるため、パラメータスニッフィングの問題やデータの偏りはありません。 実際の(長い)例 あなたが自虐的なタッチでない限り、おそらくこの部分を読む必要はないでしょう。 バージョン うん、企業。 Microsoft SQL Server 2012-11.0.2100.60(X64)2012年2月10日19:39:15 Copyright(c)Microsoft Corporation Enterprise Edition(64-bit)on Windows NT 6.2(Build 9200:)(ハイパーバイザー) 景色 CREATE VIEW dbo.TimelineMaterialized WITH SCHEMABINDING AS SELECT TM.TimelineID, …

11
特定の文字列をMySQLデータベース全体で検索する方法
特定の文字列を見つけるためにデータベーステーブル全体(行と列)を検索することは可能ですか? 私は約35個のテーブルを持つAという名前のデータベースを持っていますが、「hello」という名前の文字列を検索する必要があり、この文字列がどのテーブルに保存されているのかわかりません。それは可能ですか? MySQLを使用する 私はLinux管理者であり、データベースに精通していません。クエリを説明することができれば本当に役立ちます。
19 mysql 

3
PostgreSQL:pg_start_backup()を、負荷がかかっている稼働中のdbで実行できますか?
確立された複製が壊れています(ダウンタイム中に「要求されたWALセグメントは既に削除されています」)マスターを簡単に停止することは簡単にできません。 できますか pg_start_backup()、 rsync ${PGDATA}/ マスターからスレーブ、 pg_stop_backup() ...マスターpostgresqlがまだ全負荷下にある間に?(またはにpg_start_backup()つながる テーブルロック、 I / Oブロック、 矛盾、 火災警報、 データベース応答が遅い つまり、pg_start_backup()アプリケーションに影響しますか?

5
CTE結果をキャッシュ(遅延スプール)するためのプランガイドを作成する
私は通常、最初に正しいプランを使用するクエリを作成し、それを使用しない同様のクエリにコピーすることにより、プランガイドを作成します。ただし、特にクエリが完全に同じではない場合は、注意が必要です。ゼロから計画ガイドを作成する正しい方法は何ですか? SQLKiwiはSSISで計画を作成することについて言及しましたが、SQL Serverの適切な計画のレイアウトを支援する方法または有用なツールはありますか? 問題の特定のインスタンスは、このCTEです:SQLFiddle with cte(guid,other) as ( select newid(),1 union all select newid(),2 union all select newid(),3) select a.guid, a.other, b.guid guidb, b.other otherb from cte a cross join cte b order by a.other, b.other; そこにあるいかなる結果が正確に3つの異なる思い付くようにする方法guidsおよびこれ以上は?いくつかのSQL Server CTEの癖を克服するために複数回参照されるCTEタイプのクエリを含むプランガイドを含めることで、今後より良い質問に答えられることを望んでいます。
19 sql-server  t-sql  cte 

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