【最大10000ポイント】当たる!!質問投稿キャンペーン!

Microsoft SQL Server Management Studio Express を使ってSQLを学んでいる入門者です。使用方法でわからない事があるので教えてください。
以下はすべてMicrosoft SQL Server Management Studio Express上での作業です。
(1)'TEST'の名前で新しいデータベースを作成
(2)作成されたデータベース'TEST'のアイコンを右リック→タスク→バックアップで、データベースをバックアップ
ここまでの操作で"C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup"フォルダには'TEST.bak'でバックアップファイルが作成されました。
次に
(3)作成されたデータベース'TEST'のアイコンを右リック→削除→「バックアップを削除し、データベースの履歴情報を復元する」にチェックが入っているので、そのまま実行。
質問ですが、以上の操作を行えばデータベース本体の他に(2)で作成されたバックアップファイル'TEST.bak'も削除されると思ったのですが、そのまま削除されずに残ってしまいます。
(3)の「バックアップを削除し、データベースの履歴情報を復元する」のオプションはどういう意味なのでしょうか。ヘルプを参照しましたが、やはりバックアップファイルは削除されるのではないかと思うのですが・・

このQ&Aに関連する最新のQ&A

A 回答 (1件)

実際に 2タイプの削除操作の際にバックでどんな T-SQL が動いているか、SQL Server Management Studio の [ツール]-[SQL Server Profiler] でトレースして確認することができます。


実験したデータベースは作って間もない、テーブルも作ってないデータベースです。

大きく違うのは、
[バックアップを削除し、データベースの履歴情報を復元する] にチェックを入れた場合は sp_delete_database_backuphistory というストアド プロシージが実行され、その後に DROP DATABASE が実行されるのに対し、
[バックアップを削除し、データベースの履歴情報を復元する] にチェックを入れなかった場合は DROP DATABASE だけが実行されていました。
(実際にはその過程でいろんな SELECT が動いてます)

バックアップのファイルを物理的に削除するというよりは、システム DB などに記録されている「バックアップの履歴」を削除するというイメージじゃないですかね。

バックアップしたファイルは SQL Server からするとバックアップした瞬間から外部ファイルであって、SQL Server の管理外にあるファイルになるんだと思います。

余談ですが、SQL Server Profiler というツールはかなり便利なツールです。
Management Studio のような GUI ツールで DB を操作した時、実際に SQL Server 上ではどんな SQL 文を実行しているのかが分かりますので、例えば自作の Web ブラウザ版 Management Studio のようなツールを開発するのにも役立ちます。
    • good
    • 1
この回答へのお礼

わかりやすい説明ありがとうございました。

お礼日時:2006/08/19 09:26

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSQLServer2012の復元ができない

いつも楽しく勉強させていただいております。

環境はSQLServer2012のExpressでOSはWindowsServer2008です。

Test1というデータベースのバックアップを取ってTest2という名前で復元しようとしましたが、なぜか失敗してしまいます。
どなたか原因を教えていただけませんか。

次の手順でバックアップを取り、復元をしています。


○バックアップのフェーズ

1.データベースのバックアップのダイアログボックスを開く。
2.ソースにTest1、バックアップの種類に完全を指定する。
3.バックアップ先は以下のファイルに

 C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\Test1.bak

4.OKをクリックし、「データベース'Test1'のバックアップが正常に完了しました」を確認。

○復元のフェーズ

5.データベースの復元のダイアログボックスを開く。
6.ソースはデバイスにする。
7.ファイル名に上記3.のファイル名を指定
8.転送先データベースはTest2とする。
9.OKをクリック(ここでエラーとなる)。

エラーメッセージは以下の通りです。

------------------------------------------
データベース'Test2'の復元に失敗しました。(Microsoft.SqlServer.Mangement.RelationalEngineTasks)
追加情報:

System.Data.SqlClient.SQLError:ファイル'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\Test1.mdf'に上書きできません。
データベースTest1が使用中です。(Microsoft.SqlServer.SmoExtended)
------------------------------------------

メッセージの内容で引っかかるのはTest1.mdfに上書きできませんというところです。
上書きでなくTest2という新規データベースに書き込みたいのですが。

ためしにTest2というデータベースを作成しておいて「既存のデータベースに上書きする」をチェックしてやってみましたが、やはり失敗。
メッセージは上と同じです。
SQLServerを再起動して試してもやはり結果は同じです。

何が悪いのでしょう。

いつも楽しく勉強させていただいております。

環境はSQLServer2012のExpressでOSはWindowsServer2008です。

Test1というデータベースのバックアップを取ってTest2という名前で復元しようとしましたが、なぜか失敗してしまいます。
どなたか原因を教えていただけませんか。

次の手順でバックアップを取り、復元をしています。


○バックアップのフェーズ

1.データベースのバックアップのダイアログボックスを開く。
2.ソースにTest1、バックアップの種類に完全を指定する。
3.バックアップ先は以下のファイルに...続きを読む

Aベストアンサー

復元時にデータファイルとログファイルの格納先を指定して変更する必要があります。

QSQLServerのDB(テーブル?)が削除出来ない

初めて質問させて頂きます。
現在会社でクライアントサーバシステムを構築しています。ベンダーに委託した為分かる範囲で環境を書いておきます。
OS サーバ:NT3.5、クライアント:WIN95が2台
DBMSサーバ:SQLServer4.21、クライアント:ACCESS2.0
サーバのアタッチテーブルを参照する形でクライアントのACCESSmdbの業務システムが稼動しています。
その環境にて先日リストア作業後に突然SQLServerのDBが下記のメッセージにて参照出来なくなりました。
メッセージ933 レベル22 
データベースの最高のtimestampを取得している間に出会ったログの論理ページがログの最後のページではありません。データベースを不正に取得しています。

止むを得ずDBとデバイスを削除しようとしたのですが、
同様のメッセージが出てきて削除できません。
対策として、
(1)サーバーの再起動
(2)SQLServerの再起動
(3)(リストアしたデバイスが不良かと)思い別DATからリストアを行った。

を行ったのですが、今度は
メッセージ930 レベル14
以前のシステムの終了が、不完全にLOAD DATABASEしたままのため、データベースはオープンできません。データベースをロードしなおすか、システム管理者に報告して下さい。
更に又メッセージ933 レベル22のメッセージが再び表示され
結局DBが削除出来ませんでした。

(現在のバージョンのSQLServerでは
DBはテーブル、デバイスはDBと呼ばれているようです。)

色々調べたのですがどうにも手詰まりになってしまいまして非常に困っております。
このシステムを導入したベンダーに相談したのですが会社方針でこちらからサポートを打ち切ってしまっており要員もおらず対応出来ないとの事でした。
どなたか少しでもヒントになる事でも結構ですから何とぞお教え下さい。
長文で失礼しました。

初めて質問させて頂きます。
現在会社でクライアントサーバシステムを構築しています。ベンダーに委託した為分かる範囲で環境を書いておきます。
OS サーバ:NT3.5、クライアント:WIN95が2台
DBMSサーバ:SQLServer4.21、クライアント:ACCESS2.0
サーバのアタッチテーブルを参照する形でクライアントのACCESSmdbの業務システムが稼動しています。
その環境にて先日リストア作業後に突然SQLServerのDBが下記のメッセージにて参照出来なくなりました。
メッセージ933 レベル22 
データベースの最高の...続きを読む

Aベストアンサー

SQL Server 2000の方は詳しいのですが、4.21はどうか?(^^

SQL Server 2000ではデータベースを削除する際は、そのデータベースが使用されていないのが条件です。

したがってデータベースをオフラインにする等して削除するなどしておりました。(正確な表現ではありませんが)

最悪の場合、SQL Server 4.21をインストールし直して、データベースを再構築してあげれば良い様にも思いますが、いろいろ事情があるのでしょうね。

(現在のSQL ServerでもDBはDB デバイスはデバイスだと思いますが)

Q期限切れのバックアップの削除

有効期限を設定して日数が経過してもバックアップファイルは自動では消えないのでしょうか?

不要なバックアップを自動的に削除する為には、毎回ファイルを作成するのではなく、
一つのファイルに追加していくと、ファイル内から期限切れのバックアップが消えていくのでしょうか?

試せばいいのでしょうが、期間を一日にしても結果が判るのが月曜日になってしまい、
週末を悶々としてすごさないといけないので質問しました、よろしくお願いします。

Aベストアンサー

#1です。
「メンテナンスクリーンアップタスク」というのを追加すれば可能です。
メンテナンスプランで作成されるバックアップは1バックアップ1ファイルになりますので、指定日数後に削除するように登録しておけば期限が過ぎたバックアップファイル自体が削除されていきます。

Q処理件数を非表示にしたい

ManagementStudioでストアドプロシージャの開発をしています

開発中、デバッグのためにプロシージャをコールすると、SQLの発行の度に
「何件処理されました。」
「何件処理されました。」
「何件処理されました。」
「何件処理されました。」
「何件処理されました。」
・・・

と処理件数が表示され、確認の際に邪魔で困っています。
処理件数を非表示にするにはどうすれば良いでしょうか?

また同様に、SELECT文の発行ごとにSELECT結果がグリッドに表示されるのを非表示にできないでしょうか?

Aベストアンサー

処理件数を非表示にする方法

⇒SELECT文の前に「set nocount on」を記載すると件数は表示されません。

SELECT文の発行ごとにSELECT結果がグリッドに表示されるのを非表示にする方法

⇒デバッグのためには表示された方が良いと思いますが、
 とりあえず…SELECT文の前に「SET NOEXEC ON」を記載するとデバッグだけ実施され、
 グリッドは表示されません。
例であげると以下のとおりです。
SET NOCOUNT ON
SET NOEXEC NO
SELECT *
FROM DB.dbo.TableName
go

Qコマンドプロンプトを使ってipアドレスからコンピュータ名を知る方法

ipアドレスは分かっていますがコンピュータ名が分かりません。リモート接続ソフトなどは使えないので、それでコンピュータ名を調べることはできません。
コマンドプロンプトを使ってipアドレスからコンピュータ名を知る方法を教えてください!

Aベストアンサー

なんか回答がバラバラなので整理しましょう。
調査している自分自身が使用している端末は、Windows XPのPCであると仮定します。
また、調べるのは基本的に外部から名前解決可能な名前(No.2さんの言う"2"に相当する名前)とします。

パターン1:
対象のIPアドレスがWindows端末機で、自分が使用している端末と同じネットワークに属しているか同一のWINSサーバを参照しているとき……No.4さんの答えで検索できます。

nbtstat -A <IP Address>

パターン2:
ネットワーク管理者がDNSをきちんと管理しており、対象IPについても管理者の管理下にある場合……以下2つのいずれかの方法で検索できます。

  nslookup <IP address>

または

  nslookup -q=ptr <reverse ip>.in-addr.arpa.
  ex) 192.168.12.1 のIPを調べたい場合、以下のように入力する
  nslookup -q=ptr 1.12.168.192.in-addr.arpa.

  (DNSサーバで逆引きが設定されていないと、正しく検索できない場合があります)

パターン3:
上記以外の場合

外部から名前解決できないので、調べようがありません。または、調べてもそれが正しいホスト名である保証がありません。
そのIPの端末自体に設定されているホスト名を直接調べるしかありませんが、それには実際にそのIPの端末を操作して調べるしかありません。
つまり、No.2さんの回答となるのですが、
IPを使用しているのがWindows PCやUnixサーバなどである保証はないので、確認するコマンドはその端末の種類(OS)によって異なります。

なお、tracert (traceroute)を使用する、という回答がありますが、これはパターン1またはパターン2のいずれかまたは両方を満たしていないと表示されませんので、厳密には正しい答えとはいえません。
(たいていの場合、"tracert <IP address>" や "ping <IP address>"で用が足りてしまうことも多いので、必ずしも間違いではないのですが)

なんか回答がバラバラなので整理しましょう。
調査している自分自身が使用している端末は、Windows XPのPCであると仮定します。
また、調べるのは基本的に外部から名前解決可能な名前(No.2さんの言う"2"に相当する名前)とします。

パターン1:
対象のIPアドレスがWindows端末機で、自分が使用している端末と同じネットワークに属しているか同一のWINSサーバを参照しているとき……No.4さんの答えで検索できます。

nbtstat -A <IP Address>

パターン2:
ネットワーク管理者がDNSをきちんと管理して...続きを読む

Qsql serverのインスタンスを削除したい

こんにちは。昔、yayoi会計というソフトウェア体験版をインストールしたことがあります。その時に、SQL Server 2008もインストールされました。

Windows XPのサービスを見ると、「SQL Server(YAYOI)」、「SQL Server Agent(YAYOI)」なるものが残っています。現在は弥生会計は削除されていてサービスも停止しています。

不要なので、サービル(ローカル)から削除したいと思っていますが、どのようにすればサービスが削除できるでしょうか?

Aベストアンサー

タスクマネージャのプロセスには現れていない。
プログラムの追加と削除にも無い。
ならアンインストール時に消し損ねたので
レジストリから削除すればよいかと。

サービス一覧の中で、SQL Server(YAYOI) をダブルクリックすると
全般タブ中に
サービス名 ○○○
表示名 SQL Server(YAYOI)
後略・・・
となっているハズです。
コマンドプロンプトを立ち上げて
sc delete "○○○" でEnter。

SQL Server Agent(YAYOI) も同様に。

QMS SQLServer のSQLで文字列の前にN:

MS SQLServer のSQLで文字列の前にN: をつけることをよく見かけますが、
「N:」とはいったいどんな意味なのでしょうか?
教えて下さい。

Aベストアンサー

T-SQLでの話かと思いますが・・・。NCHAR/NVARCHAR型という、型(タイプ)があるのですが、これらは、夫々、national character/national character varying(SQL-92での表記法)の意味を持っています。夫々、固定長文字列(Unicode)/可変長文字列(Unicode)です。
NVARCHARはSQL-Server2000では4000文字まで、VARCHAR2は8000文字まで格納可です。(つまり、1/2になるということです)

さて、N'***' とT-SQL内で書くと、''内の文字をUnicodeで表現されたものとして処理する、という意味になります。Nは、nationalの略です。ですから、日本語を使おうとするとNは必須になる、という事ですね。

こんな感じでつかいます。#N'Unicode 文字列'

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

QSQLサーバから、項目の属性(型)を取得したいのですが・・・

SQLサーバからテーブルの項目名、属性(型)を取得するには、どのように
クエリを組めば良いのでしょうか?

Aベストアンサー

2つ前の質問に書いたのと一緒ですが。。
基本的にsys.objects, sys.columnsというシステムビューを使います。

select object_name(object_id),name,type_name(user_type_id) from sys.columns c
where object_id=object_id('テーブル名')


人気Q&Aランキング