SQLの窓

2013年05月10日


SQLExpress 2005( および 2008 ) の接続設定

Microsoft の Visual Studio をインストールすると拒否しないかぎり、SQLExpress がインストールされますが、この DB は本来とても使いやすく優秀な DB なのに、一般の DB として使えないような設定でインストールされています。

これを使えるように設定するには、かなり煩雑な処理を行う必要があり、過去まとめておいたものを今回 Windows7 で設定したのでさらにわかり易く更新しました。

SQLExpress 2005( および 2008 ) の接続設定



とにかく、素人では設定に失敗するように意図されていると思えるほど妙なトラップがたくさんあります。経験者なら15分ほどで使えるようにできますが、未経験者では小さなところで失敗するので本文を良く読んで正しく設定して下さい。

SQLExpress は、フリーですが、そもそも製品版との差は容量が数G しか使えなかったくらいだと記憶しています。ですから、たいていの処理で問題無く使えます。( 後、管理用ツールが無いので全て自分で運用する必要があるだけです )

注意事項

DB の管理を真剣にするならば、別途ユーザを作るのですが、ここでは sa という最上位ユーザを使えるようにして運用する事を想定しています

また、sa を使えるようにできる Windows ユーザは、デフォルトではインストールしたユーザのみです
posted by lightbox at 2013-05-10 14:26 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2013年02月20日


SQLExpress 内に存在する表の CREATE 文を取得する

SQL-DMO を使って VBScript で簡単に取得する事ができます。但し、SQL-DMO は最新の環境からは削除されています。
SQL Server データベース管理オブジェクト (SQL-DMO) は、SQL Server 2008 R2 Express および SQL Server 2008 R2 Feature Pack から削除されました
ですが、個別にインストールしてサポートできるようになっています。
Microsoft SQL Server 2005 の旧バージョンとの互換性コンポーネントSQL Server 下位互換パッケージには、最新バージョンの DTS (データ変換サービス) 2000 ランタイム、SQL 分散管理オブジェクト (SQL-DMO)、意思決定支援オブジェクト (DSO)、SQL 仮想デバイス インターフェイス (SQLVDI) が含まれています。これらのバージョンは SQL Server 2005 および SQL Server 2008 との互換性を維持するために更新されたもので、SQL Server 2000 Service Pack 4 (SP4) と SQL Server 2005 SP2 で配布されたすべての修正が含まれています。

対象: カスタマー、パートナー、開発者

X86 パッケージ (SQLServer2005_BC.msi)
X64 パッケージ (SQLServer2005_BC.msi)
IA64 パッケージ (SQLServer2005_BC.msi)
インストール時の選択 インストールするとすぐ利用可能になるので、以下のスクリプトを利用可能です。
' **********************************************************
' 変数定義
' **********************************************************
Dim Server : Server = "サーバ"
Dim Db : Db = "データベース"
Dim User : User = "sa"
Dim Pass : Pass = "パスワード"
Dim ListTable : ListTable = "TR_出席,TR_成績2,TR_成績3"
Dim List : List = Split( ListTable, "," )

Dim objServer,objDatabase,objTable,Fso,TargetFile

Set Fso = CreateObject( "Scripting.FileSystemObject" )

' **********************************************************
' オブジェクト作成
' **********************************************************
on error resume next
Set objServer = CreateObject("SQLDMO.SQLServer")
if Err.Number <> 0 then
	Wscript.Echo "SQL-DMO はインストールされていません"
	Wscript.Quit
end if
on error goto 0

' **********************************************************
' 接続
' **********************************************************
on error resume next
Call objServer.Connect( Server, User, Pass )
if Err.Number <> 0 then
	Wscript.Echo "接続に失敗しました [" & Err.Description & "]"
	Wscript.Quit
end if
on error goto 0

' **********************************************************
' データーベースオブジェクト取得
' **********************************************************
on error resume next
Set objDatabase = objServer.Databases(Db)
if Err.Number <> 0 then
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' **********************************************************
' テーブルオブジェクト
' **********************************************************
Set TargetFile = Fso.OpenTextFile( "定義ファイル.sql", 2, True )
on error resume next
For i = 0 to Ubound( List )
	Set objTable = objDatabase.Tables(List(i))
	if Err.Number <> 0 then
		Wscript.Echo Err.Description
		Wscript.Quit
	end if

	' 定義を一つ出力
	TargetFile.WriteLine objTable.Script()
Next
on error goto 0
TargetFile.Close()

' **********************************************************
' 切断
' **********************************************************
Call objServer.DisConnect()


CREATE 文は システムが出力しているので、作成した時と違った厳密な記述がされているので注意して下さい。

作成時

CREATE TABLE TR_成績3 (
	コード int,
	行1 varchar (20),
	行2 varchar (20),
	行3 varchar (20),
	行4 varchar (20),
	行5 varchar (20),
	行6 varchar (20),
	行7 varchar (20),
	行8 varchar (20),
	備考 varchar (1024),
	PRIMARY KEY (コード)
)
システムからの出力
CREATE TABLE [TR_成績3] (
	[コード] [int] NOT NULL ,
	[行1] [varchar] (20) COLLATE Japanese_CI_AS NULL ,
	[行2] [varchar] (20) COLLATE Japanese_CI_AS NULL ,
	[行3] [varchar] (20) COLLATE Japanese_CI_AS NULL ,
	[行4] [varchar] (20) COLLATE Japanese_CI_AS NULL ,
	[行5] [varchar] (20) COLLATE Japanese_CI_AS NULL ,
	[行6] [varchar] (20) COLLATE Japanese_CI_AS NULL ,
	[行7] [varchar] (20) COLLATE Japanese_CI_AS NULL ,
	[行8] [varchar] (20) COLLATE Japanese_CI_AS NULL ,
	[備考] [varchar] (1024) COLLATE Japanese_CI_AS NULL ,
	 PRIMARY KEY  CLUSTERED 
	(
		[コード]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO
タグ:SQL VBScript
posted by lightbox at 2013-02-20 15:00 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2012年12月18日


ファイルから直接データベースを別のPCでリストアする / SQLExpress

SQLExpress 2008 バッチDB バックアップ でパックアップしたファイルを別の PC でリストアします。ここでは、MYDB というデータベースを MYDB.dat というファイルでバックアップしたものと考えます。

まず、MYDB.dat をどこに置いてもいいわけでは無く、ログインしているユーザがフルコントロールの権限を持つ場所に保存します。

その後内部の保存した時の情報を MYDB.dat の中から読み取る為に以下のSQL を sqlcmd で実行します。

sqlcmd -E -S .\SQLEXPRESS -i コマンドが書かれたL.txt
※ owner を sa にしたい場合は、-E では無く sa とパスワードで -U sa -P パスワード でログイン情報を使用します
RESTORE FILELISTONLY FROM DISK = 'C:\temp\MYDB.dat'
go
情報として、保存した時の論理名と、物理パスの情報がセットで存在し、データとログと合わせて4つの情報が必要になります。通常、データベース名と論理名は一致しているものですが、そもそも複製データーベースだと論理名が違う場合があります。その場合は最後に論理名も変更しないとオリジナルと同じ構成にならないので注意して下さい

これによって、元の情報が手に入るので、リストアする PC の環境を 『目的のDBが使用している物理ファイルのパスの確認 / SQLExpress 』で得たうえで以下のようなコマンドを作成して実行します
※ 必ずしもこのディレクトリ内に置く必要は無いはずですが、今回は管理上同じ場所へリストアします
RESTORE DATABASE MYDB 
	FROM DISK = 'C:\temp\MYDB.dat'
WITH
	MOVE 'MYDB' TO 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MYDB.mdf',
	MOVE 'MYDB_log' TO 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MYDB_log.LDF'
go

これは、ファイル内の論理名を使って、現在の PC のどの場所にリストアするかを決めるものです。

※ 削除する場合は、use master をしてから、drop database MYDB です。


タグ:SQLExpress DB
posted by lightbox at 2012-12-18 16:19 | SQLExpress | このブログの読者になる | 更新情報をチェックする

目的のDBが使用している物理ファイルのパスの確認 / SQLExpress

まず、コマンドファイル(sp.txt)を作成し、sqlcmd を実行します。標準出力では無く、ファイルに出力したい場合は、-o ファイル名を追加します。

sqlcmd -E -S .\SQLEXPRESS -i sp.txt

-E は、信頼関係接続です。SQLExpress がインストールされている PC から実行するのが最も確実であると思いますが、他の PC より実行したい場合は -U と -P でユーザとパスワードを指定する必要があるかもしれません。

sqlcmd -U sa -P password -S pc-000\SQLEXPRESS -i sp.txt

sp.txt
-- lightbox は、DB名です
use lightbox
go
-- sp_helpfile はシステムストアードプロシージャです
-- ドキュメントは http://msdn.microsoft.com/ja-jp/library/ms174307.aspx
sp_helpfile
go


▼ 出力結果
データベース コンテキストが 'lightbox' に変更されました。
name                                                                                                                             fileid filename                                                                                                                                                                                                                                                             filegroup                                                                                                                        size               maxsize            growth             usage    
-------------------------------------------------------------------------------------------------------------------------------- ------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ------------------ ------------------ ------------------ ---------
lightbox                                                                                                                              1 c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\lightbox.mdf                                                                                                                                                                                                PRIMARY                                                                                                                          2240 KB            Unlimited          1024 KB            data only
lightbox_log                                                                                                                          2 c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\lightbox_log.LDF                                                                                                                                                                                            NULL                                                                                                                             1088 KB            2147483648 KB      10%                log only 

関連する記事

ファイルから直接データベースを別のPCでリストアする / SQLExpress

SQLExpress 2008 バッチDB バックアップ



タグ:DB SQLExpress
posted by lightbox at 2012-12-18 12:22 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2012年06月06日


ピンポイントですが、SQLServer 2008 は SQLServer 7.0 のデータをロード出来ないのです

SQLServer 2005 までは SQL の RESTORE でふつうにロードできます。但し、SQLServer 2005 では、VIEW に問題があって、SQLServer 2008 にアップグレードすると動くようになるのですが・・・・。今回データを再ロードしようとしたら 『互換性がありません』という主旨のエラーが出ました。世間にさすがに例が無くってあわてましたが、自分のやった手順を思い出して、たぶんそれに違い無いという事に。

検証は明日です。
検証しました。

結局、自分のPC に SQLExpress 2005 がインストールされているので、まずそこへ RESTORE しました。その後、いろいろメンテナンス( 必要無いデータを削除 )してから BACKUP しました。そのファイルを SQLExpress 2008 に RESTORE して事無きを得ました。

※ データが大き過ぎてタイムアウト設定が必要でした
( 以下は思い切って大きくしています )

--------------------------------------------------
sqlcmd -E -S .\SQLEXPRESS -t 3600

use master
go

DUMP TRANSACTION データベース名 WITH NO_LOG
go

DBCC SHRINKDATABASE (データベース名)
go

use データベース名
go
EXEC sp_updatestats
go
--------------------------------------------------

RESTORE
FILELISTONLY 
FROM DISK = 'ファイルのパス'

で、BACKUP されたフォルダのパスをチェックして、PC のそのフォルダを作っておけば以下のコマンドで簡単にリストアできます( DB は存在しない状態で )

RESTORE DATABASE データベース名
FROM DISK = 'ファイルのパス'

※ いろいろ変更してロードする場合はこちら




タグ:トラブル
posted by lightbox at 2012-06-06 23:55 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2012年04月10日


SQLExpress2005 で副問い合わせを含む VIEW が異常終了しました

結論として、SQLExpress 2008 で正しく動作するようになりました。

元々 SQLServer7 からの移行なので、経験のある SQLExpress2005 を Windows Server 2008 に
インストールしたのですが、VIEW が正しく実行されずに原因も不明でした。対症療法としては、
select 構文では正しく実行されるので from に副問い合わせとして元の select 構文を指定
する事でなんとかなるとは思いますが、SQLExpress 2008 にアップグレードする事が根本的な
解決方法のようです。

アップグレードは特に何の問題も無く実施され、別名もそのまま移行されて使用可能な状態です。

構成マネージャ

SQLExpress2005 では、C:\Windows\System32\mmc.exe /32 "C:\Windows\system32\SQLServerManager.msc"
となっていましたが、C:\Windows\System32\mmc.exe /32 "C:\Windows\system32\SQLServerManager10.msc"
とすると新しい構成マネージャが起動可能です



関連する記事

SQLExpress2005設定


タグ:トラブル
posted by lightbox at 2012-04-10 16:43 | SQLExpress | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり