データベース管理者

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

4
プライマリファイルグループは完全なSQL Server 2008です
大きなテーブル(〜5000万行)があり、SQL Serverに一括挿入しようとしていますが、次のエラーが表示されます。 「PRIMARY」ファイルグループがいっぱいであるため、データベース「I 3 Stroke」のオブジェクト「myDB」にスペースを割り当てることができませんでした。不要なファイルの削除、ファイルグループ内のオブジェクトの削除、ファイルグループへの追加ファイルの追加、またはファイルグループ内の既存ファイルの自動拡張の設定により、ディスク領域を作成します。 データベースには、約2500万行の別のテーブルがあります。このデータベースは1台のマシンでのみ使用され、既存のデータをマイニングするように設計されており、現在のサイズを超えて成長することはありません。 このような状況で、SQL Serverが文句を言わないようにこれに取り組む最善の方法は何ですか?このDBが複数のユーザーに公開されないというソリューションは重要ですか?

2
ALTER TABLE上のデータベース「凍結」
私たちの本番環境は、今朝、テーブルを変更し、実際に列を追加するときにしばらく凍結しました*。 問題のあるSQL:ALTER TABLE cliente ADD COLUMN topicos character varying(20)[]; *システムへのログインには、まったく同じテーブルからの選択が必要であるため、alterテーブルでログインすることはできません。システムが通常の操作を再開できるようにするには、実際にプロセスを強制終了する必要がありました。 テーブル構造: CREATE TABLE cliente ( rut character varying(30) NOT NULL, nombre character varying(150) NOT NULL, razon_social character varying(150) NOT NULL, direccion character varying(200) NOT NULL, comuna character varying(100) NOT NULL, ciudad character varying(100) NOT NULL, codigo_pais character varying(3) NOT NULL, …

1
SQL Server 2012でdboスキーマの所有権を転送する方法
誤ってユーザーにdb_ownerスキーマの所有権を与えました(以下のUIのチェックボックスを使用)が、今はできません: 所有権を別のユーザーに譲渡する DBからユーザーを削除します(ただし、SQL Serverでログインを削除できます) 私が試したデータベースプリンシパルは、データベースのスキーマを所有しており、削除できません。 ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo そして、正常に完了している間、ユーザーにはまだ所有権があり、灰色で表示されているので、UIでも実行できないようです。 ソリューションを見つけました: Arronの答えに加えて、間違ったDB(facepalm!)で上記のコマンドを実行することに気付きました。DBが修正されると、上記のSQLと以下の回答の両方が機能しました。

5
手書きのコードでSQL Serverのブラケット表記を使用するのは理にかなっていますか?
コードジェネレーターは[]、ほぼすべてに対して新しいMicrosoftブラケット表記()を使用して出力を生成する場合、より単純になる傾向があります。 最初に見たとき、やや禁止された引用識別子表記法の生まれ変わりをすごいけど。 私の知る限り、Microsoft独自の拡張機能です(つまり、Oracleはサポートしていません)。 SQL Serverを見ると、次のようなテーブルを定義しても違いはありません。 CREATE TABLE [dbo].[Table_2] ([col1] [int], [col2] [int]); または CREATE TABLE dbo.Table_2 (col1 int, col2 int); それは個人的または企業スタイルの問題です。一貫してください。 データベースをOracleに移行する場合、括弧はオプションではありません。 古い引用識別子を使用できますが、これらは大文字と小文字を区別するため、多くの問題を引き起こします。 生成されたコードからすべてのブラケットを削除し、名前に空白、他の特殊文字、予約キーワードを使用することを避け、ほとんどのDBMSが理解できる方法でコードを作成することをお勧めしますか?

1
SQL ServerでBase64文字列をネイティブにデコードする
私が持っているvarchar、私はそれのプレーンテキスト同等にデコードしたいBase64でエンコードされたテキスト文字列を保持するSQL Serverのテーブルのカラムを SQL Serverには、このタイプのものを処理するためのネイティブ機能がありますか? base64文字列の例: cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA== デコードするもの: role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764

6
saパスワードの変更
SQL Server Management Studio 2012を使用してsaアカウントのパスワードを変更しようとしています。以下の手順に従いましたが、パスワードはまだ同じです。 SQL Server Management Studioにログインし、データベースエンジン、\ SBSmonitoring、Windows認証を選択します。 オブジェクトエクスプローラー-セキュリティフォルダー-ログインフォルダーに移動します。 SAアカウントを右クリックし、[プロパティ]オプションを選択します。 General Pageで、SAパスワードを変更して確認します。 ステータスページで、[ログイン]を[有効]に変更します。[OK]をクリックして変更を保存します。 SQL Serverとそのすべてのサービスを再起動します。 何か案が ?
15 sql-server 


1
他のテーブルで参照されていない行を削除する
PostgreSQL 9.3データベースに2つのテーブルがあります。テーブルにlink_replyは、which_groupテーブルを指すという名前の外部キーがありますlink_group。 link_group関連する行がlink_reply存在しない場所からすべての行を削除したい。基本的には十分に聞こえますが、私はそれに苦労しています。 これはこのように単純なものになりますか(機能しません)? DELETE FROM link_group WHERE link_reply = NULL;

1
PostgreSQLのjsonb配列から特定のオブジェクトを取得するにはどうすればよいですか?
おおよそ次のようなjson配列を保持する「user」というフィールドがあります。 "user": [{ "_id" : "1", "count" : "4" }, { "_id" : "3", "count": "4"}] 今私は次のようなクエリが必要です: select count from tablename where id = "1" countPostgreSQL 9.4では、jsonオブジェクトの配列から特定のフィールドを取得できません。


1
クエリ結果を物理プリンターに直接送信するエレガントな方法はありますか?
レポートをスケジュールしてプリンターに印刷するというこの奇妙な要求を受けました。 レポート自体は非常にシンプルで、1ページに収まります。私はそれをtxtに印刷することができ、それはうまくいきます(私はより良い製品に関する提案を受け入れていますが)。 コードは次のとおりです。できます。しかし、私はそれが好きではありません。具体的には、ネストされた@bcpと@SQLを廃止したいと思います。 質問:これを行うよりエレガントな方法はありますか? declare @filepath varchar(255), @filename varchar(255), @filetype varchar(255), @sql nvarchar(max), @coverpage_text nvarchar(max) set @filepath = 'C:\users\jmay\documents\' SET @filename = 'TestFile' set @filetype = '.txt' --output to txt set @sql = N'declare @bcp varchar(4000) set @bcp = ''bcp " select * from test_data " queryout ' + @filepath …
14 sql-server 

3
MySQLはなぜこの順序で強制的にインデックスを無視するのですか?
私は実行しEXPLAINます: mysql> explain select last_name from employees order by last_name; +----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+ | 1 | SIMPLE | employees | ALL | NULL | NULL | NULL | NULL | …

2
常時スキャンスプーリング
数十行のテーブルがあります。簡略化されたセットアップは次のとおりです CREATE TABLE #data ([Id] int, [Status] int); INSERT INTO #data VALUES (100, 1), (101, 2), (102, 3), (103, 2); そして、このテーブルを、一連のテーブル値で構成された行(変数と定数で構成される)に結合するクエリがあります。 DECLARE @id1 int = 101, @id2 int = 105; SELECT COALESCE(p.[Code], 'X') AS [Code], COALESCE(d.[Status], 0) AS [Status] FROM (VALUES (@id1, 'A'), (@id2, 'B') ) p([Id], [Code]) FULL JOIN …

4
インデックスの一意性のオーバーヘッド
私はオフィスのさまざまな開発者と、インデックスのコスト、および一意性が有益であるか高価であるか(おそらく両方)について継続的な議論を行ってきました。問題の核心は、競合するリソースです。 バックグラウンド 操作はBツリーのどこに収まるかを暗黙的にチェックし、一意でないインデックスに重複が見つかった場合は、一意化を追加するため、インデックスUniqueを維持するための追加コストはないという説明を以前読んだInsertことがありますキーの終わりですが、それ以外の場合は直接挿入します。この一連のイベントでは、Uniqueインデックスに追加コストはありません。 私の同僚Uniqueは、Bツリー内の新しい位置へのシーク後の2番目の操作として強制されるため、このステートメントに対抗します。したがって、一意でないインデックスよりも維持にコストがかかります。 最悪の場合、テーブルのクラスタリングキーであるID列(本質的に一意)を持つテーブルを見たことがありますが、明示的に非一意であると述べられています。最悪の反対側には、一意性への執着があり、すべてのインデックスは一意として作成されます。インデックスに明示的に一意のリレーションを定義できない場合は、テーブルのPKをインデックスの末尾に追加して、一意性が保証されます。 私は開発チームのコードレビューに頻繁に関与しており、彼らが従うための一般的なガイドラインを提供できる必要があります。はい、すべてのインデックスを評価する必要がありますが、それぞれ数千のテーブルとテーブルに最大20のインデックスを持つ5つのサーバーがある場合、特定のレベルの品質を確保するためにいくつかの簡単なルールを適用できる必要があります。 質問 一意性には、Insert非一意のインデックスを維持するコストと比較して、バックエンドで追加コストがかかりますか?第二に、一意性を確保するためにインデックスの最後にテーブルの主キーを追加することの何が問題になっていますか? テーブル定義の例 create table #test_index ( id int not null identity(1, 1), dt datetime not null default(current_timestamp), val varchar(100) not null, is_deleted bit not null default(0), primary key nonclustered(id desc), unique clustered(dt desc, id desc) ); create index [nonunique_nonclustered_example] on #test_index (is_deleted) include …

5
多くのヌル可能整数を1:1からバイナリ文字列に変換する最速の方法は何ですか?
ワークロードの一部では、不気味なハッシュアルゴリズムを実装するCLR関数を使用して行を比較し、列の値が変更されたかどうかを確認します。CLR関数はバイナリ文字列を入力として受け取るため、行をバイナリ文字列に変換する高速な方法が必要です。全ワークロード中に約100億行をハッシュすると予想されるため、このコードを可能な限り高速にしたいと思います。 異なるスキーマを持つ約300のテーブルがあります。この質問の目的のために、32のNULL入力可能INT列の単純なテーブル構造を想定してください。サンプルデータと、この質問の最後に結果をベンチマークする方法を提供しました。 すべての列の値が同じ場合、行は同じバイナリ文字列に変換する必要があります。列の値が異なる場合、行は異なるバイナリ文字列に変換する必要があります。たとえば、次のような単純なコードは機能しません。 CAST(COL1 AS BINARY(4)) + CAST(COL2 AS BINARY(4)) + .. NULLを正しく処理しません。場合COL1NULLが行1のためのものであり、COL2行2のためにNULLである、両方の行がNULL文字列に変換されます。NULLを正しく処理することは、行全体を正しく変換することの最も難しい部分だと思います。INT列に許可されるすべての値が可能です。 質問を先取りするには: それが重要な場合、ほとんどの時間(90%+)の列はNULLになりません。 CLRを使用する必要があります。 この数の行をハッシュする必要があります。ハッシュを維持できません。 CLR関数があるため、変換にバッチモードを使用できないと思います。 32個のNULL可能INT列をBINARY(X)or VARBINARY(X)文字列に変換する最速の方法は何ですか? 約束どおりのサンプルデータとコード: -- create sample data DROP TABLE IF EXISTS dbo.TABLE_OF_32_INTS; CREATE TABLE dbo.TABLE_OF_32_INTS ( COL1 INT NULL, COL2 INT NULL, COL3 INT NULL, COL4 INT NULL, COL5 INT NULL, COL6 …

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