データベース管理者

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

5
テーブルのスキーマを指定する必要のないクエリ
SQL Server 2000から2008データベースに一連のテーブルをインポートしました。インポートされたすべてのテーブルには、ユーザー名のプレフィックスが付いていますerpadmin.tablename。 テーブルのプロパティでは、dbスキーマとして「erpadmin」がリストされています。クエリを作成するときは、「erpadmin」を含める必要があります。混乱を招くすべてのテーブル名の前。 現在の結果: select * from erpadmin.tablename 望ましい結果: select * from tablename

2
古いOracleデータベースを現在のOracleバージョンに読み込む
Oracle 8iを搭載した古いコンピューターは死んでいます。データベース(C:\ oradata)の毎日のバックアップがあります。インストール用のCDがないため、この古いOracleバージョンをどこにもインストールできません。 このデータベースをOracle Expressなどで読み取ることはできますか?はいの場合、どのように?

3
SQL Server 2012を構成してユーザーアカウントのファイルを復元および表示できるようにするにはどうすればよいですか?
コンピューターでSQL Server 2012インスタンスをサービスとして実行しており、サービスページによると、アカウント "NT Service \ MSSQLSERVER" としてログオンしています。ただし、そのアカウント名は、コンピューターの管理画面の[ローカルユーザーとグループ]領域を含め、どこにも表示されません。これは、以下のリンクにあるように、それはユーザーアカウントではなく、そのボックスにあるサービス名であるためです。 Microsoftは「アカウント」というラベルを付けてくれました。この時点で、私は多くの人々が混乱しているのを見ることができます。 私が達成しようとしているタスクは、SSMSダイアログ「Locate Backup File」を使用してファイルを復元することです。このダイアログは、「リモート」ジョブを実行しており、 SQLサーバーのセキュリティコンテキストは、エンドユーザーの混乱のもう1つの豊富な原因であり、この質問が解決に役立つことを願っています。 これまでのところ、自分のフォルダーの1つにあるバックアップ.mdf / .bakファイルを復元する場合は、そのフォルダーをEveryoneから読み取り可能に設定する必要があります。そうしないと、SQL Serverの "Locate Backup"でそこにアクセスできませんファイル」ウィンドウ。このアイデアは、ユーザーとは異なるユーザーアカウントと権限を持つサービスと対話するGUIを使用していることを発見しました。Microsoftの誰もあなたに明確に説明することすらしませんでした。Windowsシステム管理で長年の経験があっても、非常に混乱しています。 。 新しいSQLサーバーインスタンスをインストールした後、セキュリティをどのように設定するかを説明するSQL Serverのドキュメントページを見逃したことを願っています。 このようなフォーラムの投稿には、Microsoftのスタッフも「これは複雑です」と言っており、デナリでは「再び変更された」と述べています。SQL Server 2012でこれがどのように機能するのか、また、ユーザーに属するファイルを読み取るためのアクセス許可をSQLデータベースエンジンのセキュリティに追加する方法を教えてくださいSID。

3
SQL Serverエンドポイントのセキュリティ設定を検査するにはどうすればよいですか?
現在、SQL Server開発スタッフ用のTEST環境を作成しています。 本番環境には3つのSQL Serverがあり、SQL01にミラーリングされたいくつかのデータベースが含まれていますSQL02。 SQL03「自動フェイルオーバーによる高い安全性」または同期構成での証人として機能します。 VMWare P2Vを使用して、3台すべてのマシンを個別のハードウェアに仮想化し、マシンのSIDを再構成し、これらの新しいマシンから本番サーバーのIPアドレスをブラックホール化しました。 最初はプロダクション監視マシンをブラックホール化するのを忘れていたので、TESTマシン上のデータベースはまだマシンを監視SQL03として使用していました。この問題に気付いて、私はTESTのデータベースを再構成して、新しく仮想化されたTESTの目撃者を指すようにしましたTEST03。 新しいミラーリング監視を使用するようにデータベースを再構成するには、プライマリサーバーで次のコマンドを入力しましたTEST01。 ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022'; 予期しない応答がありました: The ALTER DATABASE command could not be sent to the remote server instance 'TCP://TEST03.domain.inet:5022'. The database mirroring configuration was not changed. Verify that the server is connected, and try again. 構成は運用マシンで機能し、テストマシンではまったく変更されていないため、このエラーメッセージに非常に困惑しました。 これを機能させるためLOGINに、テストの目撃者を作成する必要がありました。 CREATE …


2
Microsoft SQL Server 2008 R2バックアップエラー
私は外付けディスクに簡単なバックアップをしようとして、このエラーが出ます: サーバー 'Server-name'のバックアップが失敗しました 追加情報: System.Data.SqlClient.SqlError:「C:\ Program Files \ Microsoft SQL ..」にロードされたメディアは、1つのメディアファミリをサポートするようにフォーマットされていますが、バックアップデバイスの仕様によれば、2つのメディアファミリが必要です。(Microsoft.SqlServer.Smo) ` バックアップタイプ:フル このエラーが発生するのはなぜC:\Program Files..ですか。また、宛先ファイルが外部デバイスである場合にメッセージが指しているのはなぜですか。


3
動的SQLバックアップコマンドにtry / catchを使用するときにエラーの詳細をログに記録する方法
try catchと動的SQLを使用するストアドプロシージャ内でバックアップコマンドを発行する場合、バックアップコマンドを直接実行する場合と比較すると、エラーメッセージは非常に一般的です。 SP内で試行/キャッチ: begin try execute sp_executesql @sql; -- a backup command end try begin catch print ERROR_MESSAGE(); -- save to log, etc. end catch 結果 50000:usp_Backup:117:BACKUP DATABASEが異常終了しています。 rawコマンドを発行するwheareas: backup DATABASE someDb to disk... より詳細な結果: ルックアップエラー-SQL Serverデータベースエラー:ファイル "H:\ FolderName \ Filename.bak:" 112で回復不可能なI / Oエラーが発生しました(ディスクに十分なスペースがありません。) これらの詳細をストアドプロシージャ内の変数にキャッチする方法はありますか(ログを記録し、呼び出し元にパスバックし、ロジックを再試行します)?詳細はメッセージチャネルで送信されているようですが、SP内で利用できるようにしたいと思います。

3
MS SQL Serverのバージンクエリのパフォーマンスを向上させる方法は?
ASP.NET Webサイトで、独自の独立したデータキャッシュを実行し、データが長期間変化しないため、同じクエリでSQL Serverに2回クエリする必要がありません。そのSQL Serverへの初回(バージン)クエリのパフォーマンスを改善する必要があります。一部のクエリは、SQL Serverが使用する可能性のある大量のデータを処理しますtempdb。一時テーブル変数や一時テーブルは使用しないので、SQL Serverはtempdb必要なときにいつでもそれ自体を使用することにしました。 私のデータベースサイズは16Gbですが、サーバーマシンで32Gbの物理RAMを使用できます。 MS SQL Serverのキャッシュ戦略は、同じデータを再度ロードする必要がある場合に、同様のクエリのパフォーマンスを向上させるために、RAMにデータを保持しようとすることを理解しています。さらに、tempdbの代わりに使用可能なRAMを使用して、ディスクアクセスを引き起こさずにパフォーマンスを高速化しようとします。 tempdb SQL Serverに何かを格納する必要があるクエリが来て、十分なRAMが利用できない場合、SQL Serverには2つの選択肢があると思います。 1)キャッシュされたデータをアンロードし、tempdbの代わりにスペアRAMを使用してディスクの書き込みを回避する 2)今後のクエリのためにキャッシュされたデータを保持し、tempdbの使用を開始します。これにより、ディスクへの書き込みが遅くなります。 この状況でSQL Serverがどのような選択をするかはわかりませんが、最初の(バージン)クエリのパフォーマンスのみを考慮し、同じクエリをSQL Serverに再度送信することはないため、選択#1をしたいと思います。 (私は同様のクエリを送信する可能性があります)。 このシナリオのSQL Serverキャッシュ戦略は何ですか? 新しいクエリのtempdbの回避と2回目のクエリの速度の間で、RAMの使用量をどのようにバランスさせますか? SQL Serverを選択#1するように構成することは可能ですか?はいの場合、どのように? 他にどのようにしてすべてのバージンSQLクエリのパフォーマンスを向上させることができますか? SQL Serverのキャッシュ戦略がわからないので、データベースをRAMディスクに配置します。これにより、SQL Serverが常に#1を選択する場合でも、キャッシュされていないデータを高速で読み込むことができます。SQL Serverが選択肢#2を選択し続けると、SQL Serverが利用可能なRAMを少なくしてより多くのtempdbを使用し始める可能性があります(RAMディスクに16Gbを使用した後は16Gbしか残りません)tempdb。 SQL 2008 R2のソリューションに興味がありますが、おそらくSQL 2008、SQL 2005でも同じで、SQL 2000かもしれません。 明確化: そのボックスで実行されている他のアプリケーションはなく、SQL Server専用です。ウェブサイトは別のボックスで実行されます。 Windows Server 2008 R2 Enterprise 64ビット上のSQL Server 2008 R2 Standard …

1
計算列で使用されるスカラー関数、関数を更新する最もクリーンな方法は何ですか?
データベースのスカラー関数を更新したい。この関数は、キーテーブルのいくつかの計算列に使用されるため、更新しようとすると依存関係エラーが発生します。列を明示的に削除し、関数を更新して列を再度追加できますが、余計な手間をかけずに列の順序が変更され、他の意図しない結果が生じる可能性があります。もっときれいな方法はあるのだろうか?

3
ミリ秒での時間のデータベースへの保存
データベースへの「時間」の格納に関する簡単な質問です。ユーザーの実行時間を00:00:00:00(時間、分、秒、ミリ秒)の形式でログに記録しています。 私はもともとそれを保存するつもりでしたTIMEが、MySQLがこのタイプのミリ秒をサポートしていないことに気付きました。 ユーザーのストップウォッチから取得した実際の時間を保存します。ユーザーが実行して終了した時間ではありません(これは挿入される前に計算されます)。 使用するのに最適なフィールドタイプは何ですか?doubleまたはのどちらかを考えfloatていましたが、うまくいくかわかりませんか?

1
データ移動のため、NOLOCKでスキャンを続行できませんでした
SQL Server 2000を実行していると、これらのエラーのいくつかが毎晩発生します。 Could not continue scan with NOLOCK due to data movement このエラーをスローするクエリは、1ダースを超えるテーブルを結合する大きく複雑なクエリです。基礎となるデータは頻繁に更新できます。 文化的な「ベストプラクティス」は、過去にNOLOCKヒントを導入することでパフォーマンスが向上し、同時実行性が向上したことです。このクエリは100%正確である必要はありません。つまり、ダーティリードなどを許容します。しかし、これらすべてのロックヒントがあるにもかかわらず、データベースがこのエラーをスローする理由を理解するのに苦労しています。 誰もがこれにいくつかの光を当てることができます-穏やかに、私は実際にはプログラマーであり、DBAではありません:) PS:以下の修正を以前に適用しました:http : //support.microsoft.com/kb/815008

1
MySQL 5.5が5.1より遅い理由(Linux、mysqlslapを使用)
my.cnf(5.5と5.1は同じ): back_log=200 max_connections=512 max_connect_errors=999999 key_buffer=512M max_allowed_packet=8M table_cache=512 sort_buffer=8M read_buffer_size=8M thread_cache=8 thread_concurrency=4 myisam_sort_buffer_size=128M interactive_timeout=28800 wait_timeout=7200 mysql 5.5: ..mysql5.5/bin/mysqlslap -a --concurrency=10 --number-of-queries 5000 --iterations=5 -S /tmp/mysql_5.5.sock --engine=innodb Benchmark Running for engine innodb Average number of seconds to run all queries: 15.156 seconds Minimum number of seconds to run all queries: 15.031 seconds …

3
SQLITE:タグと製品の問題
次のことを行うクエリを作成する方法を探しています。 3つのテーブルについて考えてみましょう。 製品:製品リスト タグ:タグのリスト tag_ties:タグを製品に関連付けるために使用されるテーブル 各テーブルについてこの構造を考えてみましょう: 製品: id(int、autoincrement) 名前(varchar、製品名) タグ: id(int自動インクリメント) ラベル(varchar、タグのラベル) Tag_ties: id(int、autoincrement) tag_id(int、タグIDへの参照) ref_id(int、製品IDへの参照) 私が欲しいもの: たとえば、タグID 10、11、および12でタグ付けされたすべての製品を取得します。 このクエリは機能しません。少なくとも1つのタグを持つ製品が返されるためです。 select p.name as name, p.id as id from products p inner join tag_ties ties on p.id=ties.ref_id where ties.ref_id=p.id and ties.tag_id in (10,11,12) group by p.id order by p.name asc
10 query  sqlite  subquery 


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