データベース管理者

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

6
空白(スペース、タブ、改行)を削除する
私は、SQL Serverの2014年だと私は空白が簡単で、スペース、タブまたは改行(両方の可能性があり、列のコンテンツの開始と終了からクリーン空白に必要\nと\r\n)。例えば ' this content ' should become 'this content' ' \r\n \t\t\t this \r\n content \t \r\n ' should become 'this \r\n content' 等々。 私は最初のケースだけを達成することができました UPDATE table t SET t.column = LTRIM(RTRIM(t.column)) しかし、それ以外の場合は機能しません。

1
同じ列内の日付の合計間隔
インターリーブする行間の同じ列の日付の範囲の違いをどのように合計するのが最適ですか?日時列があり、行間の差を計算したいと思います。秒の差が欲しい。この質問は、2つのタイムスタンプの違いを取得する方法ではなく、同じテーブルの行間で最も効率的に計算する方法に重点を置いています。私の場合、各行には2つの行を論理的にリンクするdatetimeのeventypeがあります。 開始と終了のイベントタイプをグループ化する方法に関連する詳細。(Andriy Mの質問)開始と終了は「すべき」です。開始に後続の終了がない場合は、合計から除外する必要があります。次の開始に移動して、終了があるかどうかを確認します。合計秒数の合計には、連続する開始-終了ペアのみを追加する必要があります。 postgresql 9.xでの作業... 表のデータの例。 eventtype, eventdate START, 2015-01-01 14:00 END, 2015-01-01 14:25 START, 2015-01-01 14:30 END, 2015-01-01 14:43 START, 2015-01-01 14:45 END, 2015-01-01 14:49 START, 2015-01-01 14:52 END, 2015-01-01 14:55 すべての開始日と終了日は連続していることに注意してください。 これが私の最初の試みです。動作しているようです。 SELECT -- starts.* SUM(EXTRACT(EPOCH FROM (eventdate_next - eventdate))) AS duration_seconds FROM ( WITH x AS ( …

4
MySQL-mysql_upgrade-エラーが発生しました:サーバー変数をセットアップできません
私は公式のDockerイメージ内でMySQL 5.7.11を実行しています。 アップグレードしようとすると、次のエラーが発生します。 mysql_upgrade -uroot -p password: Error occurred: Cannot setup server variables. 私は周りを検索しましたが、ヒントは見つかりませんでした。で実行しようとしました--verboseが、うまくいきませんでした。 参考までに、dbを起動したときのログを以下に示します。 db_1 | 2016-02-17T11:23:10.453190Z 0 [ERROR] Incorrect definition of table performance_schema.events_waits_current: expected column 'NESTING_EVENT_TYPE' at position 15 to have type enum('TRANSACTION','STATEMENT','STAGE','WAIT', found type enum('STATEMENT','STAGE','WAIT'). db_1 | 2016-02-17T11:23:10.453233Z 0 [ERROR] Incorrect definition of table performance_schema.events_waits_history: expected column …
10 mysql  upgrade 

2
行の可視性はどの程度正確に決定されますか?
最も単純なケースでは、新しい行をテーブルに挿入すると(そしてトランザクションがコミットすると)、後続のすべてのトランザクションから見えるようになります。xmaxこの例では0であることを参照してください。 CREATE TABLE vis ( id serial, is_active boolean ); INSERT INTO vis (is_active) VALUES (FALSE); SELECT ctid, xmin, xmax, * FROM vis; ctid │xmin │ xmax │ id │ is_active ───────┼─────┼──────┼────┼─────────── (0,1) │2699 │ 0 │ 1 │ f これを更新すると(フラグがFALSE誤って設定されたため)、少し変更されます。 UPDATE vis SET is_active = TRUE; SELECT ctid, xmin, …

1
suser_name()がADアカウント名の変更を反映しないのはなぜですか?
ユーザー名の1つが合法的に変更されたため、Active Directoryのユーザー名をdomain \ oldnameからdomain \ newnameに変更しました。ただし、suser_sname()がストアドプロシージャでこのユーザーによって呼び出されると、新しい名前ではなく古い名前が返されます。 グーグルによって私はKB 946358に誘導されました。これは、おそらくsuser_name()がLsaLookupSidsを呼び出しているために、それらの名前がサーバーにキャッシュされ、更新されていないことを示唆しています。ただし、その記事の回避策にはサーバーの再起動が含まれており、それでも問題を理解したいと思います。 私のコンテキストを彼らのものに変更すると、正しい名前が戻ってきます: EXECUTE AS LOGIN = 'domain\newname' GO SELECT suser_name() --returns 'domain\newname' ...これもLsaLookupSidsを呼び出すため、正しくない名前が返されると想定していました。ここで働いているメカニズムを本当に理解していないようです。 重要かもしれないいくつかの観察: このユーザーはサーバーに明示的にログインしていません。しかし、彼らはそうするADグループのメンバーです。変更された名前(domain \ newname)がの結果セットに表示されexec xp_logininfo 'domain\ADGroupName', 'members'ます。domain \ oldnameにはありません。 ユーザーが、Access 2003 MDBのパススルークエリから呼び出されたストアドプロシージャ内からsuser_name()を呼び出しています。 過去に多くのユーザーのアカウント名を変更しましたが、この問題は先週しか確認されていません(先週、2つの変更が行われ、どちらも問題が発生しているようです)。 サーバーは、Windows 2008 R2 DatacenterエディションでSql Server 2008 SP3 x64を実行しています。 どうしたの?DBAとして、私は何をすべきか、またはこれを解決するためにどこを見ればよいでしょうか?

3
列の特殊文字をスペースで置き換える
特殊文字をスペースに置き換えるクエリを作成しようとしています。以下のコードは、行を識別するのに役立ちます。(英数字、カンマ、スペースは有効です): SELECT columnA FROM tableA WHERE columnA like '%[^a-Z0-9, ]%' 置換関数をselectステートメントに統合して、結果セット内の英数字、コンマ、スペース以外のすべての文字を ''(スペース)で置き換えるにはどうすればよいですか。これは機能しません: SELECT replace(columnA,'%[^a-Z0-9, ]%',' ') FROM tableA WHERE columnA like '%[^a-Z0-9, ]%'

1
アップグレード後、SQL Server AlwaysOnデータベースが同期しないモードまたはリカバリモードでスタックする。エラー:データベース '…'バージョン782を開けません
SQL Server 2014 SP1(12.0.4422.0)からSQL Server 2016 CTP 3.2(13.0.900.73)へのアップグレードをテストしているときに、推奨される更新プロセスに従い、フェールオーバー後にデータベースが古いプライマリで起動しないという問題に遭遇しました更新されたセカンダリに。私たちの設定はプライマリレプリカと単一のセカンダリレプリカであり、私が完了した手順は次のとおりです。 同期コミットセカンダリレプリカの自動フェイルオーバーを削除する セカンダリサーバーインスタンスを新しいバージョンにアップグレードする セカンダリレプリカに手動でフェイルオーバーする 新しいプライマリレプリカでデータベースがオンラインであることを確認する 以前のプライマリレプリカを新しいバージョンにアップグレードする セカンダリのアップグレードとそれをプライマリにするフェイルオーバーは、期待どおりに機能しました。しかし、以前のプライマリレプリカをアップグレードした後、その上のデータベースがSSMSで「同期していない/回復中」としてリストされていることに気付きました。また、それらにアクセスしようとすると、エラーメッセージが生成されます。 データベース...にアクセスできません。(ObjectExplorer) 私が見たSQL Serverログを介してチェック データベース '...'バージョン782を開けません。データベースを最新バージョンにアップグレードしてください。 master..sysdatabasesテーブルをクエリすると、テーブルが確かに古いバージョンであり、アップグレード中に更新されていないことがわかりました。 残念ながら、ログには更新されなかった理由が示されておらず、可用性グループダッシュボードには、一部の可用性データベースのデータ同期状態が正常ではなく、理由がないことを示す一般的な警告しかありませんでした。 TSQLを使用してデータベースをデタッチするか、オフラインに設定して更新を「キック」しましたが、それらはSQL AGの一部であるため、これらのコマンドは機能しません。 SQL AGの一部であるデータベースを最新バージョンにアップグレードするにはどうすればよいですか?



3
バックアップを実行するときのヘッダーのみの復元の使用は何ですか?
次のクエリでバックアップを監視すると: SELECT command, percent_complete, 'elapsed' = total_elapsed_time / 60000.0, 'remaining' = estimated_completion_time / 60000.0 FROM sys.dm_exec_requests WHERE command like 'BACKUP%' or command like 'RESTORE%' バックアップの前に、SQL Serverがヘッダーを復元してからバックアップを実行することに気づきました。 何に使うのか、なんとか実行時間を短縮できるのかと思っていました。実際のバックアップよりも時間がかかるようです。

2
sp_executesqlをデフォルトで設定/使用できますか?
SQL Serverに対して非常に動的なSQLクエリを使用するアプリケーションを探しています。非常に奇妙で複雑な方法で作成されたクエリを見て、それは別の話ですが、私が自分で物事を見つけることができない(あまりにも愚かすぎる)ことの正当な理由を与えるように言います...わかりませんクエリがでラップされているコードsp_executesql。 しかし、トレースすると、多数のクエリがでラップされて表示されsp_executesqlます。アプリケーションソリューション全体には、コマンドもまったく含まれていませんsp_executesql。 だから、デフォルトでsp_executesqlを使用してクエリをラップするようソフトウェアに強制する、まだ知らない種類の構成があるのか​​どうか疑問に思いました。 何がこの動作を引き起こす可能性がありますか?


3
3つのテーブル間の循環依存(循環参照)を回避するにはどうすればよいですか?
3つのテーブルがあります。 人 役職 いいね ERモデルを設計すると、循環依存関係が発生します。 1:N 人-------- <投稿 1:N 投稿---------- <いいね 1:N 人-------- <いいね ロジックは次のとおりです。 1人が多くの投稿を持つことができます。 1件の投稿に多くの高評価があります。 1人が多くの投稿を高く評価できます(作成された人は自分の投稿を高く評価できません)。 この種類の循環設計を削除するにはどうすればよいですか?それとも私のdb設計は間違っていますか?

1
何を試してもSQLCMDが機能しない
私が何をしようとも、SQLCMDを機能させることができません。サイズが200mb +で、SQLサーバーアプリケーションから実行できないスクリプトを実行しようとしているので、SQLCMDを介して実行する必要がありますが、スクリプトをログインまたは実行しようとすると、スクリプトはすぐに閉じます。 私はmsdnによってsqlcmdユーティリティを追跡しました。 信頼できるコマンドSQLCMD -EI getを使用してそれを実行しようとしました: Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Named Pipes Provider: Could not open a connection to SQL Server [2]. . Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login timeout expired. Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : A …

4
FIRST()およびLAST()のSQL Server 2012バージョンは何ですか?
value列のあるテーブルがあります。次に示すように、最後の行から最初の行を差し引いて計算します。 id value 1 10 2 45 3 65 4 95 . . . . . . 500 200 入手したい 200 - 10 = 190 SQL Server 2012で以下のコマンドを使用しようとしましたがLAST、機能FIRSTしません。 SELECT LAST(Value) - FIRST(Value) FROM Counter; SQL Serverでのこのコマンドの構文は何ですか?

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