タグ付けされた質問 「sql-server-2005」

SQL Server 2005(メジャービルドバージョン9.00.xxxx)。sql-serverにもタグを付けてください。

2
一時テーブルまたはテーブル変数を使用してSQL ServerストアドプロシージャをOracleに移行する方法
SQL Serverストアドプロシージャを作成するよう経営陣に勧められたC#開発者は、このようなプロシージャを生成することがよくあります。 create table #t1 (...); insert into #t1 Select ... from table_a where ...; insert into #t1 Select ... from table_b where ...; update #t1 Set ... = ... where ... Select * from #t1; 単一のステートメントはかなり単純であり、この方法により、正しい結果が生成されます。 多くの場合、私の仕事はそのような手順をOracleに移行することです。 次の事実に直面しましょう。 SQL Serverの異なる一時テーブルは完全に独立しており、任意のアドホック構造を持つことができます。 Oracleグローバル共通テーブルはグローバルオブジェクトであり、すべての用途で同じテーブル構造を共有します。この構造はどこでも使用されていますが、変更することはできません。 Oracle dbaから学んだことの1つは、可能な場合は常に一時テーブルの使用を避けることでした。SQLサーバーのパフォーマンスでさえ、このような変更の恩恵を受けます。 個々のインサートをユニオンに置き換える 最も単純なケースでは、上記は次のようなものに変換できます。 select case when ... …

2
効果的な方法でページングを実装する方法は?
大きな結果セットになるデータベースクエリがあります。データを表示するクライアントはネットワークを介してデータを受信するため、データベースから最初の50件の結果のみを取得してクライアントに送信することにより、転送されるデータの量を最小限に抑えるという考えでした。次に、2番目のページにジャンプして次の50件の結果などを取得する可能性を提供します(例:グーグルが提供するものと同様のもの) 問題は、ページングを実装する効果的な方法は何ですか。mssqlが可能な限りキャッシュを使用し、ページングを変更するたびに同じことが再度実行されないようにしたいと思います。 同時にデータベースをクエリしているクライアントが他にもあります。使用されているSQLエンジン:MS SQL 2005 私の考えは: 準備されたSQLステートメントを使用して、実行プランの共有を確保する ROW_COUNT変数を使用して、必要な行のみを取得します しかし、それは本当に最も効果的な方法でしょうか?または、結果セット全体を取得して、データをクライアントに送信するコードにページングを実装する方が良いと思いますか? ヒントをありがとう! よろしく、トーマス

3
特定のテーブルに関連付けられているすべてのオブジェクトをプログラムでスクリプト化する方法はありますか?
私は、SQL管理スタジオで私は右表/トリガ/キーをクリックすることができることを知っているとscript object as...。オブジェクトの名前を指定して、これをプログラムで行う方法はありますか? もしそうなら、与えられたテーブルに関連付けられたすべてのオブジェクト(主キー、外部キー、トリガー)を見つけ、それらすべてをプログラムでスクリプト化する方法はありますか?

2
2つのDBCC INDEXDEFRAGコマンドをそれぞれ異なるテーブルで同時に実行できますか?
現在、SQL Server 2005データベースのすべてのテーブルに対して、一度に1つのテーブルに対してDBCC INDEXDEFRAGを実行するスクリプトを実行しています。スペースの制約と稼働時間の要件により、INDEXDEFRAGの代わりにDBCC DBREINDEXを使用することはできません。 特定のテーブルが最適化されるまでに長い時間がかかることに気づきました。たとえば、 "sys.dm_exec_requests"動的管理ビューを調べると、table_idが829610394であるテーブルのクラスター化インデックスで、次のINDEXDEFRAGが現在削除されていることがわかります。 DBCC INDEXDEFRAG(0、829610394、1) デフラグプロセスが完了するまでにはかなりの時間がかかることは承知しています。現在実行中のスクリプトが最終的にすべてのテーブルを最適化するという事実は別として、現在のコマンドの実行中に別のテーブルのクラスター化インデックスで別のDBCC INDEXDEFRAGを手動で実行することに害はありますか?これを行うと、両方のテーブルが実際に同時に最適化されますか?

1
バックアップ情報(成功および失敗)SQL Serverを表示するクエリ
2つの異なるデータベースをバックアップする2つのジョブがあります。 ジョブ1がDB1 をバックアップする ジョブ2がDB2 をバックアップするドライブ1の空き容量が少なくなり、ジョブ1が失敗するため、DB1はバックアップに失敗します。この問題を修正するには、スペースを追加する必要がありました。大したことはありません。この問題が1か月にわたって発生しているときに、今日、このことについて知らされました。うん、それはクレイジーだと知っているが、それは開発者だ DB1の完全なバックアップ履歴を取得したい。msdb.dbo.backupsetテーブルから正常なバックアップ情報を取得できることはわかっていますが、データベースの失敗したバックアップを表示するクエリがあるかどうかを知りたいです。 以下のクエリは、12/31 / 13-1 / 27/14の特定のデータベースのバックアップ履歴を表示します。情報には、サーバー、データベース名、バックアップの開始時間と終了時間、dbsのバックアップにかかった合計時間、dbサイズ、バックアップセット名が含まれます。 SELECT distinct CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_start_date, msdb.dbo.backupset.backup_finish_date, CAST((DATEDIFF(second, msdb.dbo.backupset.backup_start_date,msdb.dbo.backupset.backup_finish_date)) AS varchar)+ ' secs ' AS [Total Time] , Cast(msdb.dbo.backupset.backup_size/1024/1024 AS numeric(10,2)) AS 'Backup Size(MB)', msdb.dbo.backupset.name AS backupset_name FROM msdb.dbo.backupmediafamily INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id --Enter …

3
SQL Server Expressの最大接続数は?
SQL Server 2005 Expressエディションをクライアントマシンの1つにインストールし、他の多くのユーザーも、インターフェイスとして提供したC#アプリケーションを介してそのSQL Serverに接続しています。 PCがSQL Serverに接続され、例外がスローされる場合がある SQL Serverが見つかりません... Expressエディションが最大接続制限に達し、エラーが発生すると思います。 この問題を解決する方法を教えてください。 どのエディションのパラレル接続がいくつあるかを知るのに役立つホワイトペーパー、 SQL Server 2008またはSQL Server 2012にアップグレードすることはできますが、Expressエディションを好みます。私が他のバージョンでもこのコンテキストで本当に私に返済するなら、そうすることができます、そうでなければExpressエディションはうまくいきます。

3
インラインTVFとビューのパフォーマンス
ビューの代わりにインラインTVF(テーブル値関数)を使用しているデータベースがあります。たとえば、TVF [fnCarBrands]内で結合している[車のモデル]と[車のメーカー]という2つのテーブルがあるとします。 これらのTVFは他のTVFから呼び出され、さらに処理とレポートを行います。したがって、関数[fnCarBrands]を受け取り、テーブル[購入年]に結合して、関数[fnCarBrandHistory]を作成します。TVFのいくつかの層についても同様です。 インラインTVFは実際にはテーブルと他のTVFの単なる結合なので、おそらくビューを使用して同じ機能を取得できます。 このように記述されたインラインTVFのパフォーマンスは、ビューとどのように比較されますか?

1
LDFファイルからデータを回復するにはどうすればよいですか?
SQL 2005 Express Editionを使用しています。一部の削除されたレコードを復元するために、LDFファイルからデータを読み取ります。 ApexSQLの試用版を使用してみました。サードパーティのソフトウェアを使用する代わりに、ログファイルを自分で読み取る方法を見つけようとしています。 LDFファイルからデータを読み取って回復するにはどうすればよいですか?

5
SQL Selectの実行に時間がかかりすぎる
これは一時テーブルからの単純な選択であり、既存のテーブルを主キーに結合したままにします。結合されたテーブルを参照するトップ1を使用する2つのサブ選択があります。 コードで: SELECT TempTable.Col1, TempTable.Col2, TempTable.Col3, JoinedTable.Col1, JoinedTable.Col2, ( SELECT TOP 1 ThirdTable.Col1 -- Which is ThirdTable's Primary Key FROM ThirdTable WHERE ThirdTable.SomeColumn = JoinedTable.SomeColumn ) as ThirdTableColumn1, ( SELECT TOP 1 ThirdTable.Col1 -- Which is also ThirdTable's Primary Key FROM ThirdTable WHERE ThirdTable.SomeOtherColumn = JoinedTable.SomeColumn ) as ThirdTableColumn2, FROM …

3
SQL Server 2008 R2へのアップグレードに伴うリスク
バージョン2005から2008 R2にアップグレードする必要のあるSQL Serverは多数あります。Microsoftがサポートを終了するため、今年の半ばまでに作業が予定されています。 2005 SQL ServerはすべてSP3とSP4であり、Windows Server 2003で実行されています(サポートはすでに終了していますが、もう1年間は例外です)。 これらのサーバーには、レプリケーション(トランザクション)、ログ配布、レポートサービス、およびSSISパッケージを実行する統合サーバーが含まれます。 ここでの私の質問はどのようにではなく、関連するリスクや、このアップグレードを計画する前に実行できる事前チェックについて知りたいですか? また、インプレースアップグレードは、この移行/アップグレードを並行して行うよりも優れた計画でしょうか?

1
条件付きの一意の識別子フィールド
私は稼働していないデータベースを持っているので、メインテーブルはCustodyDetailsで、このテーブルにはID int IDENTITY(1,1) PRIMARY KEY列があり、他のテーブルで参照されていない別の一意の識別子を追加する方法を探しています。アカウントの内容は、正確にはIDキーではありません。 ただし、この新しいID列にはいくつかの具体的な詳細があり、ここから問題が始まります。フォーマットは次のとおりです。XX/YYどこXXはリセットが/すべての新しい年に再起動することを自動incrementable値であり、YYは現在の年の最後の2桁ですSELECT RIGHT(YEAR(GETDATE()), 2)。 したがって、たとえば、レコードから開始日追加されたふりをすることができます1 28/12/2015終了2016年3月1日には、カラムは次のようになります。 ID ID2 DATE_ADDED 1 1/15 2015-12-28 2 2/15 2015-12-29 3 3/15 2015-12-30 4 4/15 2015-12-31 5 1/16 2016-01-01 6 2/16 2016-01-02 7 3/16 2016-01-03 フロントエンドを使用してコンポジットID(例ではID2)を解析し、最後の2桁を取得して現在の年の最後の2桁と比較し、新しい相関を開始するかどうかを決定することを考えました。もちろん、データベース側でそれをすべて実行できることは素晴らしいことです。 編集1:ところで、私は人々が並列のIDキーを格納するためだけに別々のテーブルを使用しているのを見たので、1つのテーブルのIDキーは2番目のテーブルのセカンダリキーになります、これは少しおかしな話に聞こえますが、おそらくこれはそのような実装が行われるケースですか? 編集2:この追加の IDは、すべてのファイル/レコードにラベルを付けるレガシードキュメント参照です。私はそれをメインIDの特別なエイリアスと考えることができると思います。 このデータベースが毎年処理するレコードの数は、過去20年間で100を超えていません。もちろん、99を超えるとフィールドでできることはほとんどありません(実際には、非常に非常に)。追加の桁で続行すると、フロントエンド/手順は99を超えることができるため、状況が変わることはありません。 もちろん、最初に言及しなかったこれらの詳細の一部は、特定のニーズに合わせてソリューションの可能性を絞り込むだけなので、問題の範囲をより広く保つことを試みました。

2
新しいデータセンターへのデータベースの移動
私の会社はインフラストラクチャを新しいデータセンターに移動しています。新しい環境が稼働する準備ができるまで、新しいサーバーのデータベースを現在の運用データベースと同期させる最善の方法を見つけようとしています。私はフルタイムのDBAではなく、いくつかの調査を行いました。私が読んだことから、国境を越えたレプリケーションのセットアップが私たちのニーズに最適であるように見えます。 詳細:本番DBのサイズは約90 GBで、Robocopyを使用すると、そのコピーを新しいサーバーの1つに移動するのに約9時間かかりました。現在の本番データベースは、移行プロセス全体を通じてオンラインでアクセス可能な状態を維持する必要があります。これは単純なリカバリであるため、データベースミラーリングは使用できません。 トランザクションレプリケーションは、データベースの同期を維持するための最良の方法ですか? 私の計画: (完了)現在のデータベースとログを新しいサーバーに転送し、SQL Serverの新しいインスタンスにアタッチします 開発データベースマシンでディストリビューターをセットアップし、本番データベースからそれに発行します。 毎晩1回、ディストリビューターからプッシュされる更新を受け入れる新しいデータベースマシンでサブスクライバーを作成します。 私の心には2つあります。トランザクションレプリケーションでは、パブリッシュされた各テーブルに主キーがあり、本番データベースのテーブルの多くに主キーが定義されていないことが必要です。私の主な関心事はデータベースを同期させることだけなので、これはそれほど大きな問題になるとは思いません。データベースを使用するさまざまなアプリケーションを後でデータでテストしますが、それが深刻な問題ではないことを確認したいと思います。次に、関連するシステムDBも、マスターなどの元のインスタンスから移動する必要がありますか?新しい環境でActive Directoryのセットアップに移行するので、ユーザーなどは気にしませんが、システムDBの必要性についてはわかりません。 そして一般的に、私はこれらの概念を正しく把握していますか?

2
デフォルトでCHECK_POLICYをオフにする
SQL Server 2000からSQL Server 2005に移動しました。変更できないクライアントソフトウェアは、オプションなしでユーザーを作成します CHECK_POLICY = OFF; ユーザーを作成した後、コマンドを実行する必要があります ALTER LOGIN username WITH CHECK_POLICY = OFF; ポリシーを無効にすると、推奨どおり、できなくなります。 CHECK_POLICY彼女のCREATE LOGINユーザーなしで作成されたデフォルトを無効にすることは可能CHECK_POLICY = OFFですか?

2
物理トランザクションログファイルがミラーのプリンシパルである場合、どうすれば縮小できますか?
週末にデータベースミラーリングをセットアップしましたが、トランザクションログをバックアップするジョブを再度有効にするのを忘れていました。私が今朝来たとき、トランザクションログは58GBに膨れ上がっており、ドライブ容量のほとんどを占めていました。 トランザクションログをディスクに手動でバックアップして、データベースを再度実行しましたが、DBCC SHRINKFILEを実行しても、トランザクションログファイルの物理的なサイズは小さくなっていません。 DBCC SHRINKFILE (N'MyDatabaseName_Log', 1000) を使用してログの使用状況を確認した場合 DBCC SQLPERF(LOGSPACE) 現在のログの22%だけが使用されていることがわかります データベース名ログサイズ(MB)ログ使用領域(%)ステータス MyDatabaseName 55440.87 22.38189 0 log_reuse_wait_descsys.databsesでチェックアウトした場合、表示される唯一のレコードはDATABASE_MIRRORINGなので、ログファイルの物理サイズが縮小されないのは、ミラーが役割を果たしていると思いますか? SELECT log_reuse_wait_desc FROM sys.databases WHERE name = N'MyDatabaseName'; また、プリンシパルデータベースミラーリングの状態がSuspendedであることにも気付きました。再開することは、次のエラーですぐに失敗します。 データベース 'MyDatabaseName'のリモートミラーリングパートナーでエラー5149、ステータス1、重大度25が発生しました。データベースミラーリングが一時停止されました。リモートサーバーのエラーを解決してミラーリングを再開するか、ミラーリングを削除してミラーサーバーインスタンスを再確立します。 ミラーサーバーのエラーログにはこのエラーも含まれますが、ログファイルドライブがいっぱいであることに関するエラーも含まれます 物理ファイルを拡張しようとしたときに、MODIFY FILEでオペレーティングシステムエラー112(ディスクに十分なスペースがありません。)が発生しました。 そして F:\ Databaselogs \ MyDatabaseName_1.ldf:オペレーティングシステムエラー112(ディスクに十分なスペースがありません。)が発生しました。 プリンシパルサーバーのログファイルドライブには60 GBがあり(他のデータベースはここでホストされています)、ミラーサーバーには45 GBしかありません。 ログファイルをバックアップするとデータベースが再び使用できるようになりましたが、ディスク上の物理ログファイルのサイズを減らし、ミラーリングを再開したいと考えています。 ミラーリングやバックアップチェーンを犠牲にすることなく、物理トランザクションログファイルのサイズを縮小するにはどうすればよいですか? SQL Server 2005を実行しています

7
MS AccessプログラミングからSQL Serverに移行する際の主な考慮事項
私は100%独学のMS Accessプログラマーです(私の仕事の主な部分はプログラミングです)、現在はより大きなデータベースを構築しています。UIとして引き続きMS Accessを使用しますが、SQL Serverはすべてのデータを格納し、「作業」の多くを実行します。 本質的には私の質問です。SQL Serverについて、Accessを使用するときにおそらく学んだことも、必要もないことについて、知っておく必要がある主題は何ですか? 何かをする方法を教えてくれるようにあなたを探しているのではなく、あなたが最も重要なことは研究に行くべきだとあなたが考えていること-たくさんの主題とたくさんの詳細の地獄があります、自分を長く見たくありませんあまり価値のない道を進む... 脳のダンプ: メンテナンス:最も重要なこと(データベースの確認、データベースの削減、統計の更新、再構築など) 索引-必要な分からないので、上から基礎を学べる良い本やブログなどはありますか? 他に見逃したもの(SQL Serverを初めて使うと言ったように、おそらくたくさんあります...) それが私が中規模の小売業者とデータベースで働くのに役立つなら、私は主に次のようなことをカバーすることに取り組んでいます レポートプラットフォーム(メインシステムからの売上高/レシート/在庫などを要約し、迅速なレポートを提供します) サードパートとストアがレジスタを介して行った調整ツール(サードパーティからデータをインポートし、トランザクションログを相互参照します) プロモーションに関連するすべてのデータを保存します。製品、価格、予測、実績など

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