データベース管理者

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

2
SQL Serverの累積的な更新-Windows Updateでは表示されません
可能なすべてのWindowsアップデートをWS2008R2 / SQL2012インスタンスにインストールしました。私が走るとき SELECT @@VERSION 私は得る Microsoft SQL Server 2012 - 11.0.5058.0 (X64) May 14 2014 18:34:29 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor) による http://sqlserverbuilds.blogspot.com/ およびMicrosoftのWebサイトでは、SQL Server 2012 SP2で利用可能な4つの累積的な更新があり、最新のビルドは11.00.9000です。 なぜWindows Updateも累積的な更新を取得しなかったのですか?手動でダウンロードしてインストールする必要がありますか?

1
PostgresqlでCLOB OIDのTEXT値を取得します
次のようなデータベーステーブルがあります。 テーブルの回答を作成します( id intはnullではありません。 question_id intはnullではありません、 回答テキストnull ) このテーブルは、Hibernateによって「answer」列の@Lob属性を使用して最初に作成されました。そのときは気づきませんでしたが、そのように設定すると、Hibernateは実際のテキストではなくOIDを列に格納します。HIDを使用して値を取得すると、OIDがCLOB文字列に自動的に変換されるため、すべてが正常に機能しますが、パフォーマンスの問題になり、OIDを削除したいと考えています。 回答から選択* ID QUESTION_ID ANSWER =============================== 1 123 55123 2 234 51614 3 345 56127 する必要があります ID QUESTION_ID ANSWER =============================== 1 123男性 2 234 203-555-1212 3 345 555 Main St. New York、NY 私の望みは、テーブル「ANSWER_VALUE TEXT」に追加の列を追加し、実際の値をテーブルに取得するために以下のようなことを行い、@ Lob指定子を使用しないようにHibernateを変更することです。 回答の更新セットANSWER_VALUE = getValueFromOID(ANSWER) その「getValueFromOID」関数は存在しますか?そうでない場合、どのように作成するか、少なくともOIDの実際の値をフェッチする方法について、いくつかの指針を得ることができますか? ありがとう

9
エラー:SSPIコンテキストを生成できません
誰かがSQL Serverインスタンスに接続しようとすると、エラーが表示されます。 SSPIコンテキストを生成することはできません。 昨日、停電があり(この表現を英語でどう言うかわからない)、サーバーをシャットダウンする必要がありました。 答えを探して、私はこれを見つけました: SQL Server 2008の接続の問題:SSPIコンテキストを生成できません しかし、彼らは昨日までうまく機能しているので、私には役に立ちません。何も変えたくない。しかし、もし必要なら、私はそれを変えます。 Obs:サーバーを再起動できません。 編集:私の回答以来、エラーは発生していません。

1
SSRSレポートで複数値の文字を渡す方法は?
1つのデータソースから供給される3つのデータセットを含むSSRSレポートがあります。メインデータセットは、他の2つのデータセットを利用した一連のパラメーターに基づいて一部のデータを集約するストアドプロシージャです。 このレポートを強化するメインのストアドプロシージャには、4つのパラメーターがあります。1つはデータの種類のID、2つは開始日と終了日のID、3つ目は単なるフラグパラメーターです。フラグパラメーターは、VARCHAR値でもある複数のフラグ値を渡したい複数値パラメーターです。 @Flagパラメータのストアドプロシージャには、次の共通点があります。 WHERE [Flag] IN (@Flag) 次に、もちろん、SSRSレポートの@Flagパラメーターを設定して、ディメンションテーブルからそれらの@Flag値をプルしているクエリからも入力される「複数の値」を許可します。 私の問題 INT値を処理する場合、ほとんどの場合、同じ手法を使用すると機能します。ただし、文字値を処理していると失敗します。1つのフラグを選択すると、レポートは魔法のように機能します。複数のフラグを選択すると、フラグがストアドプロシージャに正しく渡されず、結果が返されません。 ストアドプロシージャで複数値フラグを直接テストする場合: WHERE [Flag] IN ('A', 'B', 'C') ストアドプロシージャは正しく動作します。したがって、問題はストアドプロシージャではなく、SSRSが複数値の値を@Flagパラメータに渡す方法です。 試したソリューション この@FlagパラメータのSSRSデータセットに次の調整を試みました。 =join(Parameters!<your param name>.Value,",") そしてこれも: =SPLIT(JOIN(Parameters!<your param name>.Value,","),",") これらはすべて単一値で機能しますが、複数値では機能しません。 ここで何が欠けていますか?

2
実行中のセッションのセッションパラメータ値のクエリ
これを行う方法はないと思いますが、実行中のセッションが現在COMMIT_WRITEセッションパラメータに対してどのような値を持っているかを照会できるようにしたいと思います。 私はv $パフォーマンスビューで何も見ていません...そのような値を取得できるSYS x $ビューを知っている人はいますか? 明確化-現在のセッションとは関係なく実行されている別のセッションのパラメーター設定をプルする必要があります。
8 oracle 

1
IDに行を挿入できませんが、行が存在しません
これが私が直面している奇妙な問題です。次のクエリを使用してデータを入力しようとしています insert into product_product (id, product_tmpl_id, make_equip, model_equip, name_template, serial_num_equip, location_equip, issue_date_equip, issue_to_equip, remarks_equip, pr, ch, categ_id,valuation) values (700,700,'Nikon','Action 10x50 Lookout','Nikon Action 10x50 Lookout','671386','40 Wall St.','5/13/2004 12:00:00 AM','','OM''s OFFICE',62,72,502,'manual periodic'); エラーが発生します: ERROR: duplicate key value violates unique constraint "product_product_pkey" DETAIL: Key (id)=(700) already exists. ********** Error ********** ERROR: duplicate key …

2
DB2は主キーでデータを並べ替えますか
列順が主キーと同じだったので、プロダクションクエリからorder by句を削除しようとしている同僚と最近話し合いをしました。 彼が主キーに基づく順序を保証できないことを説明しようとした長い議論の後、最終的な結論は、MSSQLクエリの変更を要求するつもりはないということでした。 しかし、彼はまだDB2クエリを変更する予定でした。 DB2が主キーでクエリを順序付けすることを証明する記事はすぐには見つかりませんでした。現在、それがそうであるかどうか疑問に思っています。 だから私の質問は、order by句がない場合、DB2はどのようにクエリを並べ替えるのですか?主キーを使用していますか? 並列システムで、order by句なしでデータが正しく順序付けられて出力されることをどのように保証できますか?
8 db2  order-by 

4
非常に大きいが単純なテーブルを分割または分割する必要があるのはどの時点ですか
私たちのサイトには、統計情報のためのいくつかの大きくて単純な(INT、INT、DATE)テーブルがあります。各テーブルには最大300,000,000行があり、毎日大きくなります。 ホスティングプロバイダーは、テーブルを分割またはパーティション分割することを提案しており、この推奨事項を他の場所で何度も見ました。 しかしながら... 私はこのアドバイスをSQL Serverの最大容量 -524,272テラバイトのデータベースサイズと調整し、テーブルの行は「利用可能なストレージ」によってのみ制限されます。 これらの数値に基づいて、上記の表は数百万行(10の303乗)を簡単に持つことができます。 ああ、あなたは言うかもしれませんが、能力とパフォーマンスには違いがあります。 しかし、SQL Serverのパフォーマンスに関するほぼすべての質問で、答えは「テーブルの設計とクエリの設計によって異なります」です。 それが私がこの質問をしている理由です。テーブルの設計はこれほど単純ではありません。インデックス付きIDフィールドに基づく単純なcount(*)操作であるクエリもできません。

3
ストアドプロシージャを異なるユーザーが同時に実行できる場合は、一時テーブルを使用することをお勧めしますか?
ActiveGUIDからobjectGUIDを取得するストアドプロシージャに取り組んでいます。結果を一時テーブルに格納し、他のプロセスで使用するために出力パラメーターに値を返します。SPは、さまざまなストアドプロシージャ、およびWebアプリケーションのPHP、ASP Classic、ASP.Netから呼び出されます。 私はそれをここに読んだ(一時テーブルに関して): ストアドプロシージャ内で作成された場合、それらはストアドプロシージャの完了時に破棄されます。さらに、特定の一時テーブルのスコープは、それが作成されたセッションです。つまり、現在のユーザーにのみ表示されます。複数のユーザーが#TableXという名前の一時テーブルを作成でき、同時に実行されるクエリは互いに影響しません。ユーザーは自律型トランザクションのままであり、テーブルは自律型オブジェクトのままです。サンプルの一時テーブル名が「#」記号で始まっていることに気付くでしょう。 私は行ってもいいように思えますが、私が知らない落とし穴がないことを確認するためにいくつかのアドバイスを求めたかったのです。こちらがSPです。 前もって感謝します。 CREATE PROCEDURE stp_adlookup @user varchar(100), @objectGUID varbinary(256) OUTPUT AS SET NOCOUNT ON; DECLARE @qry char(1000) CREATE TABLE #tmp( objectGUID nvarchar(256) ) SET @qry = 'SELECT * FROM openquery(ADSI, '' SELECT objectGUID FROM ''''LDAP://mydomaincontroller.com'''' WHERE sAMAccountName = ''''' + @user + ''''' '')' INSERT INTO …

2
SQL Server:特定のホスト名またはIPアドレスからのみアクセスできるユーザーを作成する方法
依存している愚かなアプリが1つあります。このアプリには、接続文字列がハードコードされています。 SQL Serverのセキュリティを高めるために、SQLユーザーをアプリ内にハードコーディングされたものと同じにしたいのですが、そのユーザーが特定のホスト(IPアドレス)からのみSQL Serverを使用できるようにしたいと考えています。

2
SQLサーバーテーブルの挿入パフォーマンスの最適化
設定 データウェアハウスでは、ファクトテーブルを20ディメンションに結合しています。ファクトテーブルには、3,200万行と30列があります。これは一時的なステージングテーブルなので、他のユーザーがテーブルを読み書きする必要はありません。ベーステーブルから10列、それぞれのディメンションから20列を選択します。ディメンションテーブルは小さい(3〜15.000行)。結合されるフィールドは、整数とnvarcharの両方です。SELECT ... INTOステートメントを使用しています。テーブルにインデックスはありません。 このクエリの実行速度は遅すぎるため、役に立ちません。 試してみたソリューション クエリの処理に時間がかかりすぎるため、次の解決策を試しました。 20の結合を5つのテーブルの4つの結合に分割します。ただし、クエリのパフォーマンスは低いままです。 外部キー列にインデックスを配置します。時間の大幅な短縮はありません。 結合条件のフィールドが整数であることを確認してください。パフォーマンスが25%向上しました。私が探しているものではありません。 select intoではなく、insert intoステートメントを使用します。データベースは単純復旧モードですが、ログファイルの増大によりパフォーマンスが低下します。 これらの調査結果から、コストの89%が表の挿入にあるという実際の実行計画を含めることにしました。その他のコストは、ファクトテーブルの8%のテーブルスキャンと、内部結合のハッシュマッチングの2%です。 ご質問 遅いテーブル挿入の考えられる理由は何ですか? 実行計画なしでこのボトルネックを特定する方法は何ですか? テーブル挿入のコストを削減するためにどのようなアクションを実行できますか?

1
ビューでの集計操作はインデックスを無視する[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 5年前休業。 シナリオ かつては、ETLプロセスに参加し、多数のサードパーティソースからのさまざまな形式のファイルの受信カタログとして機能するステージングデータベースが小さな会社にありました。EはDTSパッケージを介して処理され、監査または制御のための制御構造はほとんどありませんでしたが、「十分十分」と見なされ、すべての意図および目的はそうでした。 E部分によって提供されるデータは、少数の若くて有能なプログラマーによって開発および管理される単一のアプリケーションによる消費を目的としています。当時のデータウェアハウジング技術に関する経験や知識はありませんが、アプリケーションコードから独自のTおよびLプロセスを設定および作成しました。驚いたことに、これらの未熟なソフトウェアエンジニアは、部外者が「理想的とは言えない車輪」と呼ぶものを発明しましたが、「現在十分」を常に存在するサービスレベルとして、運用フレームワークを提供することができました。 しばらくの間、密に結合された領域ではすべてが順調で、ステージングカタログは12のサードパーティのデータをごちそうし、アプリケーションによって供給されていました。アプリケーションが成長するにつれて、その欲求も大きくなりましたが、熟練した白人の騎士の開発者がシステムを監視しているため、これらの欲求は、多くの場合、迅速に対処されました。 しかし、もちろん黄金時代は永遠に続くことはできませんでした。アプリケーションの成功によって繁栄がもたらされ、ビジネスはどんどん成長しました。それが成長するにつれて、ステージング環境とアプリケーションはそれとともに成長することを余儀なくされました。すべての警戒のために、ほんの一握りのヒーロー開発者は、現在の拡張システムを維持するのに追いつくことができず、消費者は自分のデータを受け取る資格がありました。もはやそれは彼らが必要とするもの、あるいは望んでいるものの問題ではなかったが、大衆は彼らがそれに値するだけでもっと多くを要求すると感じた。 ビジネスは盗品でいっぱいの金庫で武装して、市場に手を差し伸べ、成長し続けるシステムをサポートするのを助けるために開発者と管理者を雇いました。あらゆる精神の傭兵が会社に集まりましたが、この成長により、利用可能な専門家のガイダンスにはほとんど影響がありませんでした。新しい開発者と管理者は、欲求不満のせいですべての戦争が起きるまで、自家製のスイートの複雑さを理解するのに苦労しました。各部門はすべての問題を単独で解決しようと試み始め、お互いに取り組むよりもお互いに取り組むためにより多くのことをしました。単一のプロジェクトまたはイニシアチブは、それぞれがわずかに異なるいくつかの異なる方法で実装されます。そのすべての緊張は白い騎士の一部にとっては大きすぎることが判明し、彼らが倒れると帝国は崩壊しました。間もなく、システムは混乱状態になりました。 スパゲッティコードの悪質な約束に対するこれらの分野の変化にもかかわらず、会社は耐えました。結局のところ、それは「十分に良い」でした。 チャレンジ いくつかの政権交代と後の採用担当者の採用で、私は会社の雇用に気づきました。大戦から長い年月が経ちましたが、被害は依然として非常に目に見えます。システムのE部分のいくつかの弱点に対処し、DTSパッケージをSSISにアップグレードすることを装っていくつかのコントロールテーブルを追加できました。これらは現在、実際のデータウェアハウジングの専門家が通常の作成時に使用しています文書化されたTおよびLの交換。 最初のハードルは、値を切り捨てたり、ネイティブデータタイプを変更したりすることなく、再ロードとパージのためのいくつかの制御キーを含める方法で、サードパーティのファイルからデータをインポートすることでした。これはすべてうまくいきましたが、アプリケーションはこれらの新しいテーブルにシームレスで透過的な方法でアクセスできる必要がありました。DTSパッケージはテーブルにデータを入力し、アプリケーションによって直接読み取られます。SSISのアップグレードはQAの理由で並行して実行する必要がありますが、これらの新しいパッケージにはさまざまな制御キーが含まれ、パーティションスキームも活用します。実際のメタデータの変更だけでなく、いずれにしても新しいテーブルを完全に保証できるほど重要になる可能性があるため、新しいSSISパッケージには新しいテーブルが使用されました。 信頼性の高いデータインポートが機能し、倉庫チームによって使用されているため、実際の課題は、ステージング環境に直接アクセスするアプリケーションに新しいデータを提供することであり、アプリケーションコードへの影響は最小限(「いいえ」)です。このため、私はビューを使用することを選択しました。テーブルの名前をdbo.DailyTransactionto などに変更し、ビューdbo.DailyTranscation_LEGACYのdbo.DailyTransactionオブジェクト名を再利用します。LEGACY指定されたテーブル。これらのテーブルに含まれる長年のデータを再ロードすることはビジネスの観点からの選択肢ではないため、新しいSSISで作成されパーティション化されたテーブルが本番環境に移行するため、古いDTSインポートはオフになり、アプリケーションは新しいテーブルの新しいデータにもアクセスします。この時点で、ビューは更新され、新しいテーブル(dbo.DailyTransactionCompleteたとえば)からデータを選択できるようになります(使用できない場合はレガシーテーブルから選択します)。 実際、次のようなことが行われています。 CREATE VIEW dbo.DailyTransaction AS SELECT DailyTransaction_PK, FileDate, Foo FROM dbo.DailyTransactionComplete UNION ALL SELECT DailyTransaction_PK, FileDate, Foo FROM dbo.DailyTransaction_LEGACY l WHERE NOT EXISTS ( SELECT 1 FROM dbo.DailyTransactionComplete t WHERE t.FileDate = l.FileDate ); …

5
varcharデータ型をdatetimeデータ型に変換すると、範囲外の値が発生しました
11月に作成されたすべての行を取得する簡単なクエリを実行しようとしています。 SELECT COUNT(*) FROM dbo.profile WHERE [Created] BETWEEN '2014-11-01 00:00:00.000' AND '2014-11-30 23:59:59.997'; SMSSは次を返します: varcharデータ型をdatetimeデータ型に変換すると、値が範囲外になりました。 'Created'がdatetimeに設定されているときに、データがvarcharからdatetimeに変換される理由がわかりません。 「作成済み」が日時であることをサーバーに通知する必要がありますか?そうでない場合、なぜこのvarcharメッセージが表示されるのですか? 編集:データベースの値はでしたYYYY-MM-DD。以下の@SqlZimからの返信は、convert()を使用してSQLにdbの日付の形式を伝え、スペース文字を文字Tで置き換える必要があることを示しています。 select count(*) from dbo.profile where [created] between convert(datetime,'2014-11-01T00:00:00.000') and convert(datetime,'2014-11-30T23:59:59.997');`

1
トレースフラグ1222が機能していませんか?
同様に構成された2つの2008r2 SQL Server "A"と "C"を使用する顧客サイトがあります。両方のサーバーで、トレースフラグ1204および1222が有効になり、DBCC tracestatus両方のサーバーで次のように表示されます。 TraceFlag Status Global Session 1204 1 1 0 1222 1 1 0 3605 1 1 0 Aでは、トレースフラグは期待どおりに機能し、デッドロックが発生すると、エラーログに1204と1222の両方のデッドロックレポートが記録されます。ただし、Cでは、1204レポートのみが表示され、1222レポートは取得されません。 私の人生では、この違いの理由はまったくわかりません。私はこれを広範囲にグーグルで調べ、これらのトレースフラグに関するMSドキュメントを読んだ(そして再度読んだ)ので、このような動作のレポートも、何が原因であるかについてのヒントも見つかりません。近づく唯一のことは、どちらのトレースフラグも機能していないという時折の主張ですが、これらはすべて、有効化コマンドにタイプミスがあった場合のケースであることが判明しました。DBCC TRACESTATUSを使用して確認しているため、これは当てはまりません。 そのため、トレースフラグ1222 のみが機能しない原因となる可能性のある原因、および/またはそれを修正する方法についての洞察は、高く評価されます。 さて、ここに興味深い展開があります。自分でデッドロックを生成するたびに(このコードを使用:https : //stackoverflow.com/questions/7813321/how-to-deliberately-cause-a-deadlock)、両方のトレースレポートがエラーログに記録されます。デッドロックレポートの1つのみをトリガーするように見えるのは、アプリケーションから数日ごとに発生する「自然な」デッドロックだけです。これが役立つかどうかはわかりませんが、トレース1222が1204と同じデッドロック状態のすべてについて報告しないと考える理由はありますか?

1
削除されていないメモリ最適化DLL
BOLから、私の理解は、SQL Serverサービスが開始すると自動的に再コンパイルされ、不要になったときに削除されるため、DBAはメモリ最適化テーブル用に作成されたDLL、またはネイティブにコンパイルされたストアドプロシージャを管理する必要がないということです。しかし、私は目撃しています。メモリ最適化テーブルが削除され、サービスが再起動された後でも、DLLはファイルシステムに存在し、SQLメモリにロードされ、プロセスにアタッチされています。これは、それらがまだsys_dm_os_loaded_modulesに表示されており、SQLサービスの実行中にそれらを削除しようとすると、ファイルシステムでロックされるという事実からもわかります。 これはバグですか?または、後日クリーンアップされますか?後日、インスタンスの再起動でない場合、クリーンアップをトリガーするものは何ですか?

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