データベース管理者

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

4
TSQLでテーブル作成スクリプトを生成する方法はありますか?
T-SQLのみで既存のテーブルから作成スクリプトを生成する方法はありますか(T-SQLはSMOにアクセスできないため、SMOを使用しません)。テーブル名を受け取り、指定されたテーブルの作成スクリプトを含む文字列を返すストアドプロシージャがあるとしますか? これにアプローチする別の方法があるかもしれないので、今私が直面している状況を説明させてください。数十のデータベースを持つインスタンスがあります。これらのデータベースはすべて同じスキーマ、すべて同じテーブル、インデックスなどを持っています。これらは、サードパーティのソフトウェアインストールの一部として作成されました。アドホックな方法でデータを集約できるように、それらを操作する方法が必要です。dba.seの素敵な人々がここですでに私を助けてくれました別のデータベースにトリガーを作成する方法は? 現在、すべてのデータベースのテーブルから選択を行う方法を見つける必要があります。という名前のテーブルにすべてのデータベース名を記録し、Databaseesそれらすべてに対してselectステートメントを実行する次のスクリプトを作成しました。 IF OBJECT_ID('tempdb..#tmp') IS NOT NULL DROP TABLE #tmp select * into #tmp from Database1.dbo.Table1 where 1=0 DECLARE @statement nvarchar(max) = N'insert into #tmp select * from Table1 where Column1=0 and Cloumn2 =1' DECLARE @LastDatabaseID INT SET @LastDatabaseID = 0 DECLARE @DatabaseNameToHandle varchar(60) DECLARE @DatabaseIDToHandle int SELECT TOP …

1
SQL Server 2012 Expressがサーバーで9.5GBのRAMを使用するのはなぜですか?
SQL Server 2012 Expressをプライマリデータストアとして埋め込む予定のアプリケーションを構築しています。開発マシン(3GB RAMのWin7-32​​)でテストするときsqlservr.exe、公開されたハードウェアのスケーリング制限から予想されるように、1GBを超えるRAMを使用するプロセスを観察しませんでした、SQL ServerのExpressエディションの。 次に、アプリケーションをサーバーグレードのマシン(16 GB RAMを搭載したWin Server 2008R2 64ビット)に移動して、そこでパフォーマンスを評価しましたが、 sqlservr.exeプロセスが約9.5 GBのRAMに急速に拡大し、そこに留まったことがわかりました。 数回再起動して、効果があるかどうかを確認しましたが、毎回、プロセスは急速に〜9.5GBに戻りました。これで、SQL Server ExpressでRAMを使用できるようになりましたが、これが予想される動作であるかどうかを知りたいので、不適切なRAM使用量に基づくパフォーマンスレベルに依存することはありません。 参考までに、サーバーマシン上のSQL ServerのバージョンSELECT @@VERSIONは次のとおりです。 Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Oct 19 2012 13:38:57 Copyright (c) Microsoft Corporation Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) 9.5GBの数値は、タスクマネージャーの「プライベートワーキングセット」の数値から取得されました。DBCC …

3
特権のある子供と1対多の関係を築く方法は?
各親について、1人または0人の子供が「お気に入り」としてマークされる1対多の関係が必要です。ただし、すべての親が子供を持つわけではありません。(このサイトでは、両親を質問、子供を回答、お気に入りを受け入れられた回答と考えてください。)たとえば、 TableA Id INT PRIMARY KEY TableB Id INT PRIMARY KEY Parent INT NOT NULL FOREIGN KEY REFERENCES TableA.Id 私の見方では、TableAに次の列を追加できます。 FavoriteChild INT NULL FOREIGN KEY REFERENCES TableB.Id または、TableBの次の列: IsFavorite BIT NOT NULL 最初のアプローチの問題は、null許容の外部キーを導入することです。これは、正規化された形式ではないことを理解しています。2番目のアプローチの問題は、多くても1人の子供がお気に入りであることを確認するために、より多くの作業を行う必要があるということです。 どのアプローチを使用するかを決定するには、どのような基準を使用する必要がありますか?または、私が検討していない他のアプローチはありますか? SQL Server 2012を使用しています。

2
データが「自然にパーティション化可能」である場合、マシン間でPostgreSQLをパーティション分割する最新の方法は何ですか
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 6年前に移行され ました。 「NoSQL」の分野に数年滞在した後、今ではその性質が非常に「リレーショナル」な問題を抱えています。今日、私は以前とはまったく異なる目でデータストアを見ています。Riakのようなものは、単一の障害点、「メンテナンスのためのダウン」などに耐えることができないという方法で私を台無しにしました。これは、非常に高い要件を持たない(またはまだ)個人的なプロジェクトです。 おそらく、私の問題は解決が非常に「簡単」だからです。少なくとも概念レベルでは(RDBM自体がテーブルにもたらす制約を無視して)。 少量の「共有」データがあり、自由に複製できます。ハード一貫性の要件はありません。これはダイナモのようなデータベースに保存でき、無限に拡張できます。ただし、可能であれば、単一のデータベースを使用したいと考えています。 「ユーザーごとの」データがたくさんあります。つまり、すべてのユーザーが絶対に妥当なサイズのデータ​​を持っている多くのユーザーが、単一のPostgreSQLノードに保存するのに本当に適しています。最大で数万件のレコードについて話しています。 クロスユーザーに問い合わせる必要はなく、クロスユーザーの原子性は必要ありません。 これは非常に簡単に実現できます。少なくとも「NoSQLの目」で見ているときは。 ここに私の素朴なスターターのアイデアがあります: 極端な場合、ユーザー全体をRiakの単一のキー/値としてシリアル化できます。もちろん、数メガバイトのデータを絶えずデシリアライズするのは遅いので、PostgreSQLの使用を検討しています。各ユーザーのデータ内に原子性/トランザクションが必要なため、Riak K / Vの多くは不要です。 ユーザーごとにSQLiteデータベースを使用し、GlusterFSのようなものを使用して冗長性と可用性を実現できます。これはおそらく、PostgreSQLを使用しても同様に良いものが見つからない場合に選択するソリューションです。長所:本当にうまくスケールダウン/スケールアップできます; 短所:SQLiteよりもPostgreSQLの型と厳格さを好む したがって、PostgreSQLシャーディングソリューションから私が理想的に要求するものは次のとおりです。 すべてのユーザーのデータのコピーを(異なるマシン上に)自動的に保持します。ユーザー/シャードごとにマスターノードを動的に切り替えることができる(以前のマスターがダウンした場合)。 サーバーノードを追加/削除することにより、動的にスケールアップ/ダウンすることができます。たいていはRiakができるように。 アプリケーションが、どのノードといつ通信するかを知る必要はありません。

2
SQL Serverストアドプロシージャのリビジョンの履歴を保持する方法
注:完全なバージョン管理については質問していません。 SQL Serverのストアドプロシージャの履歴を自動的に保持する方法はありますか。 Googleドキュメントがドキュメントのバージョンの履歴を自動的に保持し、ウィキペディアが記事のバージョンの履歴を自動的に保持する方法と同様です。 ストアドプロシージャを更新するユーザーが、ストアドプロシージャのリポジトリも維持する必要はありません。これは大変な作業であり、人々はそれをしません。 うまくいけば、これがSQL Serverでオンにできることです... (そして、ストアドプロシージャとは、実際には関数、トリガーなどを意味します。基本的にはプログラマビリティのすべてです。) /programming/14522224/how-to-keep-history-of-sql-server-stored-procedure-revisions first cos に投稿しました。

3
MySQLレプリケーションスレーブを読み取り専用に設定する必要がありますか?
このガイドに従って、Percona Server 5.5でレプリケーションを実行していますが、読み取り専用にするためにread-only=1スレーブに追加すべきかどうか疑問に思いましたmy.cnf。 このガイドでは、ユーザーが複製されるようにmysqlテーブルのレプリケーションを設定しますが、私は主にスレーブを使用してmysqldumpを取得し、緊急時にマスターに再構成します。それは常に?

5
Oracleデータベースに接続するためにtnsnames.oraファイルを生成するにはどうすればよいですか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 Oracle 11gをインストールsysmanし、Oracleデータベースに接続tnsnames.oraできますが、見つけることができるファイルがありません。 tnsnames.oraファイルを自分で生成する必要がありますか?もしそうなら、どこに置きますか?そうでない場合、Oracleはどのように生成しますか?生成する必要がある場合、ファイルの適切な構文は何ですか?
22 oracle 

1
繰り返しのない組み合わせのSQLクエリ
関数で(または関数として)使用でき、n値のすべての組み合わせを取得できるクエリが必要です。そして、長さkのすべての組み合わせ(k = 1..n)が必要です。 拡張されたサンプル入力と結果により、入力は2ではなく3つの値になります-ただし、入力値の数は1からnまで変化する場合があります。 例:入力:複数行の1列の値を持つテーブル Value (nvarchar(500)) ------ Ann John Mark 出力#1:1つの列に値が連結されたテーブル Ann John Mark Ann,John John,Mark Ann,Mark Ann,John,Mark

3
頻繁なクエリキャッシュの無効化のオーバーヘッドは価値がありますか?
現在、主に多くのテーブルで実行されているINSERT、DELETE、UPDATEステートメントの数が多いため、クエリキャッシュから多数の無効化が発生しているMySQLデータベースで作業しています。 私が判断しようとしているのは、これらのテーブルに対して実行されているSELECTステートメントにクエリキャッシュを使用できるようにすることの利点があるかどうかです。それらは非常に迅速に無効化されるため、これらのテーブルのSELECTステートメントでSQL_NO_CACHEを使用することが最良の方法であると思われます。 頻繁な無効化のオーバーヘッドは価値がありますか? 編集:以下のユーザー@RolandoMySQLDBAのリクエストに応じて、MyISAMおよびINNODBに関する情報を以下に示します。 InnoDB データサイズ:177.414 GB インデックスサイズ:114.792 GB テーブルサイズ:292.205 GB MyISAM データサイズ:379.762 GB インデックスサイズ:80.681 GB テーブルサイズ:460.443 GB 追加情報: バージョン:5.0.85 query_cache_limit:1048576 query_cache_min_res_unit:4096 query_cache_size:104857600 query_cache_type:ON query_cache_wlock_invalidate:オフ innodb_buffer_pool_size:8841592832 24GBのRAM

1
pgAdmin3を使用してUbuntuのリモートPostgreSQLデータベースに接続する方法
UbuntuマシンでPostgreSQLデータベースをセットアップしようとしています。リモートマシンからpgAdmin3を使用してアクセスできるようにしたいと思います。これを設定するにはどうすればよいですか? UbuntuにPostgreSQLデータベースをインストールしました: sudo apt-get install postgresql 私の/etc/postgresql/9.1/main/pg_hba.conf持っているこの行: host all all all password したがって、すべてのIPv4アドレスからの接続を受け入れ、パスワードはクリアテキストで送信する必要があります(これは開発上の理由によるものです)。 このコマンドを実行して、実行中のサービスを確認すると: sudo netstat -tulpn これらの行を見ると、PostgreSQLがデフォルトポートで接続を受け入れていることがわかります。 tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 3561/postgres 同じローカルネットワーク上のリモートコンピューターからこのPostgreSQLサーバーに接続しようとすると、次のエラーメッセージが表示されます。 サーバーはリッスンしません サーバーは接続を受け入れません:接続ライブラリは報告します サーバーに接続できませんでした:接続が拒否されましたサーバーはホスト "10.0.1.7"で実行されており、ポート5432でTCP / IP接続を受け入れていますか? postgresユーザー名として使用し、パスワードは使用しませんでした。しかしpostgres、パスワードとしても試しました。ローカルサーバーでは、次を使用してログインできます。 sudo -u postgres psql postgres pgAdmin3を使用して、リモートマシンからUbuntuで実行されているPostgreSQLデータベースに接続するにはどうすればよいですか?

2
日付を永続的に「MDY」として表示するようにPostgresqlデータベースを設定する方法
実行せずに「日付」を「MDY」として表示するようにデータベースを設定するにはどうすればよいですか: SET datestyle = "ISO, MDY"; 私がそれにアクセスしようとするたびに?Postgresqlバージョン9.1、Ubuntu 12.04を使用しています。データベースのインストール時のシステムロケールはに設定されていましたがen_CA.utf8、最近それをに変更しましたen_US.utf8。 show lc_CTYPE 戻り値:-> "en_CA.UTF-8" しかし show LC_CoLLATE 戻り値:-> "en_CA.UTF-8"

3
「LOAD DATA INFILE」が通常のINSERTステートメントよりも高速なのはなぜですか?
私は、csvファイルから読み取り、データベースにデータを挿入するステートメントを使用して、1秒あたり60,000の挿入を達成できると述べた記事をLOAD DATA IN FILE読みました。 なぜ通常の挿入と異なるのですか? 編集: 私はただ1つのINSERTステートメントを呼び出すことでラウンドトリップを減らしました: INSERT INTO tblname VALUES (NULL,2,'some text here0'),(NULL,2,'some text here1') ,(NULL,2,'some text here2'),(NULL,2,'some text here3') .....,(NULL,2,'some text here3000'); これはどうですか?
22 mysql  import  bulk 

4
マージステートメント自体のデッドロック
次の手順があります(SQL Server 2008 R2): create procedure usp_SaveCompanyUserData @companyId bigint, @userId bigint, @dataTable tt_CoUserdata readonly as begin set nocount, xact_abort on; merge CompanyUser with (holdlock) as r using ( select @companyId as CompanyId, @userId as UserId, MyKey, MyValue from @dataTable) as newData on r.CompanyId = newData.CompanyId and r.UserId = newData.UserId and …

2
ミラーリングセッションがタイムアウトしてフェールオーバーする原因は何ですか?
累積更新プログラム3を適用したSQL Server 2005 SP4を実行する2つの運用SQLサーバーがあります。両方のサーバーは同一の物理マシンで実行されます。4 x 12コアCPUと512GB(yes GB)のRAMを備えたDELL PowerEdge R815、すべてのSQLデータベースとログ用の10GB iSCSI SAN接続ドライブ。OSはMicrosoft Windows Server 2008 R2 Enterpriseエディションで、すべてのSPおよびWindowsが更新されています。OSドライブは、3 x 72GB 2.5 "15k SASドライブのRAID 5アレイです。SA​​Nは、48 x 10K SAS 3.5"ドライブを備えたDell EqualLogic 6510で、RAID 50で構成され、2つのSQL ServerのさまざまなLUNにスライスされ、共有されますExchangeマシンと複数のVMWareサーバーを使用します。 20を超えるデータベースがあり、そのうち11がミラーリングされ、ミラーリング監視サーバーを使用しています。ミラーリング監視サーバーは、ミラーリング監視サービスを提供する以外に使用されないSQL Serverインスタンスを実行する低出力のマシンです。最大のミラーリングされたデータベースは450GBで、約100〜300 iopsを生成します。データベースミラーリングモニターは、現在の送信速度を毎秒約100 kb〜10 mb、ミラーコミットオーバーヘッド(通常)0ミリ秒を報告します。ミラーサーバーは、プリンシパルについていくことに問題はありません。 ミラーリングフェールオーバーが常に発生しています。単一のデータベースがフェールオーバーすることもあれば、ほぼすべてのデータベースが同時にフェールオーバーすることもあります。たとえば、昨夜、11のデータベースのうち10がフェイルオーバーし、手動でフェイルオーバーするまで残りのデータベースはアクセス可能なままでした。 問題を特定するためにいくつかのトラブルシューティング手順を実行しましたが、これまでのところ問題を解決できませんでした。 1)マシンには、最初にプライマリネットワーク接続として使用したBroadcom BCM5709C NetXtreme II 4ポートギガビットネットワークアダプターが付属していました。以来、問題としてNICを排除するために、両方のマシンにIntel(R)PRO / 1000 PTデュアルポートサーバーアダプターをインストールしました。 2)すべてのデータベースには、ミラーリングに関係するデータベースのログバックアップとともに、夜間の自動フルバックアップがあります。ログファイルの使用状況は監視されており、使用率が15%を超えることはめったにありません。メインデータベースのログファイルは125GBで、サイズが511MBから1GBまでの159個の仮想ログファイルで構成されています。TempDBは独自のLUN上にあり、24 x 2GBファイルで構成されています。 3)ミラーリング監視サーバーのSQL Serverのログには、次のエラー以外は表示されません。「TCP://SQL02.DOMAIN.INET:5022」へのミラーリング接続は、応答なしで30秒後にデータベース「Data」に対してタイムアウトになりました。サービスとネットワーク接続を確認してください。 …

2
メインクエリのエイリアスと同じサブクエリのエイリアス
エイリアスがそのサブクエリのエイリアスのいくつかと同じであるSQLクエリがあります。 例えば: select * from ROOM r where ... ( select * from ROAD r where ... ) サブクエリのエイリアスはメインのエイリアスを隠すように見えるため、これはうまく機能します。 それはすべての場合にそのように機能しますか? 未定義の結果を取得することはありますか? それが問題ない場合、メインクエリの参照を作成するにはどうすればよいrですか?

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