データベース管理者

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

5
SQL Serverコマンドラインの使用法 出来ますか?
私はSQL Server Management Studio 2008に組み込まれている「ソリューションエクスプローラー」を使用してプロジェクトを管理しようとしていましたが、2週間の苦労の末、本当に気にしないと判断しました。「便利」な機能は実際にはかなり邪魔です。 残念ながら、私が働いている場所はMSショップであり、かなり行き詰まっています。コマンドラインに戻りたい(Vimを切望している!)。上記の「ソリューションエクスプローラー」を置き換えるために、TortiseSVNフロントエンドを使用してローカルのSubversionリポジトリをインストールし、非常にうまく動作させています。私はVimもインストールし、それをカスタマイズする作業をしながら、ハミングしています。 ただし、まだ解決策を見つけていないのは、コマンドラインからSQL Serverに対してコマンドを実行する方法です。私はMySQL / Postgresコマンドラインプロンプトに慣れています。これは、私が過去に使用したものであり、クラスの処理中に使用していたためです。しかし、Windowsのコマンドラインからスクリプトを実行する方法が見つからないようです。現在、Vimで編集し、SSMSでページを更新して実行しています。必要な場合を除いて、SMSSには触れない方がよいと思います。 sqlsharpを提案する投稿を見たことがありますが、ページに移動したときに、探しているものとはまったく違う感じがします。 -編集 2つの解答チェックマークを付けることができたことを本当に願っています。P.キャンベルには技術的に正しい答えがあり、何度か試してみました(sqlcmdを試すとエラーが発生し続けます...名前付きパイプがどのように動作しているのかを調査しているのですが...設定しても有効にすると、動作しないようです。) それを試しても成功しなかった後、Management Studioにコピーして貼り付けるだけの方法を試しましたが、それはばかげていました...だから、おそらくHardCodeも正しいと判断しました。

5
SQL Serverで適切な電話番号が設定されていないレコードの数を確認する最良の方法は何ですか?
私は歴史的に人々が自由に価値を提供するために使用できる分野を持っています。適切な値を持たないレコードを特定して、クリーニングできるようにする必要があります。 私はこのためにSSISを見回してきました。私の傾向は、いくつかのC#コードで正規表現を使用してスクリプトコンポーネントを使用し、その後リダイレクトすることです。それでも、C#に頼らずにこれを行う方法がSSISにあるかどうか疑問に思っていました。 適切な電話番号が記録されていないレコードの数を調べる方法を見つけるのに、あまり運がありませんでした。

2
InnoDBのテーブル作成エラー:「行サイズが大きすぎます」
レポートを生成するために、正規化されたデータベース構造を一時テーブルにフラット化するエンジニアが何人かいます。列は次のように指定されていますTEXT NOT NULL(「なぜ彼らはそれをしているのですか?」 Linuxでは、MySQL 5.1.48 Community RHEL5とInnoDBプラグイン1.0.9を使用しています。 MyISAMを使用しているときに、最大列または最大行長のテーブルサイズ制限に遭遇したことはありません(調査中に、2598で最大列制限に達しました(2599番目がエラー1117の原因になります)。InnoDBでは制限に達しています。これらの制限は、テーブル(データ挿入なし)として: エラー1118(42000)1行目:行サイズが大きすぎます。使用されるテーブルタイプの最大行サイズはBLOBを含まない8126です。一部の列をTEXTまたはBLOBに変更する必要があります 以下に対する答えを探しています。 ロットのv / v / b / t列を使用する場合に、行サイズを特定するための詳細な式は何ですか?varchar(N)列(Nは1から512の間)、UTF8文字セット(* 3)、および失敗するまでテーブルに必要な数の列を使用して、いくつかの異なる形式を試しました。私が試したコンボはどれも、実際のテスト結果と一致する値を示していません。 行サイズを計算するときに、他にどのような「オーバーヘッド」を考慮する必要がありますか? varchar(109)列を持つテーブルの作成からvarchar(110)列に変更すると、エラーメッセージが8126から65535に変わるのはなぜですか?
11 mysql  innodb 

1
PostgreSQLのBLOBまたは参照
Ubuntuサーバーで実行されるPostgreSQLデータベースにバイナリデータファイルを保存する必要があります。最初は、それぞれ約250kbのファイルが数十個あります。ただし、ファイルの数は時間とともに増加します。他のダウンストリーム分析のために、ファイルからデータを抽出する必要がある場合があります。 バイナリデータをBLOBまたは参照として保存するという昔からの疑問について、いくつかの調査を行いました。どちらも明らかに長所と短所があります。PostgreSQLに関して知っておくべき特定の問題はありますか?PostgreSQL関数または外部Pythonプログラムのいずれかを使用してファイルからデータを抽出する場合、どちらの方法が望ましいですか? データファイルをデータベースに直接格納する場合、他のすべてのフィールドを含むテーブルではなく、「メイン」テーブルを参照する外部キーを含む別のテーブルにデータファイルを格納する方が良いでしょうか? ここで質問と回答を読みました。そこでのコメントは、Linuxでの(ファイルシステムでの)参照によるバイナリファイルの保存の方が良いことを示唆しています。ここでの質問は、特にPostgreSQLと、さまざまな分析のためにファイルからデータを抽出することに関するものです。 更新:同様の質問。
11 postgresql 

4
Oracleのテーブルのインデックスによって消費されている実際のスペースを見つける方法は?
Oracle 10gのテーブルのインデックスによって消費されている実際のスペースを見つけたいです。オラクルが将来使用するために予約したスペースを含めるつもりはありません。(Oracleによるオーバーヘッドは考慮すべきではありません。)割り当てられたバイトではなく、使用されたバイトが欲しいです。 今後のお手伝いをお願いします。 また、テーブルの長いフィールドの実際のサイズを見つける方法はありますか。 PS:vsize()およびdbms_lob.getlength()は機能しません。

2
SQL 2008 Web Editionの「大きすぎる」サイズはどれくらいですか?
間もなくホストされるアプリケーションでは、SQL Server 2008 WebエディションとSQL Server 2008 Enterpriseエディションのどちらかを選択する必要があります。「必須」機能はありません。アプリケーションは現在SQL Expressで実行されていますが、SQL Expressが課す最大サイズの10 GBを超えます。 この比較表と、このページの「スケーラビリティとパフォーマンス」で最も重要な表を見ています。テーブルが大きくなるにつれて、「テーブルとインデックスのパーティション分割」などの機能は、パフォーマンスの速度を保証するために不可欠になります。しかし、これはどのテーブルサイズで必要ですか? データベースのサイズと使用にEnterprise Editionのスケーラビリティとパフォーマンス機能が必要かどうかを判断するには、どの戦略を使用する必要がありますか?

1
いつDBCC CLEANTABLEを実行してスペースを再利用する必要があるかを判断する信頼できる方法はありますか?
最近、ファイル使用率が80%に近づいたときにファイルを単に成長させるのではなく、ヒープのデフラグ、クラスター化インデックスの追加と削除、行またはページの圧縮などの通常のトリックを介してスペースを再利用することに積極的に取り組んできました。 ただし、DBCC CLEANTABLEを実行してさらに多くのスペースを取り戻すことができたケースがいくつかあります。私の環境には数百のデータベースがあるため、ユーザーがそれぞれのデータベースで何をしているのかを知ることは不可能であり、固定長の列の削除に関連する変更があることは完全に許容できます。私が書いたオブジェクトスペース使用率スクリプトの行数とページ数を比較することで、これらの機会を見つけました。このようなシナリオの検出を自動化することで、これをさらに一歩進めたいと思います。 私が知りたいのは、このような機会を積極的に監視している人がいるなら、そうだとしたら、具体的に何を探しますか? 私の考えは、行の最大サイズと最小サイズ、テーブルの行数、割り当てられたページ数、および使用されたページ数を収集するという線に沿って何かを記述し、いくつかの基本的な計算を行って結果を記録することでした「期待される」はずの外にあります。


3
既存の外部キーに基づいて結合条件を直感的にするデータベースエンジンはありますか?
外部キーを定義したときに、エンジンがこの情報を使用して正しいJOIN式を自動的に把握できず、代わりに同じ句を再入力する必要があるのは不思議に思えます。既存の外部キーを検査するデータベース、ある種の研究プロジェクトはありますか?

2
SQL Server機能を使用して、番号で区別されたストアドプロシージャのグループを作成する人はいますか?
質問は、このmsdnドキュメントの数値パラメーターを参照しています そうでない場合は、SQL Serverで複数のストアドプロシージャを番号で区別して作成し、1回のドロップでドロップできます。 create procedure dbo.stored_proc1 as select 1 go create procedure dbo.stored_proc1;2 as select 2 go exec stored_proc1 -- returns 1 go exec stored_proc1;2 -- returns 2 go drop stored_proc1 -- drops both go この機能は誰かが何か役に立つものに使用しているのか、それとも単なる歴史的な好奇心なのか。

4
MySQLデータベースのログインを監査する
MySQLへのログインを監査する方法はありますか?各従業員のユーザー名を作成して、ログインの監査証跡を作成できるようにしたいと考えています。しかし、ググリングは良い結果をもたらしていません。 監査できる数が多いほど良いです。少なくとも、いつ誰がログインしたかを知っておくとよいでしょう。だれがどのクエリをいつ実行したかを確認したほうがよいでしょう。データベースには機密情報が含まれている可能性があるため、ログは主にクライアントにログを提供するためのものです。 明らかに、各ユーザーが(いつ)実行したクエリを監査できることで、セキュリティ問題が発生した場合に、その原因を正確に特定できるようになります。

2
ストアドプロシージャを使用して別のデータベースに接続する方法
外部データベースからいくつかのデータを取得し、それを別のデータベースで計算する必要があります。ストアドプロシージャから外部データベースに接続することはできますか?みんなありがとう。 PS。 Oracleを使用していて、両方のデータベースが同じサーバーにあります。

2
PostgreSQLにおけるUniProtの生物学的シーケンス
UniProtの生物学的シーケンスをPostreSQLに保存する最良の方法は何ですか? データ詳細 UniProtから1200万のシーケンスを取得します。この数は3〜10か月ごとに倍増する可能性があります。 シーケンスの長さは100から500億文字までさまざまです シーケンスの1%未満が1万文字を超える 長いシーケンスを個別に保存するとパフォーマンスが向上しますか? シーケンスは、タンパク質またはDNAアルファベットのいずれかです。 DNAアルファベットは5文字(A、T、C、G、または-)です。 プロテインアルファベットは約30文字です。 2つの異なるアルファベットのシーケンスを別の列または別のテーブルに格納してもかまいません。それは役に立ちますか? データアクセスの詳細 エレミヤ・ペシュカのコメントに答えるには: タンパク質とDNAシーケンスは異なる時間にアクセスされます シーケンス内を検索する必要はありません(それはdbの外で行われます) 一度に1つの行にアクセスするか、IDによって行のセットを引き出します。行をスキャンする必要はありません。すべてのシーケンスは他のテーブルによって参照されます-いくつかの生物学的および時系列的に意味のある階層がデータベースに存在します。 後方互換性 次のハッシュ関数(SEGUID-SEquence Globally Unique IDentifier)をシーケンスに適用し続けることができれば、すばらしいでしょう。 CREATE OR REPLACE FUNCTION gfam.get_seguid(p_sequence character varying) RETURNS character varying AS $BODY$ declare result varchar := null; x integer; begin select encode(gfam.digest(p_sequence, 'sha1'), 'base64') into result; x := length(result); if …
11 postgresql 

8
MySQL-すべての列の値を確認する方法
知りたいのですが、すべての列で特定の値を検索する良い方法はありますか?私の目的では、それはまったく高速である必要はありません。これは1回限りの処理であり、すべてのフィールド名を入力する必要は本当にありません。それがまさに今私がやろうとしていることですが、確かにもっと良い方法があると思います。 私はこれを回したいと思います: SELECT * FROM table WHERE col1 = 'val' OR col2 = 'val' OR col3 = 'val'; これに: SELECT * FROM table WHERE * = 'val' ...または、さらに良い(私はそれを真剣に疑っていますが...) SELECT * FROM table WHERE * like '%val%' 私はこれを見つけましたが、これは少し近いとは思えませんが、近くには何も見つかりません: SELECT whatever WHERE col1,col2 IN ((val1, val2), (val1, val2), ...) 違いは、指定された値の列を選択して検索するのに対し、すべての列で単一の値を検索しようとしていることです。 それは重要ではありませんが、私が興味があるのは何よりも言ったように
11 mysql 

3
オプティマイザが非クラスタ化インデックスの代わりにクラスタ化インデックス+ソートを選択するのはなぜですか?
次の例を考えてみましょう: IF OBJECT_ID('dbo.my_table') IS NOT NULL DROP TABLE [dbo].[my_table]; GO CREATE TABLE [dbo].[my_table] ( [id] int IDENTITY (1,1) NOT NULL PRIMARY KEY, [foo] int NULL, [bar] int NULL, [nki] int NOT NULL ); GO /* Insert some random data */ INSERT INTO [dbo].[my_table] (foo, bar, nki) SELECT TOP (100000) ABS(CHECKSUM(NewId())) …

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