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

SQL Server 2008(メジャービルドバージョン10.00.xxxx)。また、sql-serverでタグ付けしてください。

7
別のSQL2008データベースへのテーブルの移動(インデックス、トリガーなどを含む)
1つのSQL2008データベースから別のSQL2008データベースへ、大量(100行以上)の大きなテーブル(数百万行)を移動する必要があります。 もともとインポート/エクスポートウィザードを使用していましたが、すべての宛先テーブルにプライマリキーと外部キー、インデックス、制約、トリガーなどがありませんでした(ID列もプレーンINTに変換されましたが、ウィザード。) これを行う正しい方法は何ですか? これがほんの2、3のテーブルである場合、ソースに戻り、テーブル定義(すべてのインデックスなどを含む)をスクリプトで出力してから、スクリプトのインデックス作成部分を宛先で実行します。しかし、テーブルが非常に多いため、これは実用的ではないようです。 データがそれほど多くない場合は、「スクリプトの作成...」ウィザードを使用して、データを含むソースをスクリプト化できますが、72mの行スクリプトはあまり良い考えではありません。



5
日時文字列に1ミリ秒を追加する方法は?
選択に基づいて、次のようにx行を返すことができます。 1 2019-07-23 10:14:04.000 1 2019-07-23 10:14:11.000 2 2019-07-23 10:45:32.000 1 2019-07-23 10:45:33.000 ミリ秒はすべて0です。 1ミリ秒ごとに1を追加する方法があるので、選択は次のようになります。 1 2019-07-23 10:14:04.001 1 2019-07-23 10:14:11.002 2 2019-07-23 10:45:32.003 1 2019-07-23 10:45:33.004 カーソルを作成しようとしていますが、成功していません。 これは、必要な結果を取得するためのクエリです。 select top 10 ModifiedOn from [SCHEMA].[dbo].[TABLE] where FIELD between '2019-07-23 00:00' and '2019-07-23 23:59' 81kの値があります。フィールドはDATETIMEです。

5
10-20のSQL Serverデータベースを〜同期状態にバックアップおよび復元しますか?
10〜50 GBのサイズの10〜20個のSQL Server 2008 R2データベースをオンラインでバックアップし、単一のエンタープライズアプリで同時に使用する必要があります。また、すべてのデータベースでほぼ同期された状態にそれらを復元する必要があります(データベース間で最大数秒の非同期が可能です)。目的は、QA / DEV環境の実稼働データをキャプチャすることです。 データベースを完全復旧で実行することを要求せず、QA環境のデータをキャプチャするための専用のバックアップ方法を考え、私の制御下にないメインのバックアッププロセスに依存しないことを強く望みます。 私の顧客の場合、それぞれ最大30 GBで20の完全バックアップをキャプチャするのに1〜2時間かかります。これにより、単純なリカバリで実行する場合にデータベースの同期がとれすぎるため、フルバックアップを連続して取得することは受け入れられなくなります。 私はこれらよりも良いアイデアを探しています: アイデア1:VMディスクのSANレベルのスナップショット。スナップショットからMDF / LDFをxcopyします。 コピーされたファイルが別のサーバーインスタンスにアタッチされると、その回復プロセスにより、ほぼ同時にスナップショットである一貫性のあるデータベースが作成されます。 少なくとも私がmaster / msdb / etcに対してdesyncを取得する可能性があるため、グーグルでこれが悪い考えだと確信しました。 アイデア2:複雑なバックアップを調整し、すべてのデータベースで同期復元 これには、データベースを完全復旧で実行する必要がありますが、これは望ましくありません。期限(T0)のかなり前に、すべてのデータベースの並列バックアップを開始します。T0に達したら、すべてのログをバックアップします(最大で数分かかります)。結果として得られる無数のバックアップを取り、それらを復元し、ログをロールバック/ロールバックして、T0に対してデータベース全体である程度一貫した状態を取得します。 これを確実に使用するには多くの計画とスクリプトが必要なので、それを避けるためにかなりの時間を費やします。 他の解決策がありませんか? PS1:db snapshotsを使用できるようになりたいと思っていました。アイデアは、各データベースでスナップショットを開始し(数秒で終了する必要があります)、その後、次の分/時間にわたって順番に完全にバックアップします。次に、それらすべてを別のサーバーに復元し、それぞれをスナップショットに戻します。スナップショットはデータベースと一緒にバックアップできないため、このシナリオは不可能です。それらは、作成されたサーバー上の所定の場所にのみロールバックできます。さらに、これらにはEnterprise Editionが必要ですが、これは私がすべての顧客に提供しているわけではありません。 PS2:クロスデータベース同期バックアップを作成できるサードパーティのソリューションをご存知の場合は、そのことをお知らせください。

1
非クラスター化インデックスにクラスター化インデックス列を含める必要がありますか?
非クラスター化インデックスはクラスター化インデックスに基づいていることを考慮すると、非クラスター化インデックスには、クラスター化インデックスに含まれる列のいずれかをリストする必要がありますか? 言い換えると、ProductsテーブルにProductIDのクラスター化インデックスが含まれている場合、ProductID列を含めることが望ましい非クラスター化インデックスを作成するときに、列として追加する必要がありますか? そうでない場合、非クラスター化インデックスに列名を追加するとよいシナリオはありますか?

1
さまざまなSQL Serverスキーマのユーザー権限を設定する
特定のユーザーへのアクセスを制限する必要がありますが、dboが所有するテーブルのデータを表示できるようにする必要があります。 私は次のことをしようとしています: dboスキーマは通常どおり機能し、すべてにアクセスできます。 schema1スキーマはschema1オブジェクトのみにアクセスできます schema1ビューまたはストアドプロシージャがdboが所有するテーブルのデータにアクセスする場合、パーミッションチェーンは適切に user1はschema1にアクセスできますが、他には何もありません。#3の場合を除く 私が試したものは次のとおりです。 ランダムパスワードを使用してテストログインにマップされたuser1ユーザーを作成します dboスキーマにいくつかのテストデータを含むテーブルをいくつか作成しました schema1スキーマを作成しました dbo.people、dbo.taglinks、およびdbo.tagsのデータにアクセスするschema1.profilesというビューから選択するschema1.get_profilesを作成しました ただし、user1としてログインしているときに次のステートメントを使用します。 EXEC get_profiles 1 結果: The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'. WITH EXECUTE AS OWNER「所有権の連鎖」がどのように機能するかを理解しようと試みましたが、理解できません。 私も試しました GRANT EXECUTE ON SCHEMA::schema1 TO user1 GRANT INSERT ON SCHEMA::schema1 TO user1 GRANT SELECT ON SCHEMA::schema1 …

2
実行プランを使用してT-SQLクエリを最適化する方法
過去2日間、試行錯誤と実行計画を使用して最適化しようとして費やしたSQLクエリがありますが、役に立ちません。これを行うことを許してください。しかし、私はここに実行計画全体を掲載します。簡潔にするためと会社のIPを保護するために、クエリおよび実行プランのテーブル名と列名を汎用にするように努力しました。実行計画は、SQL Sentry Plan Explorerで開くことができます。 かなりの量のT-SQLを実行しましたが、実行プランを使用してクエリを最適化することは私にとって新しい分野であり、その方法を本当に理解しようとしました。したがって、誰かがこれを手伝って、この実行計画を解読してクエリで最適化する方法を見つける方法を説明できれば、私は永遠に感謝しています。最適化するクエリはさらに多くあります。この最初のクエリを支援するための踏み台が必要です。 これはクエリです: DECLARE @Param0 DATETIME = '2013-07-29'; DECLARE @Param1 INT = CONVERT(INT, CONVERT(VARCHAR, @Param0, 112)) DECLARE @Param2 VARCHAR(50) = 'ABC'; DECLARE @Param3 VARCHAR(100) = 'DEF'; DECLARE @Param4 VARCHAR(50) = 'XYZ'; DECLARE @Param5 VARCHAR(100) = NULL; DECLARE @Param6 VARCHAR(50) = 'Text3'; SET NOCOUNT ON DECLARE @MyTableVar TABLE …

7
ソース管理下のストアドプロシージャ、ベストプラクティス
現在、Tortoise SVNを使用して.NET Webアプリケーションのソース管理を行っています。SQL Serverストアドプロシージャをソース管理に組み込むための最良の方法は何ですか?現在、VS 2010を開発環境として使用しており、SQL Server Data Tools(SSDT)を使用して構外のSQL Server 2008 R2データベースに接続しています。 私が過去にやっていることは、プロシージャを.sqlファイルに保存し、このファイルをソース管理下に置くことです。これよりも効率的な方法があるはずだと思いますか?VS2010、SSDT、または実稼働マシンのSQL Serverにインストールできる拡張機能はありますか?

3
範囲内の日付ごとに列を返します
表Aを持っているとしましょう:BookingsPerPerson Person_Id ArrivalDate DepartureDate 123456 2012-01-01 2012-01-04 213415 2012-01-02 2012-01-07 ビューで達成する必要があるのは次のとおりです。 Person_Id ArrivalDate DepartureDate Jan-01 Jan-02 Jan-03 Jan-04 Jan-05 Jan-06 Jan-07 123456 2012-01-01 2012-01-04 1 1 1 1 213415 2012-01-02 2012-01-07 1 1 1 1 1 1 システムはイベント用であるため、各ホテルの予約には1〜15日かかりますが、それ以上はかかりません。どんなアイデアでも大歓迎です。

2
SQL Serverに割り当てられるRAMの量を簡単に確認しますか?
SQL Server 2005では、タスクマネージャーを確認し、少なくともSQL Serverに割り当てられているメモリ量を大まかに確認できます。 SQL Server 2008では、SQLServer:Memory Manager / Total Server Memory(KB)perfカウンターが16,732,760を示していても、ワーキングセットまたはコミットサイズが実際に500 MBを超えることはありません。 タスクマネージャで実際にサーバーメモリを表示する設定はありますか?または、SQL Serverでメモリの使用方法を変更した結果ですか

2
フラグの配列(ビットマップ/ビット配列)を格納するためのデータ型
テーブルの各レコードにビット配列を保存し、次の操作をサポートする必要があります。 ビットが設定されているかどうかのテスト、およびビットの設定(SQLを使用) ADO 2.8(ADO.NETではない)を使用した値のクエリと設定 インデックス作成(「カバーインデックス」機能を活用するため) この配列に格納されるビットの最大数は固定されていますが、32を超える場合があります。つまり、単純なint列は常に機能するとは限りません。 これまで見てきたことから、私のオプションは次のとおりです。 複数のint列を使用する bigintを使用します(ビット数が64以下である限り機能します) バイナリを使用 ? 最初のオプションは機能しますが、データにアクセスするコードにかなりのリファクタリングが必要です。2番目のオプションは一時的な救済であり、これまでの検索では、ADOがbigintでうまく機能するかどうかはあまりわかりません。binaryの経験がなく、他のオプションを認識していません。 要件を考慮して、どのデータ型を選択しますか?

4
大きなインデックスのINCLUDEフィールドはシステムパフォーマンスにどのように影響しますか?
この質問は、とSQL Serverのインデックスのパフォーマンスについてですvarchar(2000)としてINCLUDEの被覆指数インチ 低速で不安定なデータベースアプリケーションのパフォーマンスを改善しようとしています。いくつかのケースでは、データのようなmultple文字列操作を含むクエリで、大VARCHAR列を介してアクセスされるSUBSTRING()、SPACE()とDATALENGTH()。アクセスの簡単な例を次に示します。 update fattable set col3 = SUBSTRING(col3,1,10) + '*' + SUBSTRING(col3,12,DATALENGTH(col3)-12) from fattable where substring(col3,10,1) = 'A' and col2 = 2 スキーマは次のようになります。 CREATE TABLE [dbo].[FatTable]( [id] [bigint] IDENTITY(1,1) NOT NULL, [col1] [nchar](12) NOT NULL, [col2] [int] NOT NULL, [col3] [varchar](2000) NOT NULL, ... 次のインデックスが定義されており、大きなテキスト列にカバーフィールドがあります。 CREATE NONCLUSTERED INDEX [IndexCol2Col3] …

5
SQLサーバーに対する攻撃の可能性
SQL Serverログを確認すると、次のようなエントリがいくつか表示されます。 Date: 08-11-2011 11:40:42 Source: Logon Message: Login failed for user 'sa'. Reason: Password did not match for the login provided. [CLIENT: 56.60.156.50] Date: 08-11-2011 11:40:42 Source: Logon Message: Error: 18456. Severity: 14. State: 8. Date: 08-11-2011 11:40:41 Source: Logon Message: Login failed for user 'sa'. Reason: Password did …

2
「SELECT POWER(10.0、38.0);」が算術オーバーフローエラーをスローするのはなぜですか?
私は更新しています私のIDENTITYオーバーフローチェックスクリプトをのアカウントにDECIMALしてNUMERIC IDENTITY列。 チェックの一環として、すべてのIDENTITY列のデータ型の範囲のサイズを計算します。それを使用して、その範囲の何パーセントが使い果たされたかを計算します。以下のためにDECIMAL及びNUMERIC その範囲のサイズである2 * 10^p - 2場合pの精度です。 私はテストを持つテーブルの束を作成DECIMALし、NUMERIC IDENTITY列を、次のようにその範囲を計算しようとしました。 SELECT POWER(10.0, precision) FROM sys.columns WHERE is_identity = 1 AND type_is_decimal_or_numeric ; これにより、次のエラーがスローされました。 Msg 8115, Level 16, State 6, Line 1 Arithmetic overflow error converting float to data type numeric. IDENTITYタイプの列DECIMAL(38, 0)(つまり、最大精度)に絞り込んだのでPOWER()、その値で直接計算を試みました。 以下のすべてのクエリ SELECT POWER(10.0, 38.0); SELECT CONVERT(FLOAT, (POWER(10.0, 38.0))); …

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