Microsoft SQL Server 総合スレ 5
Microsoft SQL Server 総合スレ 5
SQL質疑応答スレから来ました。
SQL Server2005を利用しております。
DBが何らかの理由により、select文等を実行出来ないもしくは実行に十数秒時間が
掛かったらアラートとして指定のメールアドレスに通知を行いたいと思います。
何かいい方法とかツールはありますでしょうか?
4 :
NAME IS NULL:2007/03/31(土) 08:52:41 ID:gRQsHyCj
DB板はdat落ちの心配がなくていいな
>3
調べるだけならプロファイラでDurationが10000以上とか条件を入れればいいんだけど、
それをメールで送るってどうしたらいいのかよくわからん。
なんでSQLCLRは普及しないの?
配置、配置した後のアセンブリ入れ替えなどが面倒だから普及しない、
と思ってる。
思ってるだけで、詳しいことは知らないわけですが・・・
8 :
初心者:2007/04/03(火) 09:47:46 ID:vqFH/tMY
すみません、質問です。
SQL SERVER 7.0を使用中ですが、完全バックアップのみ
現在バックアップを毎日とっています(日付入りで別ファイルごとに)。
しかしこれから毎日その完全バックアップのファイルに差分バックアップ
をとって、今までと同様に別ファイルに更新したいのです。
しかし差分バックアップの設定をする際に特定のファイルしか指定できません。
(例えばDB名SQLDBの場合SQLDB_db_200704030901.bakのファイルへしか
差分バックファイルが指定できなく、次に新しい完全バックアップファイル
(SQLDB_db_200704032101.bak)が出力された時にもSQLDB_db_200704030901.bakへ
続いて差分バックアップする。)
完全バックアップのファイルが別ファイルに出力された時点で
差分バックアップもそのファイルの差分バックアップへ移行したいのですが。
>>6 http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1405832&SiteID=7 でも、SQL CLR はかなり問題を抱えていますよ。
パフォーマンスは当初言われているほど早くない。
スキーマごとに Application Domain を構成するので、暴走したり、
例外を発生してしまった場合、Application Domain のアンロードされるので、
そのときにSQL CLR でトランザクションをかけてデータの追加・更新・削除などを行っていると、
問答無用でロールバックされ、さらに原因がわかるログを残してくれないという罠。
データベースの照合順序(例:Japanese_CI_AS、デフォルト)と SQL CLR 内部で
文字列比較をするとデータベースの照合順序とは違う結果が返ってくる。(これは明らかにデザインバグ)
Japanese_CI_AS の場合は IF 'A' = 'A' は真ですが、SQL CLR で比較すると偽になります。
(SQL CLR は OS の NLS を使っている)
例外処理も大変でエラー番号:6522 が返るだけで、実際に調べるには RAISERROR を使わないと
分からない場合がある。
32bit の場合、SQL CLR は Memory To Reserve にロードされますが、デフォルト 256MB なので、
あっという間にパンクする可能性があります。
ですので、SQL Server を起動するときの起動オプション -g である程度のサイズを確保してください。
結構なリスクがあるんですが、それでも SQL CLR 使いますか?
これ意外にもまだまだトラップがいっぱいありますよ。
↑ いよっ色男、気が利くねぇ
更新前のビルド番号によって KB番号が分かれてるのね。
このビルド番号の違いは何に起因するんだろう。
あー。
Build3042〜3053
>>10 Build3150〜3158
>>12
正直、2000 SP4 で何も困らない
17 :
バリバリ:2007/04/09(月) 18:59:18 ID:Mh1EPvod
SQLserver2005をインストールして
読込処理を行ったら異常にレスポンスが遅かったです。
C#で開発を行っておりますが、試しにDBをORACLE10に変えてみたら
読込速度はUPしました。
この差は何なんでしょうか?
ちなみにインストール時から何もいじってない初期状態です。
SQLServerにすると老人に会い、PosgreSQLにすると病人に会い、
MySQLにすると死者に会い、Oracleにすると沙門に会い出家することにしました。
諸行無常。
19 :
NAME IS NULL:2007/04/09(月) 20:32:41 ID:b02tiFqE
あのさ、おれも君たちの大嫌いな在日だが。在日3世。
別に嫌われようがこっちはどうでもいいよw
日本という国における「楽して稼げる職業」は在日・帰化人が握ってるし(笑)
脱税もしまくりで、相続税も免除なのよw。闇口座も仮名で作り放題w。
世代を経るにしたがって金が増えてく寸法さw。パチンコ、サラ金、日本の長者番付にのってるのは在日なんだよw。
金あるから在日でも日本人女とやりまくり。さらにはレイプしても全然バレないw
あと数年で日本の参政権も取得できるし(爆) 既得権益最高!
俺達はもうお前達みたいに毎日毎日職業とか将来とか金の心配なんかしなくていいんだよw
バックに朝鮮総連や創価学会がついてるし、働かなくても行政から月20万の金入ってくるしねw
今俺達が考えてるのはもっと大きいこと。
いかにしてこの日本という国をボコボコにいじめ抜いてやるか、ってこと。
つまり、日本の中に、俺たち朝鮮人、韓国人の血を増やして在日を増やす。
んで日本人を少数派にしてその日本人をいじめたおす。んでこの国を乗っ取る。
今はもうその最終段階に入ってるわけ。
平和ボケした危機感ゼロのお間抜け日本人は気づいてないがw
例えば韓流ブーム。あれは在日が作ったって知ってる?
あれだけ大規模なブームを作れるくらい、もう日本の中で在日の力は最強なんだよ。
自分達を地獄に導いてるとも知らずに毎日毎日テレビで韓国をヨイショしてくれる日本人w
韓流ブームのお陰で在日や韓国人へのマイナスイメージがプラスイメージになった。
そして日本人が韓国人や在日と結婚する数も圧倒的に多くなった。
つまりもうあと30年で日本は完全に在日主体の社会になるよ。
たった100万人に満たない在日に使われる1億人の日本人w お前ら糞日本人に一生地獄の生活を見せてやるよw
どう?ムカムカする?(爆)
でもせいぜい今みたいに2ちゃんで数十人ぐらいがチョン死ねって言うぐらいだろうね(爆)
21 :
NAME IS NULL:2007/04/12(木) 18:36:09 ID:GlEB0TmN
げー…。相変わらずわかりにくいな。
初歩的な質問なんですが、あるテーブルでIndexをInt型にした場合、自動的にIndexが
1、2、3、4、5、6…と割り当てられていくと思うのですが、Intの最大値に達してしまった場合
どうなるのでしょうか。
また、DELETEされた物を再利用してくれるのでしょうか?
>>17 お役にたてるかわかりませんが、SQLServerへの接続は何をつかっていますか?
System.Data.SqlClientを使われていますか?それともSystem.Data.OleDbですか?
SQLServerの場合はSqlClientを使うことによってOleDbよりもパフォーマンスは格段にあがります。
また、SQLServer側の簡単なチューニングをされると良いみたいです。
自動チューニングウイザードみたいなのもありますし、@ITに幾つか記事がでているので参考にしてみてください。
うちもC#で開発していますが、明らかにSQLServerのほうがパフォーマンスは良いです。
(DB初心者なのでOracleのチューニングができていないのかもしれませんが)
27 :
NAME IS NULL:2007/04/14(土) 09:10:41 ID:mB32J/Jk
河端さん、常駐ご苦労様です!
>26
Oracleだとあふれた後の挙動とか先頭に戻るとか設定できたんだよなぁと思った。
すいません、ご存知の方いらっしゃいましたらご教授頂きたいのですが。
SQLServer2000を使用したシステムで
実際に動作させている時は全く問題ないのですが、
エンタープライズマネージャで全行表示を実行すると
「TEXT、NTEXT、または IMAGE ノードのページ (x:x)、スロットxが存在しません。」
(xは数字)
というエラーが表示され、レコードの表示が途中で止まってしまいます。
このエラーメッセージは、どんな要因で表示されるのでしょう?
(NTEXT型のカラムが一つだけありますが、読み込みが中断される行
の内容も特に問題はありませんでした)
SQL Server 2000 です。
テーブルA とテーブルB を結合させ、A の全列と B の必要項目のみを
抜き出す VIEW を作成しました。
この時、テーブルA の末尾に列を1つ追加して VIEW を実行すると、
追加した列が表示されずに、VIEW の列がおかしな事になります。
これはどのように解消すればよいでしょうか?
>>31 結合 = UNION?
それとも JOIN?
33 :
32:2007/04/17(火) 21:55:56 ID:???
多分 JOIN だろうと思って試してみたらホントにそうなった。
列のポインタがずれたような感じで表示される。つまり新たに追加した列にひとつ前の列が表示されるような感じ。
で、ビューを作りなおしたら期待したとおりに表示された。
新しく追加した列を削除してからビューを表示すると次のエラーが返されるので、テーブル定義を変更したら定義しなおさないといけないみたいね。
▼▼▼▼▼
サーバー : メッセージ 4502、レベル 16、状態 1、プロシージャ VIEW1、行 4
ビューまたは関数 'dbo.VIEW1' には定義された列数よりも多くの列名が指定されています。
サーバー : メッセージ 4413、レベル 16、状態 1、行 1
ビューまたは関数 'View1' はバインド エラーにより使用できませんでした。
▲▲▲▲▲
次のスクリプトは、サンプルの Northwind を使って試してみた例です。
/*******
* ビュー作成
********/
USE Northwind
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[VIEW1]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[VIEW1]
GO
CREATE VIEW dbo.VIEW1
AS
SELECT dbo.Region.*, dbo.Territories.TerritoryID,
dbo.Territories.TerritoryDescription
FROM dbo.Region INNER JOIN
dbo.Territories ON dbo.Region.RegionID = dbo.Territories.RegionID
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
/*******
* ビュー作成後の操作
********/
USE Northwind
GO
-- テーブルへの列の追加
ALTER TABLE Region
ADD memo VARCHAR(20) NULL
GO
-- 新しく追加した列に値を入れる
UPDATE Region
SET memo = 'memo'
GO
-- ビューを見る
SELECT * FROM VIEW1
GO
-- 新しく追加した列を消す
-- ALTER TABLE Region
-- DROP COLUMN memo
34 :
32:2007/04/17(火) 22:16:05 ID:???
ちょっと調べてみたが、ビューの SELECT 文で * を使うのはよくないみたい。
ビューに影響を与えるようなテーブル変更は CREATE VIEW に WITH SCHEMABINDING オプションをつければ検出してエラーにできるけど、
WITH SCHEMABINDING をつけると列に * を指定していることを指摘されてエラーになりました。
トランザクション処理で、ID削除後にまた同じID追加場合って、DELETE→INSERTじゃなく
ただのUPDATEとしてコミットしてくれるんだろうか?
なんとなく処理時間短くなったような気がしたんでそんなこと思っただけなんだけどさ
テーブルを引数にしたプロジージャってできるかな。
>>36 SQL Server 2000 で試したら、table 型の引数を持ったストアドプロシージャは作れなかった。
CREATE PROCEDURE sp_test
@param1 varchar,
-- @pTable table,
@param2 varchar
AS
SELECT @@version
GO
コメントをはずすと構文エラーになる。
BOL に次の記述があるが、これがその説明に相当すると思う。
> table 変数間における代入操作はサポートされていません。
38 :
NAME IS NULL:2007/04/22(日) 13:05:35 ID:FvHL9xyS
すいません、SQLServer2005 をSP2にしたいのですが、結局どれを当てればいいのでしょうか?
40 :
38:2007/04/22(日) 17:34:19 ID:???
>>39 すいません、助かります。
数百メガ落とさなきゃいけないのかと心配していました。新しいのに含んでいるみたいなので
それだと100メガ程度で済みそうですね。
41 :
NAME IS NULL:2007/04/22(日) 20:47:08 ID:BzBc7zTG
AP2 のあとにいきなり KB934459 をインストールでよかったのか
KB933097 をいれてから KB934459 をいれちゃったよ。
KB933097 のファイルがゴミになって残ってなければ良いんだけど・・・。
しっかりしてくれよ、河端さん・・・・。
SP3まだですか?
河端氏を責めるのは酷だろう。
しかし、MSの「SQL Server 開発チーム ブログ」の役に立たなさは凄いな。
44 :
NAME IS NULL:2007/04/23(月) 15:27:38 ID:kp6Au5Ga
最近データベースに興味をもって勉強しはじめました。
一つ質問があります。
マイクロソフトの資格に
MCA データベース (MCA Database)
と
Microsoft SQL Server 2005 - Implementation and Maintenance
試験番号:70-431
の二つがありますが、まずチャレンジしてみるということにおいては
MCA データベース (MCA Database)を狙ってみるのがいいですよね?
この二つは難易度もまるで違いますか?
どなたかご教授下さい。
よろしくお願いいたします。
45 :
NAME IS NULL:2007/04/23(月) 17:22:13 ID:4bwOdoqx
ソフトバンク携帯について
「全然繋がらないから解約しようとしたら、6万請求された」とよく聞く※。
(繋がりにくい理由は、ソフトバンクが使用する周波数が建物に弱いことによる)
そして、各種プランが良くないが、ホワイトプランが特に良くない。
携帯のメーカーの数で考えて「友人の4分の1くらいは持ってる?」と考えがちだが…
ソフトバンク携帯を持つのは 約300人 に 1人。
300人の友人がいても、確率的にはそのうち1人しか無料にならない。(契約数/日本人口で計算)
その1人以外の通信料はすべて、他社の約2倍。1日たった7分でも1万円を超える。
長者番付にのるような在日企業は、ほぼ全部がパチンコ・サラ金・風俗と、法の裏側を行くものばかり。
(本社が韓国にあるものは違う。まあ、本社がハンバーガー屋で支社がサラ金というのも有り得ないが)
日本に本社を置く在日企業としては、まさにソフトバンクは、ただ1つの例外。 なのだが…
思い込みやら、まず読まない契約書の解約金やらを利用した商法も目立つ。気をつけて欲しい。
※…新聞記事は「0円携帯 解約に6万円 県、ソフトバンクに改善要望」で検索
↓ついでに。思い込みを利用されているのは、実は、投資家も同じだったり…
ttp://news21.2ch.net/test/read.cgi/bizplus/1176891847/
SQL ServerじゃないですがMSDE2000の質問です。
Enterprise ManagerでDBをタスクパッドで見るとデータサイズが 1.99G あります。
ですが、テーブル情報を見ても(全て併せて) 650MB しかありません。
データベースの圧縮を行っても圧縮されません。
データベースのバックアップを取ってから圧縮してもサイズが変わりません。
どうすれば圧縮できるようになりますか?
48 :
46:2007/04/24(火) 12:33:38 ID:???
>>47 データベースのサイズは、その認識であってます。
タスクパッドで見ると
全般タブ の割り当て済み領域 = 1.99GB
テーブル情報タブ のテーブルのサイズを合計した値 = 650MB
です。
ただ、テーブルは複数ありますが、その中の1つが600MB以上サイズを取っています。
クエリアナライザで
DBCC SHRINKDATABASE (<databasename>, 10)
を実行した後、Enterprise Managerを開いて確認してもサイズは変化しませんでした。
>>48 "その認識" って・・・
まあそれはおいといて、ステートメントを実行してその結果が普通と違うんで、
いろいろ試す必要がありそうですね。とりあえずこんなところでしょうか。
イベントログにエラーが記録されてないかチェックしエラーがあったらトラブルシュートする
SQL Server のエラーログをチェックしてエラーがあったらトラブルシュートする
DBCC CHECKDB を実行してみる
バックアップを別の DB に戻してそこで DBCC SHRINKDATABASE を実行して圧縮できるか試してみる
50 :
46:2007/04/24(火) 20:49:46 ID:???
>>49 もっと細かく書かないとわかんねーだろうが。
もったいぶってないで手順を詳しく書いてください。
だが断る
えらそうだね。
つか、これがわかんねーの?
>>47 ありがとうございます。
その参考書はみたことあります。
一度購入してみて、じっくり勉強してみます。
ありがとうございました。
Express Editonの
Toolkit serviceとAdvanced Serviceってどっちが強いの?
クエリアナライザのエディタは
Visual Studio みたいな
コードの整形機能(?)はないんでしょうか?
60 :
46:2007/04/26(木) 11:44:56 ID:???
>>49 返事が送れてすみません。
それと言葉使いがおかしいみたいでごめんなさい。
SQL Serverのログには、<database>開始中とかしかありませんでした。
そのDB全体のバックアップをとり復元を行い、圧縮をしましたが同じ結果でした。
DBCC CHECKDB を実行した結果は、各オブジェクトに何行データがあるかが
表示され、「0 個のアロケーション エラーと 0 個の一貫性エラー」と表示されました。
データが多いテーブルに関しては以下の情報が出力されています。
----------
'table' に対する DBCC の結果。
オブジェクト 'table' の 39256 ページの中に 88649 行あります。
----------
行数に対してページ数が多すぎるのでしょうか?
table のデザインは datatime, float × 200のレコードです。
>>50は私が書いたものではありません。
>>60 CREATE DATABASEしたときの初期サイズが2GBなんじゃない?
通常の圧縮操作(DBCC SHRINKDATABASE)だと初期サイズ以下にはならない。
DBCC SHRINKFILEでtarget_sizeを指定するといいはず。
62 :
46:2007/04/26(木) 18:04:43 ID:???
>>61 初期サイズは1MBで作成しました。
DBCC SHRINKFILE (<database>_Data, 10)を実行しましたがサイズは変わりませんでした。
以下のSQLを実行しています。
----------
CREATE DATABASE <database>
ON PRIMARY
(
NAME = <database>_Data,
FILENAME = 'D:\DB\<database>_Data.mdf',
SIZE = 1MB,
FILEGROWTH = 10%,
MAXSIZE = UNLIMITED
)
LOG ON
(
NAME = <database>_Log,
FILENAME = 'D:\DB\<database>_Log.ldf',
SIZE = 1MB,
FILEGROWTH = 10%,
MAXSIZE = UNLIMITED
)
GO
MSDE2000でバックアップを取ったDBを WorkgroupEditionに復元をして
>>47>>49>>61のことを実行しましたが、サイズは減りませんでした。
新しくDBを作り、insert into <database>.dbo.<table> select * from <table>
を実行してサイズを確認すると、300MBほどになっていました。
>>62 > DBCC SHRINKFILE (<database>_Data, 10)を実行しましたがサイズは変わりませんでした。
これダメです。DBCC SHRINKFILE の第二引数はサイズ(MB) で、
ここにデータベース ファイルの使用中のサイズより小さい値を指定すると何も起こりません。
>>47 によると、
>データベース ファイルの使用中のサイズ = 650 MB
とのことなので、まず 700 あたりを指定してみたらどうでしょう。
>>59 SQL Server 2000 の話だと思いますが、SQL Server 2000 のクライアントツールには
そういうイイものはついてません。
どの程度のことを期待されているのかわかりませんが、
私だったら、SQL Server Management Studio で SQL Server 2000 に接続します。
SSMS にはクエリ エディタが統合されており([クエリ]→[エディタでクエリをデザイン])、
これを使えば Access や MSQuery 程度のことは簡単にできます。
ただし最終的にテキストエディタは必要になると思います。
SSMS は
>>57 のリンクからダウンロードできます。
ただし .NET Framework 2.0 のインストールが必要です。
>>63 すみません、自分でもDBサイズについて、よくわかっていないようでした。
タスクパッドの割り当て済み領域を見ると以下のようになっています。
データ
全体 :1995.75MB
使用中:1995.75MB
空き :0MB
トランザクションログ領域
全体 :0.99MB
使用中:0.29MB
空き :0.7MB
DBにはMSDE2000を使用しているので限界の2GBに達しています。
これをWorkgroupEdtionにバックアップから復元をしても圧縮出来ませんでした。
以下の作業は、MSDE2000, WorkgroupEditionで実行しました。
DBCC SHRINKFILE (<database>_Data, 1900)を実行しても圧縮されませんでした。
----------
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
------ ------ ----------- ----------- ----------- --------------
7 1 255456 128 255448 255448
2000にすると以下のエラーが出力されました。
データベース 'database' のファイル '1' を 256000 ページに圧縮することはできません。
255456 ページしかありません。
66 :
NAME IS NULL:2007/04/27(金) 13:11:45 ID:R0pzkXZh
>>65 "圧縮" (shrink) という言葉を zip や lzh のような圧縮 (compress) と混同していますね。
SQL Server に対して使用する圧縮という言葉は、データベース ファイルのうち
データ(オブジェクト)が入っていない部分を解放するという意味です。
現状ではデータベース ファイルにいっぱいまでデータが入っているので、
レコードなどのオブジェクトを削除しないとデータベース ファイルはこれ以上小さくなりません。
67 :
46:2007/04/27(金) 13:41:49 ID:???
>>66 タスクパッドから見るテーブル情報の全サイズは 630,168K です。
ということはデータの使用中サイズの 1995.75MB の中に
データがちりばめられて保存されているということでしょうか?
サイズが大きいテーブルのデザインは以下になっています。
datetime × 1, float × 200
インデックスは datetime を指定しています。
68 :
46:2007/04/27(金) 18:55:02 ID:???
失礼かとは思いましたが、別の場所でも質問させてもらいました。
レスして頂いた方の情報から、そこで以下のようなことが分かりました。
DBCC SHOWCONTIG をすると、サイズが大きいテーブルの断片化が激しいことがわかりました。
LogicalFragmentation が 99% を超えていました。
テーブルのINDEXを作成しなおすと、タスクパッドで見るテーブルサイズが
2002128KB になっていました。
恐らくですが、断片化をどうにかしないとこれ以上データの圧縮は
出来ないのではないかと思います。
断片化を直すためにDBCC INDEXDEFRAG, DBCC DBREINDEXも実行しましたが
サイズに変化はありませんでした。
マルチは死ねよ
MSDEの上限サイズは2Gだっけか?
>>67 > データがちりばめられて保存されているということでしょうか?
そうでなくて、ぎっしり詰まっているということ。
だから詰まっているものを消さない限りどうがんばってもファイルサイズは減りません。
データベース ファイルの中にはレコードしか入ってないと思っているようですが、
インデックスなどもオブジェクトとしてデータベース ファイルの中に入っています。
インデックスが容量を使ってるんじゃないですか?
インデックスのサイズはタスク パッドや sp_spaceused で見られます。
>>68 > テーブルのINDEXを作成しなおすと、タスクパッドで見るテーブルサイズが
> 2002128KB になっていました。
2G 使ってるじゃん。テーブル サイズってインデックス サイズの間違いじゃないの?
論理フラグメンテーションの意味わかってる?
それはクラスタ化インデックスなのかとか FILLFACTOR とか解決は遥か遠そうだから、
インデックス消すか、SQL Server 2000 にアップグレードするか、SQL Server 2005 Express に移行したら?
73 :
NAME IS NULL:2007/04/28(土) 00:07:31 ID:B3/rVMFc
SQL 難しいよう(泣
SQLの本にオラクルも一緒に載ってるとオラクルが羨ましく感じる(´ω`;)
75 :
46:2007/04/28(土) 08:33:08 ID:???
>>71-72 このテーブルには、10秒毎にデータを保存しています。
保存期間は60日です。
テストプログラムで10年分のデータを追加、削除を繰り返しました。
そのときは、約1.6GB からmdfのサイズが増えることはありませんでした。
今、DBの確認ができないため、後でインデックスサイズが容量を使っているのか
を調べてみます。
>>72 私自身、SQL Serverが初心者なためレスして頂いた用語を
一つ一つ調べながら試しています。
論理フラグメンテーション、クラスタ化インデックス、FILLFACTOR は
ヘルプを見ましたが、いまいち理解出来ていません。
MSDE2000から WorkgroupEdition に移行する予定ですが
現状のまま稼動させるとHDDの容量いっぱいまでサイズが増えるかもしれないため
この問題が解決するまで導入が見送られている状態です。
>>75 日付を主キーにすると分布が偏るから再利用されない領域ができますね。
こういう場合はマメに索引の再編が必要になります。
データが増えるとクラスタ化索引の再編は時間もかかるし作業域も使うから、
非クラスタの主キーにするのがおすすめです。
おそらく一度主キーを削除してしまってshrinkして主キーを非クラスタで作り直せばいいと思いますよ。
マルチ先だけでやればいいのに
row_number()っていいね〜
はまちゃったよ
連番と伝票内の連番とか部署切り替えの最後だけ1つけるとか
小計とか帳票のページ替えフラグとかいろいろ使える
79 :
NAME IS NULL:2007/04/28(土) 13:39:32 ID:y2Eec+M8
今は CREATE TABLE の勉強中ですっ!
sp_spaceused を実行してテーブルのサイズを調べました。
以下を見ると、インデックスでサイズが大きくなってはいませんでした。
name : table
rows : 88649
reserved : 1985736 KB
data : 307152 KB
index_size: 104 KB
unused : 1678480 KB
インデックスは次のSQL文で作成しています。
CREATE UNIQUE INDEX [table_idx] ON [table]([datetime]) ON [PRIMARY]
それを削除し次のSQL文でインデックスを作成し直しました。
CREATE CLUSTERED INDEX [cl_table] ON [table]([datetime])
その後に、sp_spaceused を実行すると、unused が少なくなり
タスクパッドでも割り当て済み領域の使用中サイズが 174MB になっていました。
name : table
rows : 88649
reserved : 353328 KB
data : 352520 KB
index_size: 768 KB
unused : 40 KB
ファイルの圧縮を実行すると、割り当て済み領域が 174MB まで少なくなりました。
MSDE2000では、インデックスの再作成が出来なかったため WorkgroupEdtion で試しています。
インデックスの作成が、理解出来ていなかったようです。
テーブルの作成から勉強しなおします。
レスをして頂き、ほんとうにありがとうございました。
他所でも質問したことはお詫び致します。
申し訳ございませんでした。
81 :
46:2007/04/28(土) 18:29:05 ID:???
>>80 は私の書き込みです。
MSDE2000でインデックスの作成が出来なかったのは
データベースサイズの限界2GBを超えてしまうためです。
>>80 そこのindex_sizeはクラスタ索引は含まないんだろうね。
83 :
46:2007/04/30(月) 01:32:02 ID:???
>>83 46のオレオレ詐欺か・・はぁとかふぅとか言うのは池沼の証
85 :
46:2007/04/30(月) 09:35:49 ID:???
86 :
46:2007/04/30(月) 12:09:26 ID:???
ぷぅ
87 :
46:2007/04/30(月) 13:02:44 ID:???
ぶぅ〜
ぶりっ
ぶす ↓
90 :
KANA:2007/04/30(月) 23:11:26 ID:POoLbNTI
ある項目itemから文字'|'が、X回目に出現するのは何文字目か
検索したい。
oracleだと、
select regexp_instr( item, '|', 1, x ) from Table
で実行できますが、
同様のことをSQL-Serverの関数で行うことは可能でしょうか?
>>90 ない。
2005ならSQLSLRでそういうユーザー関数を自分でつくる。
93 :
NAME IS NULL:2007/05/06(日) 01:12:07 ID:7VodA4wx
総合ということなので 悩んでることでちょっと質問
あるDBのデータを検索する場合
SQL文にLikeなどを使って現在検索しています。
これがいわゆる見出し語検索といわれるものだと思うのですが
もうひとつの手法である全文検索
これの有用性が今一歩理解できません。
どのような時に有効なのでしょうか?
>>93 文書量が膨大になったとき検索が早い。
文書を(単語に)区切ってインデックスが作成されるから。
見出し語検索の like '%foobar%' は超遅い、ということがわからないなら、
このことが理解できるのはもっと先だと思います。
わかるなら、BOL から "フルテキスト検索" をキーワード検索したり、ぐぐったりすればすぐ理解できます。
サーバへの接続ノード数と言うのは、例えばSQLServerに接続する
クライアント側プログラム自作したとして、これも1カウントに入るんですか?
セッションの数って決まってるんだっけか?
>>98 サンクス。32767までなら余裕でした。
likeで便乗
like 'text%' をユーザーからの要望で
like '%text%' に変更しなければいけない
なんとなく遅くなったらイヤポ
対象文字列をリバースしたテンポラリテーブルを作って
like 'text%' と like 'リバース文字列%' を union させたら
どっちが速いかね〜と机上で考えてる
まぁ実際試せばわかることだけど
他になんか妙案ないかな?
検索対象は nvarchar(10) でインデックスなし、最大10万件くらいのテーブル
とここまで書いてインデックスないからあまり変わらないのかなとオモタ
>>100 >like '%text%'
と
>like 'text%' と like 'リバース文字列%' を union
が同じにならないのは分かってて言ってるのか?
102 :
NAME IS NULL:2007/05/09(水) 15:14:40 ID:wVgHvjRJ
質問です。SQLSERVER 7.0を使用しています。
全体バックアップとトランザクションログを使っての復元で質問です。
例えば全体バックアップを毎日12:00に行ってトランザクションログは
6:00と18:00の2回バックアップを行っていたとする場合、
ある日の22:00の時点で18:00のデータに復元したい場合、
12:00の全体バックアップ+18:00に取ったトランザクションログ
を利用すれば良いと思いますが、トランザクションログの6:00〜12:00までの
ログは今回の復元時には利用されず、自動的に12:00〜18:00までのログが使用され
復元されると言う事で良いのでしょうか?
>>102 任意のログファイルを選択してリストアできる。
>>102 自分は 2000 以降のユーザで、リストア時には RESTORE ステートメントを使うので
何が自動的なのかわかんないんだけど、2000 で Enterprise Manager を使ってバックアップを戻すときは
何がリストアされるかが表示されて、プロパティをみるとそれがいつの完全・差分・トランザクション ログのバックアップか
表示されるよ。そんで
>>102 で意図したようになってる。
7.0 でも多分同じだと思うけどなあ。
105 :
NAME IS NULL:2007/05/10(木) 14:19:13 ID:V55nTEYq
初心者なのですがご質問してよいですか
DB:MS_SQL_2005
VB6.0
TABLE_A から同じ値のA_CODE内のB_CODEが最大値を持つレコードの
C_CODEの値を取得したい
A_CODE B_CODE C_CODE
11 32 A
11 42 B
11 18 C
12 18 F
12 19 H
12 25 K
↓
A_OCDE C_CODE
11 B
12 K
上記の抽出機能を1つのSELECT命令で記述したいのですが
うまく行かないので困っています
お詳しい方のご教授お願い致します
>>105 SELECT A_CODE, C_CODE FROM (
SELECT A_CODE, B_CODE, C_CODE,
RANK() OVER (PARTITION BY A_CODE ORDER BY B_CODE DESC) AS RANK FROM yourtable
) A
WHERE RANK = 1 ORDER BY A_CODE
107 :
NAME IS NULL:2007/05/10(木) 14:52:30 ID:V55nTEYq
>>106 早々にありがとう御座います!
今スグ試せる時間が無いので後ほどトライします!
ありがとう御座いました!
108 :
NAME IS NULL:2007/05/10(木) 18:53:33 ID:nIIPHcZW
>>104 レスありがとうございます。
そうですよね。多分きちんと復元されてますよね。
109 :
104:2007/05/10(木) 23:30:39 ID:???
>>108 やってみればいいじゃんとしか言いようが無い。
7.0 は持ってないし今後使う予定も無いのでご自分でどうぞ。
111 :
NAME IS NULL:2007/05/13(日) 03:21:28 ID:2EQA78C8
質問です。
ASP.NETでSQLSever2005Expを(初めて)使おうと思っているのですが、
ストアドプロシージャに関して思わぬところでハマってしまいました。
どうも、uniqueidentifier型のフィールドをSELECTすると正しい結果が
帰ってこないようなのです。
ALTER PROCEDURE dbo.testproc1
AS
BEGIN
SELECT r.RoleName, r.LoweredRoleName, r.Description
FROM aspnet_Roles r
END
としてVS2005のIDE上で実行すると、
RoleName
----------
A
B
C
D
該当する行はありません。
(4 行が返されました)
と表示されます。(一部抜粋、改変)
ところが、
ALTER PROCEDURE dbo.testproc1
AS
BEGIN
SELECT r.RoleName, r.LoweredRoleName, r.Description, r.RoleId
FROM aspnet_Roles r
END
このようにして、実行したところ、
RoleName
---------
該当する行はありません。
(1 行が返されました)
となってしまいました。
r.RoleIdというのはuniqueidentifier型です。この型の値が
文字として表示できないのならばまだわかりますが、
仮にそうだとしても「4行が返されました」となるはずです。
いろいろ実験してみましたがこの型のフィールドをSELECTすると
どうしても正しい結果が返ってこないようなのです。
何がしたいかというと、WHERE句をさらに使用してこのテーブルで
条件が合致するレコードの一覧をRoleIdも含めて取得したいのです。
(本当は別のテーブルで別の目的で同じようなことをしたいのですが、
それは念のため伏せさせていただきます)
どこが間違っているのか、どこをどうすればよいのか、
どなたかご教授ください。お願いします。
>>111 問題は無いはずだがIDE以外から操作したらどうです?
うっかりGroup byしてるとかw
114 :
NAME IS NULL:2007/05/13(日) 11:57:47 ID:HZDMB/aP
超初心者です。CASE文の練習で試しにこんなSQL文を書いてみました。
パラメータが間違っていますとメッセージが出ます。
どのようにすればいいのでしょうか?
SELECT CASE @isuser WHEN 1 THEN 1 ELSE 0 END AS Expr1
>>114 DECLARE @isuser INT
SET @isuser = 123
SELECT CASE @isuser WHEN 1 THEN 1 ELSE 0 END AS Expr1
116 :
NAME IS NULL:2007/05/13(日) 12:44:21 ID:HZDMB/aP
>>110 説明されている内容はこちらには正しく伝わってこないけど、
セキュリティの問題でつまづいていることはわかりました。
リンク サーバーというのは、リンクしている SQL Server が自身のクライアントからの要求にしたがって、
リンクされているデータベースに対するクエリを実行し、クライアントからはあたかもひとつのデータベースに
対してクエリを実行しているように見せかける仕組みです。
受け取った命令がトランザクションなら、DB をまたがったトランザクションであるため分散トランザクションとして
実行する必要があります。
リンク サーバー プロパティでセキュリティ コンテキストを指定しない場合、
SQL Server はサービス開始アカウントのセキュリティ コンテキストでリンクされているデータベースに
ログオンし、クエリを実行します。ここでサービス開始アカウントにシステムアカウントを指定していると、
SQL Server は SYSTEM (Local System) のセキュリティ コンテキストで実行されます。
Local System という名のとおり、このセキュリティ コンテキストはローカルコンピュータ上では
強い権限をもってますが、リモート コンピュータに対しては何の権限ももっていません。
つまりリモート コンピュータにとっては Anonymous (匿名) ユーザーとして認証します。
この時、普通は匿名ユーザーに SQL Server へのログオンなど許しませんから、
アクセス拒否されて当然です。
ここで通常許される 2 つの選択肢があります。
(1) SQL Server のサービス開始アカウントに、リンクされているデータベースに
ログオンできるアカウントを指定する。
(2) リンク サーバー プロパティで、リンクされているデータベースにログオンできるように
セキュリティを構成する。
>>110 はいま (2) をやろうとして、 "ローカル ログオンとリモート ログオンのマッピング" と
"権限の借用(最近はこれを '偽装' と呼びます)" の意味が理解できないために、
>>110 のやりたい実装(これは私にはわかりませんが)を実現できていないのでしょう。
これを行うには OS とデータベース両方に対するセキュリティの知識が必要です。
(2) を実現する敷居が高いのなら、(1) を採用するというのもひとつの手です。
>>110 を読んだ限りでは、(1) はおそらくできているのでしょう。
(1) の選択肢が存在する理由のひとつに、(2) を行うのが面倒だというのもあるのでしょうし、
(1) の選択肢を取ることそのものは問題ありません。
> サーバAのSQL Serverサービス開始アカウントで
> システムアカウントを指定するか、
> MSドメインのAdministratorsグループに存在しない
> アカウントのどちらかでリンクサーバを設定するには
> どうしたらいいでしょう?
MSドメインって何でしょうか?
"どちらか" の対象となっている 2 つの項目は、対比できるようなものではないでしょう。
> このへんを読んだけど、どうやらうまく資格情報の委任が
> 出来てないみたい。
大抵の場合、偽装が期待通りに実行できてなそうな場合は、ログオンされるコンピュータ、今回の場合は
リンクされる DB サーバーの OS 上でログオン情報を監査するのが最初のステップです。
ちなみにこの文脈で "委任" という言葉を使ってますが、これも正しくない使い方なんじゃないかと思います。
長文乙
>>112 ExecuteReader()などを使ってプログラムから呼び出してみたのですが、
確かに1行は戻ってきています。しかし、すべての項目がNULLとなっています。
(しかもNULL許容に設定してないフィールドがあるにもかかわらず)
ただし、SQL文だけを「SQLブロックのデザイン」や「ビュー」などで
直接実行した場合は正常にグリッドに表示されるようです。
だから余計にわからないのですが。
ストアドプロシージャではuniqueidentifier型のデータは「例外として」
そのまま扱えないということでしょうか?
とりあえず、すでにASP.NETが自動的に作成していたストアドプロシージャを
まねて(4行が該当しました)と出るようにはなったんですが……
120 :
111:2007/05/13(日) 17:51:51 ID:???
このようにしてみると何故か「4行該当しました」となりました。
まだプログラムから呼んでみてはいないのでうまくいっているのか確かめられていませんが、
そもそも一体はじめのと何が違うんでしょうか?
ALTER PROCEDURE dbo.testproc1
@PageIndex int,
@PageSize int
AS
BEGIN
-- Set the page bounds
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
DECLARE @TotalRecords int
SET @PageLowerBound = @PageSize * @PageIndex
SET @PageUpperBound = @PageSize - 1 + @PageLowerBound
-- Create a temp table TO store the select results
CREATE TABLE #PageIndexForUsers
(
IndexId int IDENTITY (0, 1) NOT NULL,
RoleId uniqueidentifier
)
-- Insert into our temp table
INSERT INTO #PageIndexForUsers (RoleId)
SELECT r.RoleId
FROM dbo.aspnet_Roles r
ORDER BY r.RoleName
SELECT @TotalRecords = @@ROWCOUNT
SELECT r.RoleId
FROM dbo.aspnet_Roles r, #PageIndexForUsers p
WHERE p.IndexId >= @PageLowerBound AND p.IndexId <= @PageUpperBound
ORDER BY r.RoleName
RETURN @TotalRecords
END
121 :
111:2007/05/13(日) 19:26:58 ID:???
やはりこれでもIDを含むとだめですね……
>>120 >FROM dbo.aspnet_Roles r, #PageIndexForUsers p
>WHERE p.IndexId >= @PageLowerBound AND p.IndexId <= @PageUpperBound
dbo.aspnet_Roles と #PageIndexForUsers の結合条件が欠けてるような。
意図してるのはRoleIdでの自然結合だろうか。そうはなってないけど。
123 :
111:2007/05/14(月) 00:20:18 ID:???
たぶんどこか抜けていると思います。
すでに自動生成されているストアドプロシージャの文字を変えた程度のことしかやってませんから。
ASP.NET側の機能にRoleIdを取得して云々というのはもともとない(ストアドで済ましている)
ようなので、UserIdを含めてユーザー情報の一覧を取得しているストアドプロシージャを参考
に(コピペ)して作りました。これでもうまくはいかないですが……
とりあえずIdを取得をしなくても処理ができるようにプログラムを設計しなおした
ほうが早いですかねぇ……
124 :
110:2007/05/14(月) 11:24:45 ID:???
>>117 長文ありがとうございます。
> > サーバAのSQL Serverサービス開始アカウントで
> > システムアカウントを指定するか、
> > MSドメインのAdministratorsグループに存在しない
> > アカウントのどちらかでリンクサーバを設定するには
> > どうしたらいいでしょう?
> MSドメインって何でしょうか?
> "どちらか" の対象となっている 2 つの項目は、対比できるようなものではないでしょう。
MSドメインとは、ActiveDirectoryドメインのことでした。
WindowsNTの頃はマイクロソフトドメンとか言われてたので... ついつい古い用語が
出てしまいます。
> 大抵の場合、偽装が期待通りに実行できてなそうな場合は、ログオンされるコンピュータ、今回の場合は
> リンクされる DB サーバーの OS 上でログオン情報を監査するのが最初のステップです。
SQLサーバへのログオンなので、OSのログオン情報が必要とは思ってもなかったです。
ってことはWindows認証を使う場合、
1.OSへのログオン
2.SQLサーバへのログオン
って順番でログオンされるって事でしょうか。
SQLサーバのログオン監査レベルが”なし”になっていたので、”失敗”に変更して
試してみます。
>>111 "uniqueidentifier型のフィールドをSELECTすると期待したものと異なる結果が返される" という問題の定義は正確ではないと思います。
次のようなテスト スクリプトは私の環境では予想通り正しく実行されました。
私の環境は Build: 9.00.3159.00 で、OS は Windows Server 2003 SP1 です。
>>111 さんご自身の DB で次のテスト スクリプトでも問題がおきるようならば、SP や hotfix をインストールすることで問題が解決するかもしれません。
-- テーブルを作成する
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tblUID](
[UID] [uniqueidentifier] NOT NULL,
[createdate] [datetime] NULL,
CONSTRAINT [PK_tblUID] PRIMARY KEY CLUSTERED
(
[UID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
-- テスト用のデータを準備する
declare @@i as int
set @@i = 0
WHILE @@i<10
BEGIN
insert into tblUID select NEWID(), GETDATE()
set @@i = @@i + 1
END
-- sp 作成: いくつかの方法で SELECT してみる
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE sp_test
AS
BEGIN
select t.* from tblUID t
select t.createdate from tblUID t
select t.UID from tblUID t
select t.UID, t.createdate from tblUID t
END
GO
-- sp を実行してみる
EXEC sp_test
-- sp を削除する
DROP PROCEDURE sp_test
-- テーブルを削除する
DROP TABLE [dbo].[tblUID]
126 :
111:2007/05/14(月) 12:11:54 ID:???
ありがとうございます。
sqlcmdで実行してみました。
確かにこのスクリプトだと問題なく実行できているようですね……
SQLServerの時点では正しく処理されているということでしょうか。
ASP.NETの内部処理も正常に処理されているので、疑うべきは自分の書いた
部分だとは思うんですが、それがサッパリわかりません。
もしくはVSが自動で設定してくれたデータベースの設定が逆に悪さを
しているとも考えられることは考えられそうですが。
ためしに後で、Roleのデータが入ったデータベースファイルをアタッチして
実験してみます。
127 :
104:2007/05/14(月) 14:21:16 ID:???
だれか俺のアナルに指をいれてくだし
INSERT INTO 104
(ANAL) VALUES (YUBI)
130 :
110:2007/05/15(火) 15:12:42 ID:???
>>117 ・ALL
リンク先SQLサーバのログオン監査レベルを”失敗”に変更してみましたが、
イベントビューア・SQL Serverログの両方ともログオン失敗のログが出ていませんでした。
OSへのログオン情報を見てみようと、イベントビューアのセキュリティを見てみると、
どうやらANONYMOUS LOGONをしているみたいです。
ネットワーク ログオンの成功:
ユーザー名:
ドメイン:
ログオン ID: (0x0,0xACA6AF0)
ログオンの種類: 3
ログオン プロセス: NtLmSsp
認証パッケージ: NTLM
ワークステーション名: リンク元サーバ名
ログオン GUID: -
呼び出し側ユーザー名: -
呼び出し側ドメイン: -
呼び出し側ログオン ID: -
呼び出し側プロセス ID: -
移行されたサービス: -
ソース ネットワーク アドレス: リンク元サーバIP
ソース ポート: 0
何でANONYMOUS LOGONなんだろ?
リンク元DBのリンクサーバのプロパティ情報・セキュリティタブには、
リンク先DBへのユーザ名マッピングがあるんですが、Windows認証の時は
ここはどういう扱いになるんでしょう?
クエリアナライザ起動時に、Windows認証でリンクテーブルを参照すると
認証エラーになってしまいます。
ユーザ名を指定してクエリアナライザを起動してリンクテーブルを参照すると、
今度は大丈夫なんです。
あー、なんか敷居が高いなぁ。。。
>>130 リンク先のコンピュータも Windows なんだよな?
リンクサーバーってリンク先が Windows で SQL Server とは限らないんで、
ちゃんとリンク先は Windows で SQL Server xxxx だっていわないとダメよ。
> リンク元DBのリンクサーバのプロパティ情報・セキュリティタブには、
> リンク先DBへのユーザ名マッピングがあるんですが、Windows認証の時は
> ここはどういう扱いになるんでしょう?
そりゃローカル ログインに DB のユーザーを指定して、
リモート ユーザーにはリンク先のデータベースにログオンするユーザーを
指定するに決まってるべ。自分が挙げたリンクに書いてあるだろ?
> クエリアナライザ起動時に、Windows認証でリンクテーブルを参照すると
> 認証エラーになってしまいます。
> ユーザ名を指定してクエリアナライザを起動してリンクテーブルを参照すると、
> 今度は大丈夫なんです。
ユーザー名を指定して、ってのは「SQL 認証で」って意味だよな?
どうせ sa を指定してて、sa のパスワードはリンク元とリンク先のインスタンスで同じなんだろ。
ログインマッピングを全部消して、[次のセキュリティ コンテキストを使用する] を選んで、
リモート ログインとパスワードにリンク先 DB にログオンできる SQL 認証のユーザーを
指定してみ?そんで、Windows 認証でリンク元 DB に対してリンク サーバーのテーブルを
FROM 句に含んだクエリを実行する。
132 :
110:2007/05/16(水) 12:49:57 ID:???
>>131 >> リンク元DBのリンクサーバのプロパティ情報・セキュリティタブには、
>> リンク先DBへのユーザ名マッピングがあるんですが、Windows認証の時は
>> ここはどういう扱いになるんでしょう?
> そりゃローカル ログインに DB のユーザーを指定して、
> リモート ユーザーにはリンク先のデータベースにログオンするユーザーを
> 指定するに決まってるべ。自分が挙げたリンクに書いてあるだろ?
DBのユーザって言うのは、SQL Serverのサーバを起動しているサービスのユーザですか?
それとも、クライアントからWindows認証で認証しているクライアントのログオン名ですか?
SQL Serverのサーバを起動しているサービスのユーザであるとすると、
サービスを起動するユーザは一つしかないので、複数ログオン情報を入力できる訳が
わからないです。
クライアントのWindowsログオン名だとすると、ドメイン名\ユーザ名でローカルユーザを
入力してOKボタンを押し、もう一度プロパティを開くと、ユーザ名が消えてしまいます。
> ログインマッピングを全部消して、[次のセキュリティ コンテキストを使用する] を選んで、
> リモート ログインとパスワードにリンク先 DB にログオンできる SQL 認証のユーザーを
> 指定してみ?そんで、Windows 認証でリンク元 DB に対してリンク サーバーのテーブルを
> FROM 句に含んだクエリを実行する。
クエリアナライザをSQL認証 sa でログオンすると、確かに実行できますが、
やはりWindows認証でログオンすると、認証エラーになってしまいます。
http://www.microsoft.com/japan/technet/prodtechnol/sql/2000/maintain/sp3sec01.mspx ここも見てるんですが、なかなか全部理解できないっす。
>>132 > なかなか全部理解できないっす。
そりゃそうだ。四則演算もできないのに微積分やってるようなもんだからな。
『SQL Server 2000 でいってみよう』 から始めて、SQL Server 2000 自習書シリーズくらいやっとけ。
> クエリアナライザをSQL認証 sa でログオンすると、確かに実行できますが、
> やはりWindows認証でログオンすると、認証エラーになってしまいます。
そいつはおかしいわ。
んじゃ、リンク先ユーザーに linkedserveruser みたいなアカウントを作って
ターゲット テーブルの SELECT 権限を与えて、「リモート ログインとパスワードに
リンク先 DB にログオンできる SQL 認証のユーザー」 としてその linkedserveruser を指定する。
その他の設定は
>>131 で書いたのと同じだ。
次に、SQL プロファイラでリンク先 DB のトレースを取りながら、リンク元 DB に sa でログオンして
分散クエリを実行する。この時プロファイラの LoginName 列に誰が DB にログオンしてきたか記録される。
linkedserveruser でログオンしてきてたら OK だ。sa でログオンしてきたら設定が間違ってる。
最後に、Windows 認証でリンク元 DB に対して分散クエリを実行する。
設定が
>>131 の通りなら、この時もリンク先 DB に linkedserveruser でログオンしてくる。
分散クエリは期待した結果を返す。
これでダメなら、次をさらすこと。
1 リンク元、リンク先サーバーの OS の種類とバージョン
2 上の手順のどこでどのように期待しているのと違う動作をしたか
3 クエリアナライザに表示されたエラーのコピペ
4 エラーが出たときにイベントビューアにエラーが出てたらそれのコピペ
基本的な事なんですが
OSとDBファイルは物理ディスク分けたほうがいいのかな?
w2003sv SQL2005
今は同じディスクでミラーリングしとるんですが
分けてミラーするかこまめにトランザクションログとるか迷ってます
劇的に改善するのかな〜
先人の意見求む!
DBは今カットオーバー1.5ヶ月で250Mっす
>>133 レスありがとうございます。
うーん、なんというか... 動く時と動かない時があって、原因がまだはっきり分からないっす。
> 1 リンク元、リンク先サーバーの OS の種類とバージョン
リンク元 Windows2000sv SP4 SQL Server 2000 SP4
リンク先 Windows2003sv SP1 SQL Server 2000 SP4
> 2 上の手順のどこでどのように期待しているのと違う動作をしたか
> 次に、SQL プロファイラでリンク先 DB のトレースを取りながら、リンク元 DB に sa でログオンして
> 分散クエリを実行する。この時プロファイラの LoginName 列に誰が DB にログオンしてきたか記録される。
> linkedserveruser でログオンしてきてたら OK だ。sa でログオンしてきたら設定が間違ってる。
> 最後に、Windows 認証でリンク元 DB に対して分散クエリを実行する。
> 設定が
>>131 の通りなら、この時もリンク先 DB に linkedserveruser でログオンしてくる。
> 分散クエリは期待した結果を返す。
この順番で時間をおかず、処理を試すとすべてOKです。
ですが、30分くらい時間をおいてから
> 最後に、Windows 認証でリンク元 DB に対して分散クエリを実行する。
> 設定が
>>131 の通りなら、この時もリンク先 DB に linkedserveruser でログオンしてくる。
> 分散クエリは期待した結果を返す。
ここから実行しようとすると、
Windows認証でクエリアナライザを起動し、リンクテーブルを開こうとした時に
”[Microsoft][Odbc SQL Server Driver][SQL Server][DBNETLIB][ConnectionOpen (Connect().]SQL Server が
存在しないか、アクセスが拒否されました。”
のエラーメッセージが表示されます。
このときのイベントビューアには、
”18453 :ユーザー 'リンク先サーバ名\Administrator' のログインに成功しました。接続 : 信頼関係。”
のメッセージが表示されます。
> 次に、SQL プロファイラでリンク先 DB のトレースを取りながら、リンク元 DB に sa でログオンして
> 分散クエリを実行する。この時プロファイラの LoginName 列に誰が DB にログオンしてきたか記録される。
> linkedserveruser でログオンしてきてたら OK だ。sa でログオンしてきたら設定が間違ってる。
このタイミングでは、イベントビューアには
”18454 :ユーザー 'linkedserveruser' のログインに成功しました。接続 : 非信頼関係。”
その後すぐ
> 最後に、Windows 認証でリンク元 DB に対して分散クエリを実行する。
> 設定が
>>131 の通りなら、この時もリンク先 DB に linkedserveruser でログオンしてくる。
を実行すると、イベントビューアには
”18453 :ユーザー 'リンク先サーバ名\Administrator' のログインに成功しました。接続 : 信頼関係。”
のメッセージです。
なぜ、時間をおかずに処理を流すとうまく動くのでしょう?
sa でログオンして処理を流し、クエリアナライザを再起動してWindows認証でログオンしなおしてるのに...
Windows認証で実行すると、 なぜ 'リンク先サーバ名\Administrator' になるんでしょう?
処理を実行しているクライアントは、ドメイン名\別のログイン名 でログインしてるのに。。。
基本的なことなんですが、SQLServerは
138 :
110:2007/05/17(木) 17:31:25 ID:???
>>136 の書き込みも110 です。
プロファイラの情報ですが、
Windows認証の場合は
NTUserName: Administrator
LoginName: ドメイン名\Administrator
のログイン情報でした。
sa を使い、SQL認証にすると
NTUserName: リンク元SQLサービス開始用ドメインユーザ
LoginName: linkedserveruser
になります。時間をおかずにWindows認証で処理をした時は
NTUserName: Administrator
LoginName: ドメイン名\Administrator
と、時間をおいて動かなかった時と同じログイン名です。
139 :
NAME IS NULL:2007/05/17(木) 21:21:32 ID:kOFxK65C
SQLど素人の者です。
プログラム技術板と重複してしまいますが
質問させてください 。
SQL SERVER2000のストアドについてですが、
ストアドの再コンパイルが必要
(しなければ動作がおかしくなる等)
となる時はどんな時なのでしょうか?
同じデータ&ストアドを使用しているのにも関わらず、
あるマシンでは通常通り正しい結果を抽出できたのですが、
別のマシンではエラーとなり抽出ができない状態が発生しました。
色々試した結果、
ストアドの再コンパイルを行ったところ、
現象は解消され、正しい結果を抽出することができたのですが・・・
>>138 >>131 +
>>133 は、「どんなユーザーで SQL Server にアクセスしてこようが、
リンク先サーバーには linkedserveruser でログインしてクエリを実行する」 ことを
意図していることはわかってるよな?(書き込みを読むとその時点から理解できてないように読める)
つーことは、アクセスできようができまいが、Windows 認証を使っている時に
linkedserveruser でないユーザーでリンク先にログオンしてること自体が「意図したのと違う」結果なんだよ。
で、"ドメイン名\別のログイン名" として SQL Server にログオンしてるのに、リンク元 SQL Server によるリンク先へのアクセスが
勝手にドメインの Administrator になっちまう(プロファイラによると)ってのがワカンネ。そういう動きをするようにどっかで設定してるんだろうな。
しかもそれがドメインのじゃなくてリンク先サーバーへのローカル Administrator として監査されてる(イベント ログによると)ってのもワカンネ。
矛盾しまくりだな。
オレはログインマッピングを全部消してないと思う。
この動きは kerberos による委任の動作とも違うし、そういう動きをするようにどっかで設定してるとしか思えねー。
しかもそんな設定ができるのはログインマッピングだけだし。
143 :
NAME IS NULL:2007/05/18(金) 10:22:42 ID:xq5zC4h3
>>140 正確に申し上げると、
エラーになってしまう要因は別にあり、
ストアド内からあるユーザー定義関数を実行すると
特定のパラメータ(コード600200)の時にだけ桁あぶれをしてしまい
エラーとなってしまうというものです。
全く同じDBで全く同じSQL文(ストアド)で全く同じパラメータ(コードを3017)による実行
を行った場合、あるマシンでは3017のみを対象としてそのユーザー定義関数を実行するのですが、別のマシンですと全てのコードを対象にしてのユーザー定義関数を実行してしまう
という状態になっておりました。
データもストアドもパラメータも同じであるのに、マシンにより、動作が異なってしまう
状況であった為、ストアドの再コンパイルを行ってみたところ、現象が解消された
次第です
>>143 よくわかんないけど。
桁あぶれってのは算術オーバーフローのことですよね。
そしてそのエラーが起きる原因は WHERE 条件をつけてるのに、その条件による抽出が行われないって事ですよね。
再コンパイルってのは
・sp_recompile <プロシージャ名> を実行する
もしくは
・ストアドプロシージャの定義に WITH RECOMPILE オプションをつける
のどちらかをやったってことですよね。
再コンパイルってのはクエリの実行プランを再作成するってことです。
拾ってくるデータ(レコードなど)は変わりません。内部的な処理方法が変わるってことです。
インデックスや統計情報、あるいはレコードが変わったときには別の実行プランでクエリを実行したほうが早いときがあります。
いまだになんでその問題に対して再コンパイルで対応しようと思ったのか理解できない。
別のことをやったのに [再コンパイル] と表現しているのでは?
もしくは再コンパイル以外に行ったことがその問題を解決したのでは?
ストアド プロシージャの再コンパイル
http://msdn.microsoft.com/library/ja/createdb/cm_8_des_07_6cmd.asp
>>142 ありがとうございます
熟読してみます
現在はRAID1にOS,スワップ,DB全部入りになってます
メモリ4GでDBが200M程度なんで全部メモリに入ってそう
とりあえずtmpdbだけでも分けて調査してみます
ふつー再コンパイルするのはその SP にからむテーブルのインデックスを変更したときだな。
必要になったことはないけど。
148 :
NAME IS NULL:2007/05/20(日) 21:37:31 ID:yUdiSxWy
accessとSQlserverって何が違うんですか?
値段です
名前です
南春男でございます
>>148 非常におおざっぱだけど、
・Access
シングルユーザーのデータベースシステム + データベースを操作するクライアントアプリケーション作成ツール
・SQL Server
マルチユーザーのデータベースシステム(エンジンのみ)
SQL Server をデータベースとして使って、Access でクライアントを作成することもできる。
SQL Server 2005買ってもらったんで喜々としてインストールしたんだけど、
Access2000 で作ったADPで不具合でまくり。もしかしてサポート対象外ですか?
教えてください。
>>153 Access 2000 のメインストリーム サポートは 2004 年で終わってる。
http://support.microsoft.com/lifecycle/?c1=505 だからこれを額面どおりに受け止めれば SQL Server 2005 は Access 2000 から使われるように
設計されてもいないし、テストもされていないと考えることもできる。
しかし経験上、実際は多分普通に使うことはできる。
"不具合でまくり" と一言で言われても、その一つ一つの内容がわからないので、
これ以上はコメントできません。
157 :
153:2007/05/23(水) 17:43:45 ID:???
レスサンクスです。
サーバのローカルではAccess2000のADPで作ったものは
しっかりと動いているのですが、リモートだと結果のレコードセットの取得に
失敗しているようです。接続拒否られます。
インストール時に選択する認証モードのせいかもしれないと思い、
混合モードにして、アカウントもSQL Serverのアカウントにして
試してみましたが同様の結果でした。それでもローカルだとしっかり動く。謎だ。
不確定要素が他にもいくつかあるので、自分なりに切り分けて、もう少しやってみます。
158 :
153:2007/05/23(水) 18:45:44 ID:???
無理でした。
心が折れました。もうだめぽ。
161 :
NAME IS NULL:2007/05/23(水) 20:56:37 ID:nhV28SRP
<<152
ありがとうございます。返事が遅れてすみません。
SQLserverでよさそうですね。その方向で勉強してみます。
162 :
153:2007/05/24(木) 10:10:39 ID:???
>>160 神光臨!
まさしくそれでした。ありがとうございました。
仮想コンピュータ上でですが、ACCESS2000のADPが問題なく動作
することを確認しました。
>>162 お前…鯖2005のインストール終了した時に出るダイアログとかちゃんと読まなかったな?w
164 :
NAME IS NULL:2007/05/25(金) 09:52:26 ID:OK4pQseG
質問があります。
今、Access2000(adp:クライアント)+SQLExpress2005(サーバー)で、
仮称:注文管理システムを構築してます。
問題になっているテーブルですが、仮称で、
番号テーブル:A
Aの中の列:a(注文番号)、int、NotNull
注文テーブル:B
Bの中の列:b(注文番号)、int、NotNull、Primary(Key) とします。
aには、値2が入っているとします。
やりたいことは、
@.aの値をbにセットする。
A.aを1インクリメントして更新する。
という単純なロジックです。
そこで問題が出てしまったのですが、事前確認として、
テーブルAのaには2がセットされています。
Accessからみても、ManagementStudioからみても
2がセットされています。
1.SQLでAからa(注文番号)を取得
2.aをテーブルBのb列(注文番号)にセット
3.aを1インクリメントする
4.SQLでAをUpdateする
をやったのですが、aにセットされていた2がbにセットされず、
実行するたびに、7,8,9,10・・・とAccessのオートナンバー型のように
勝手にカウントアップされてしまいます。
因みに、SQLServerはAccessのアップサイジングウィザードで作成しましたが、
オートナンバー型の列は一つもありません。
どうすればこの問題を解決できるのか是非御享受ください。お願いします。
165 :
続き:2007/05/25(金) 09:56:06 ID:OK4pQseG
7,8,9,10・・・とカウントアップされてしまうのは、SQLでaを取得した時に、2ではなく
増分値になっているところまではつきとめました。aフィールドに何か問題があるのかなと
思いました。 以上、よろしくお願い致します。
まずこの2つのうちどっちができないんだ?
@.aの値をbにセットする。
A.aを1インクリメントして更新する。
できないとしたら、どうなってほしいのにどうなってしまうんだ?
とりあえず 1 はできないだろ、だってテーブル B を UPDATE してないしな。
2 の方はオートナンバー型のようにカウントアップされてるんだから、できてるんだろうな。
Access とか言ってるから、SQL Server というより、VBA とか ADO について聞いてるのか?
168 :
164-165:2007/05/25(金) 17:29:36 ID:UcPHyeKn
>>167レスありがとうございます。
>>167のAができません。 VBA・ADOは使っていますが、
SQLにセットされている値とSELECTした時の値が異なっており、
さらに後者については実行都度1ずつインクリメントされてしまいます。
この理由がわからないのです。
よろしくお願い致します。
さっぱり判らんけど、Recordsetに値代入しても鯖のデータは変わんないし、
鯖のデータUpdateしてもRecordsetは自動更新されないよ。
(つうかもうADO忘れた。鯖2005+ADO.Net2.0ではデータ更新イベントを受け取れるらしいが。)
さっぱりわからん。説明が下手すぎ。
いちいち質疑応答するのかったるいんで、とりあえずプロファイラしかけて
VBA をデバッグ実行したら?どの VBA の行で SQL Server に UPDATE 文が
飛んできてるかわかるだろうよ。
最初:a=2
実行:b=a, a+=1; b=2, a=3
実行:b=a, a+=1; b=3, a=4
実行:b=a, a+=1; b=4, a=5
となるのは当然だと思うけど。
SQLServer2005での質問なんですが、
ローカルパブリケーションを削除し、新規作成したところ、「ストアドプロシージャ '' が見つかりません」と表示され
パブリケーションに失敗してしまいました。再起動すれば治るかもという安易な考えからSQLServerを再起動させたところ、
EnterpriseManager(ServerManagementStudio)から管理できなくなってしまいました(エラーがでてログインできない)。
---------------------
サーバとの接続を正常に確立しましたが、ログイン前のハンドシェイク中にエラーが発生しました。
(Provider: 共有メモリプロバイダ, error:0 - パイプの他端にプロセスがありません。)
---------------------
いろいろ弄ったのですが原因がわからず、仕方なしにアンインストール→インストールを行いましたが
同じようなエラーが表示されてインストールできませんでした。
---------------------
SQL Serverセットアップは、サーバ構成のデータベースサービスに接続できませんでした。
エラー:[Microsoft][SQL Native Client]共有メモリ プロバイダ:パイプの他端にプロセスがありません。
---------------------
まったく原因がわからず困っています。
本番機へ移項前にテスト機で上記のエラーがでてしまったので、本番機へ移項することができません。
宜しくお願いします。
174 :
164-165:2007/05/26(土) 12:36:09 ID:tHOS56YV
文才がなくてすみませんでした。
SELECTすると、列の値と異なる値(インクリメントされた値)を取得してしまう
というおかしな現象が発生しているんです。
なんとかまた自己解決にチャレンジします。
>>174 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
ってSQLを、ADOだろうと何だろうと一番最初に打ってみ。
176 :
164-165:2007/05/26(土) 18:42:10 ID:/8NdDjJH
うちもパブリケーションで質問です。
新しくパブリケーションを発行しようとするとエラーがでます。
SQL Serverで、パブリケーション'test'を作成できませんでした。
追加情報:
Transact-SQLステートメントまたはバッチの実行中に例外が発生しました。
(Microsoft.SqlServer.ConnectionInfo)
ストアドプロシージャ ''が見つかりませんでした。
ストアドプロシージャ ''が見つかりませんでした。
データベースコンテキストが'testdb'に変更されました。(Microsoft SQL Server、エラー:2812)
SQL Serve 2005です。
179 :
NAME IS NULL:2007/05/27(日) 22:30:10 ID:UJQa1vuC
express edition だと、エクセルファイルやCSVファイルのインポートはできないのですか?
質問です。
SQLServer2000にPHPからlocalhostで接続しようとしてるのですが、
Fatal error: Call to undefined function mssql_connect()
サーバ名をlocalhostやIPアドレス、直接サーバ名を入れたりしたけど
ダメでした。
また、別の環境でMSDE2000を使いPHPからlocalhost接続しようとしましたが、
やはりダメでした。
CSEやエンタープライズマネージャなどを使えば繋がってくれるのですが・・・
エロスの方教えてください。
>>179 CSV は BCP コマンドを使ってできるが、Excel は BI 系ツールがついてないのでできない。
Excel のインポートは 2000 の DTS を使ってもできるので、2000 を持ってるならそれでやればいい。
>>180 > Fatal error: Call to undefined function mssql_connect()
と出てることから、SQL Server の問題ではない。
SQL Server に接続するための関数 mssql_connect が呼ばれたけど、そんな関数ないよと言っている。
DB に接続するための PHP のライブラリが正しくインストールされていないと思う。
>>178 sa または DB サーバーの Administrator でログインしてやってみるといいかも
>>183 Administratorでログインしてやっているんですが。
原因がわからずです。
185 :
NAME IS NULL:2007/05/28(月) 12:12:31 ID:nux3andD
>>182 アドバイスありがとうございます。
ライブラリは入ってると思います(リモートサーバーには何故か問題なく
接続できるのです^^;)
>>185 そうですか。リモートサーバーに接続する時は mssql_connect() を使っていないということはありませんか?
私は PHP は使わないのでよく知りませんが。
どちらにせよ直接的に問題を解決したいならプログラムから mssql_connect() を参照できるようにするしかありませんね。
もしくはローカルとして指定するのではなくて、コンピュータ名で指定するとか。
>>184 原因はデータベースの sys.sp_addpublication を呼び出したが、そのストアドプロシージャがみつからないか
sp_addpublication の中で呼ばれる SP が見つからないか、でしょう。
変だな、と思うのはエラーメッセージの sp 名がブランクであることです。
普通はここには SP の名前が入るはずです。
(ためしに存在しない SP を exec してみるとわかります)
sp_addpublication は sysadmin/db_owner でないと呼び出せないので、まずセキュリティの問題を疑いました。
セキュリティの問題でないのならば、データベースの SP が壊れているのかもしれないのですが、これ以上は確実なことはわかりません。
この手のエラーならイベント ビューアにログが出ているでしょうから、そのメッセージでぐぐったりして調べるしかないと思います。
>>187 レスありがとうございます。
いろいろ試したりしたのですが、いまいちよくわかりません。
ただ、もとの原因となったであろう行動は特定できたので、報告します。
古いサーバ上のデータベースをデタッチしたものを、新しくたてたサーバにアタッチしたのですが
その際に、古いサーバのサブスクリプション情報も新しいサーバに渡されたようです。
古いサーバ
+レプリケーション
+ローカルパブリケーション
+[testdb]: [test]
+ローカルレプリケーション
+[testdb2] - [oldserver].[testdb]: [test]
となっていたものをデタッチ→アタッチすると
新しいサーバ
+レプリケーション
+ローカルパブリケーション
+ローカルレプリケーション
+[testdb2] - [oldserver].[testdb]: [test]
となりました。
ローカルパブリケーションを新しく作成しようとした際に、
>>178のエラーが表示されました。
いろいろ試した結果、データベースのデタッチ→アタッチではなく、データのコピーのみを行うことによって
ちゃんとパブリケーションを作成することができました。
>>188 ああ、なるほど。
デタッチ/アタッチしてコンピュータ名とかが変わってるのにレプリケーションの情報が古かったのね。
そういうときは sp_removedbreplication して設定を全部消せばいいと思う。
>>189 ありがとうございます。
sp_removedbreplicationをしたほうが、早く移項できました。
なんだ、こんなとこよりPASSJの方がレスついていいじゃん
SQLServer 7.0と2005の間でレプリケーションって
組めるのかしら?
2005のGUIから7.0に繋がらんっす
GUI繋がらないとなると
T-SQL手打ち?
>>196 SQL Server 2000/7.0 のクライアント ツール (Enterprise Manager) をインストールするか、osql/isql/sqlcmd を使って T-SQL コマンドを実行する。
Enterprise Manager も SSMS も UI で操作されたら T-SQL コマンドを実行しているだけなので、何を使おうがデータベースから見ればやってることは一緒です。
初心者で申し訳ありません。2005のレポーティング機能について学習しているのですが、
何かおすすめの書籍やサイト等、ありませんでしょうか?
機能についてと、外部アプリからの連動について詳しいと有難いです
>>199 早速ありがとうございます。参考にさせていただきます
アプリケーションがどのテーブルを利用しているのか
調べようとしてます。
SQLプロファイラで監視して中身見ればどのテーブル利用したか
解析可能ですか?
システムDBとユーザDBどちらを使ってるかまでわかれば
尚よしなのですが。
>>201 まずやってみて、それで自分の期待したものが取れなかったらまた来てください。
質問です。
VB.NETでSQLデータベースのテーブルを
検索・選択することには成功しました
その上で、選んだデータベースの中の列名をプログラム上で
検索するにはどうしたら良いでしょうか?
列名や行の場所をそのまま打ち込んで中のデータ習得には成功しているのですが・・・
へ?
>>203 多分、いまはカラムをインデックスで指定しているけども、列名で指定したいっつー質問なんだろな。
で、それは SQL Server じゃなくて ADO.NET の質問だからこっちで聞いてくれ。
http://pc11.2ch.net/test/read.cgi/db/1104630889/ あと、今どうやってるかと、何の本/サイトを見て今まで知識を得たか書いた方がいいぞ。
例えば SQLClient.Connection.なんたらのなんとかメソッドとかプロパティを使ってるとか、な。
まあ、コードを貼ってもらえればいいんだが、よけいなところは取り除くんだぞ。
sp_columnsって話じゃね?
ADO.NETでWindowsアプリ作ってるけど
>>203の質問がサッパリ理解できない
208 :
205 :2007/06/04(月) 22:05:49 ID:???
俺も正直わからんよw
本音を言えばまず隣の席の人と話してみ?と言いたいww
>201です。
やってみました。
取れてたトレース内容の一部が以下です。
RPC:Completed 11
2007-06-01 19:13:59.623 declare @P1 int
set @P1=180150055
declare @P2 int
set @P2=1
declare @P3 int
set @P3=4
declare @P4 int
set @P4=1
exec sp_cursoropen @P1 output, N'SELECT
ID,COMPGUID,STNAME,SQLNAME,STFLAGS,STMAXID,CLASSCAT,CLASSID,OBJCAT,OBJSTID,OBJPLCAT,OBJPLSTID FROM CTABLES WHERE ID = @P1', @P2 output, @P3 output, @P4 output,
N'@P1 int', 70
select @P1, @P2, @P3, @P4
他にも色々あったのですが、とりあえずこれだけ抜き出してみた時に
以下はあってますか?
・テーブルはCTABLES
・declareで変数を定義
・setで代入する値を定義
不明点は
・テーブルCTABLESはmasterDBとユーザDBの両方にあるのでどちらかわからない
・テーブルの中を見てもレコードが更新されているようには見えない。
declareがあるやつはみんなレコード更新されているかと思ったのですが
exec sp_cursoropen以降の分を読み解けてないですか?
>>209 アタマイタイ・・・
> declareがあるやつはみんなレコード更新されているかと思ったのですが
なんでそう思ったの?
> exec sp_cursoropen以降の分を読み解けてないですか?
ストアドプロシージャって知ってる?
Books Online って知ってる?
MS SQL Server 2000 で重複データの削除を行いたいのですが、処理が遅く困っています。
現状
Delete from TblA
Where
exists ( Select * from TblB
Where
TblA.Key1 = TblB.Key1 and
TblA.Key2 = TblB.Key2 )
Insert into TblA
Select * from TblB
TblAとTblBはまったく同じ構造です。
最終的に、TblBの内容をTblAにInsert(同一キーはTblBの内容に上書き)できれば良いのですが、
なにかよい方法はないでしょうか。
Delete TblA from TblB
Where
TblA.Key1 = TblB.Key1 and
TblA.Key2 = TblB.Key2
とも書けると思うが、インデックスはちゃんとついてるんだろうな?
>>212 さっそくのアドバイスありがとうございます。そういった書き方があったのですね。
早速試してみたいと思います。
ごめん、教えてほしい。
SQLsever2005でテーブル上で定義できるフィールドの数っていくつまでだっけ?
2000だと255だか254のはずなんだが。
>214
1000くらい。
SQLServer2000でも同じ。
フィールド数の上限よりも先にレコードのサイズの上限に引っかかるわけだが。
216 :
NAME IS NULL:2007/06/06(水) 20:30:29 ID:CRQWegaj
すみません、教えてください。
SQLserver2005でバックアップしたDBを
下位のSQLserver2000にリストアできるのでしょうか?。
>>216 > SQLserver2005でバックアップしたDBを
> 下位のSQLserver2000にリストアできるのでしょうか?。
できません
220 :
NAME IS NULL:2007/06/08(金) 15:42:13 ID:nSaiK7ce
Access から SQL Serverへアップサイジングしたが、
動作がより緩慢になってしまった。。
VB6アプリとAccessのクラサバで10-20人程度で利用していた時は、
20万件程度の蓄積データがあったんだけど、2〜3秒掛からない程度で
データ登録や検索とかが出来ていたんですが、MSSQLになって、
これが4〜5秒、酷い所では7〜8秒掛かるようになってしまった。。
変更後はこの様になっています。
以前:Access→VB6アプリ
現在:MSSQL→Access(リンク/クエリ)→VB6アプリ
あんまりMSSQLに関して詳しく無いので、当りが付けられません。
Accessからの移行で遅くなった場合、どこら辺に問題ありそうか
教えていただけないでしょうか?
>>221 お宝文書ありがとう御座います。
まだざっとしか読んでいませんが、非常に参考になります。
これはちょっと根が深そうで、ちょっとした修正では駄目かも
知れないですね。。。ぁぁ
テストで作った同じ内容の普通のクエリとパススルークエリを
比べてみると明らかにパススルークエリの方が遅いんですよ〜。
(参照はありますが、計算もしていない簡単な構文です。)
本当DBって難しい。
>>219 コボラを馬鹿にしてるおまえは、無教養禿げ、氏ね
224 :
NAME IS NULL:2007/06/08(金) 21:01:03 ID:DbmSpgZ2
超初心者からのSQL SERVER 2000について質問です。
機密情報(社員情報)が格納されているテーブルに
悪意を持ったユーザがアクセスした場合に(ADO、o-sql、
ODBC等のツールを使用して)、Windowsのイベントログへ
警告を出力させたいのですが、どのような設定が必要で
しょうか?
よろしくお願いします。
>>224 悪意を持ったユーザーとそうでないユーザーをどうやって見分けるつもりなの?
あなたは悪意を持ったユーザーですか?(y/n)
>>222 そりゃ、一個やることが増えたんで遅くなるのは当たり前じゃないの?
単純な処理の場合、接続の方がコストがかかるので、接続が増えたら遅くなるでしょ。
SQL Server に命令が来てからそれを返すまでどれくらい時間がかかってるかは SQL プロファイラで調べられるよ。
228 :
224:2007/06/08(金) 22:58:57 ID:DbmSpgZ2
>>225 コトバ足らずですみません。
「悪意をもったユーザ」というよりは、クエリアナライザ等、
SQL SERVERの機能以外を使用して、機密情報テーブルへアクセス
するユーザのことです。
何卒、お知恵の拝借をお願いします。
>>228 素直にSQLServerが使用するポート以外閉じておけば?
>>220 つーかVB6からMSSQL直接叩けよ!
リンクなんかしてると移行した意味ねーじゃん!
>>228 osqlやクエリアナライザは正当なSQLServerのクライアントなのだが。
専用クライアント以外は繋がせたくないってことであれば
うちは定期的にsp_who2をかけて所定のアプリ以外の接続があったら
管理者に警告メールが来るようジョブを作ってた
>>228 アプリケーション ロールを使え。
あと、言葉たらずじゃないよ。足りないのは知識です。
"SQL Server 2000 でいってみよう" くらい読めよ。簡単なんだから。
233 :
228:2007/06/09(土) 18:22:40 ID:Y7nuDHpZ
234 :
NAME IS NULL:2007/06/12(火) 12:04:52 ID:3CcBW2In
Enterprise Manager(DBは2000)の管理−プロセス情報と見ると、地球のマークが
光っているプロセスIDが20件程度あり、その中で状態がrunnableで待機時間が9000000を
超えている物もあります。
待機の種類はNETWORKIOとなっており、CPU/メモリも多少使っている様子です。
ただ、ブロッキングなどはされていない様です。
この「状態がrunnableで待機時間が9000000」と言うのは、どういう状態で
起こっている事なのでしょうか。
何か情報を持っている方、教えてください。
よろしくお願いします。
>>234 気にするな。プロセス ID 50 以下はシステムが使ってるものだから、初心者は気にしなくていい。
どうしてもっつーんなら、select * from master..sysprocesses の結果をテキストでさらしてマターリと待て。
236 :
234:2007/06/12(火) 12:32:24 ID:???
>>235 ありがとうございます!
とりあえずは、気にせず突っ走ります。
237 :
使えない子:2007/06/14(木) 06:30:10 ID:???
オハヨウゴザイマス〜助けてください〜(´Д`;)
SQL Server 2000で、
「バックアップを”サイクリックに”とる方法を調べて」
と指示され、[SQL Server バックアップ サイクリック]等の組み合わせで
検索して片っ端から探したつもりなのですが、どうしても見つからないです〜
どなたかお力添えを〜(´人`;)
238 :
NAME IS NULL:2007/06/14(木) 06:46:47 ID:696P34JJ
>>237 バックアップの定期スケジューリングを設定すればよいのでは?
・・・そんな簡単なコトじゃないのかな?
239 :
237:2007/06/14(木) 09:01:59 ID:???
>>238 お返事ありがとうございます〜(´Д`;)
例えば毎日のバックアップで、
バックアップファイルを日付で管理して1ヶ月サイクルで上書きしていく、
(つまり、常に今日から1ヶ月前までのバックアップが残る)
というような方法をとりたいのです。m(_ _)m
バッチファイルかSPを書かないと無理じゃないかね
241 :
237:2007/06/14(木) 10:04:47 ID:???
>>240 あわわ、なんだか難しそうですね(゚Д゚||)
こんな方法を考えてみました。
Enterprise Managerを使ってスケジューリングし、
例えば1週間分のバックアップをサイクリックにとるとしたら、
1週間おきにバックアップをとるスケジュールを7つ設定して、
それぞれ違う曜日に発動するようにする、
といった方法で・・・1ヶ月のサイクルだと31個も作るので
大変だとは思いますが・・・これで実現できるでしょうか・・・?(´Д`;)
242 :
237:2007/06/14(木) 10:45:22 ID:???
たびたびすみません!!!!
データベース保守計画ウィザードというので目的は解決したっぽいです。
が!
ウィザード終了時にSQLSERVERAGENTサービスが停止されたのですが、
これはほっといても、スケジュールの時間が来れば自動的に起動するのですか・・・?
管理ツールでサービスをみると、「手動」になっているのですが・・・。
ほんと、
使えない教えて君っ子ですみません。m(_ _)m
自分で起動すればいいじゃない
244 :
237:2007/06/14(木) 11:18:54 ID:???
>>243 りょ、了解です〜!!
とりあえず開始してみました!
無事動きますように・・・ナムー (-人-)
SQL Server Agent は設定した時間が来ても自動的には起動しない。
だからスタートアップの種類を自動に変更しなければならない。
SQL Server Agent が起動されていなければ、設定した時間が来てもジョブや保守計画は実行されない。
説明乙
でも、手動って、そういうことでしょ?
自動で起動することをそもそも手動とはいわない
SQLServer2005の64bitの導入を検討してます。
現行 クライアント:VB6 + ADO2.7 サーバー:Windowsk2003 + SQLServer2000 32bit
で運用しているのですが、SQLServer2005の64bitに移行して、アプリ変更無しで動くのでしょうか?
サーバーはSQLServerのみでVB6のアプリを動かすことはありません。
愚問ですが、どなたかご教授ください。
>>247 動きますけど何を心配しているのですか?
こういうことのために "プロトコル" というものがあるのです。
Web サーバーが 64bit だからって、ブラウザと Web サーバーの通信は HTTP で変わりません。
それと同様、データベース接続ドライバとデータベース間ではプロトコルがあり、通信を行っています。
極論すればデータベースとクライアント間では SQL 文字列を送って結果をもらってるだけで、
さほど複雑なことをやってるわけではありません。
249 :
111:2007/06/19(火) 06:22:32 ID:sP4zNuhP
>>125 返事が大変遅れて申し訳ありません。
mdfをアタッチしてsqlcmdで実行してみたところ、意図したとおりの動作をしてくれました。
ただし、VS2005で実行してみるとやはり該当する行がないと怒られます。
プログラム内から呼び出してもやはり意図したとおりには動かないので、
インターフェースがうまくいってないのかもしれません。
たとえば、タグ一覧を表示する以下のストアドプロシージャは
該当する行はないと言っておきながら、@@ROWCOUNTだけは意図した通りに
返ってきます。
SELECT Tags.*
FROM Tags
RETURN @@ROWCOUNT
ADO.NETとかのバグなのだろうか…
250 :
111:2007/06/19(火) 06:23:24 ID:???
あ、あげてしまった。
>>249 普通に考えてVisualStudioのバグか制限だろ
252 :
NAME IS NULL:2007/06/19(火) 10:07:42 ID:8pVDjV9H
SQL Server 2005に入っているテーブルの定義書を
エクセルファイルなどに出力する機能は、SQL Server自体に
存在しますか?あったら、教えて下さい。
>>252 ない。うちの社内でそういうツールを作ってた人がいたんで、フリーウェアであるんじゃない?
254 :
NAME IS NULL:2007/06/19(火) 10:16:09 ID:8pVDjV9H
255 :
254:2007/06/19(火) 10:17:02 ID:???
>>249 オレだったら問題を再現させるプログラムを作ってMSDNで問い合わせるなぁ。
多分ドライバじゃなくてクラスの挙動がおかしいんで、ASP.NETじゃなくてフォームでも同じ問題がおきるだろうから、つくるのは簡単だろ。
自分でできることはとりあえず.NET FrameworkのSPを最新にして、hotfixをさがす、かな。
257 :
NAME IS NULL:2007/06/19(火) 11:32:40 ID:8pVDjV9H
SQL Server 2005 で
サーバー間で実データはコピーせずに、テーブル構造だけ
コピーしたいのですが、テーブル単位ではなく、DB単位で
コピーする方法を教えてください。
258 :
NAME IS NULL:2007/06/19(火) 15:04:34 ID:BokQHzhb
質問です
現在の日付から20日以内のものだけセレクトするSQL文を教えてください
>>257 Management Studio を SP2 にしてデータベースを右クリック→タスク→スクリプトの生成
>>258 -- 今から 20 日前の日時を返す
SELECT DATEADD(day, -20, GETDATE())
-- YourTable.DateTimeColumn が 20 日前〜現在の行を返す
SELECT * FROM YourTable WHERE DateTimeColumn BETWEEN DATEADD(day, -20, GETDATE()) AND GETDATE()
丸めは自分で調節してください。
261 :
NAME IS NULL:2007/06/19(火) 15:26:16 ID:BokQHzhb
ありがとうございます
262 :
NAME IS NULL:2007/06/19(火) 15:44:09 ID:8pVDjV9H
>>259 ありがとうございます。うまくいきました。
263 :
NAME IS NULL:2007/06/19(火) 20:02:44 ID:vSZN4us0
>>220 >Access から SQL Serverへアップサイジングしたが、
>動作がより緩慢になってしまった。
私の会社で移行しましたけど、かなり動きが速くなりました。
クラスタ化インデックスと非クラスタ化インデックスの違いとかわかりますか?
その辺りの設定をしないといけないのですが…。
後はACCESSのクエリー(SQL)の見直しですね。
特定のクエリーで止まっている可能性もあるので
それを一つ一つ潰していけば速くなりますよ。
264 :
263:2007/06/19(火) 20:17:43 ID:vSZN4us0
ACCESSの「インデックス」と言うと一つの設定しかないから見逃し易い。
あと途中のレスでもあるけど、VB6から直接SQL SERVERに接続すると
速いです。ACCESSのODBC経由だと遅くなりがち。
そもそもACCESS自体が重い。
265 :
111:2007/06/21(木) 14:48:58 ID:???
ありがとうございました。
なぜだかよく分からないのですが、いろいろ触っているうちに動くようになりました。
確実な原因は二つあったみたいです。
まず、IDEの問題。これはIDE側の右クリック→実行ではuniqueidentifier型
のフィールドを含むデータを表示できなかったようです。(バグか仕様かは分かりませんが)
これは後でMSに報告しておこうと思います。
もうひとつは、データを取得するコードが間違っていたようです。
ただこれがちょっと腑に落ちないのですが(ほかの場合はちゃんと動作する
コードなので)、それはともかくDataGridを使用すると正常に取得できる
ことを確認しました。
みなさんのご協力に感謝します。大変助かりました。
ビチビチウンコ ビチビチウンコ ビチビチウンコ ビチビチウンコ
ビチビチウンコ ビチビチウンコ ビチビチウンコ ビチビチウンコ
ビチビチウンコ ビチビチウンコ ビチビチウンコ ビチビチウンコ
ビチビチウンコ ビチビチウンコ ビチビチウンコ ビチビチウンコ
ビチビチウンコ ビチビチウンコ ビチビチウンコ ビチビチウンコ
ビチビチウンコ ビチビチウンコ ビチビチウンコ ビチビチウンコ
ビチビチウンコ ビチビチウンコ ビチビチウンコ ビチビチウンコ
267 :
NAME IS NULL:2007/06/23(土) 03:29:32 ID:Pc5ke7Ie
すんません、updateの副問い合わせについて質問なんですが。
update a2 set rank =
(
select
count(*)
from
aa as a1
where
〜
)
from aa as a2
どんな意味なんでしょうか?('A`)
268 :
NAME IS NULL:2007/06/23(土) 10:36:11 ID:W8GXpRZs
プロファイラについて初歩的な内容を教えてください。
フィルタによる複数の項目を条件により絞込みをする場合、
AND条件なのかOR条件なのか、どちらなのかを教えてください。
実際に試してみると、AND条件のような気がするのですが、
裏付け(BOOKS ON LINE等)がないので質問いたしました。
どなたか、教えて頂けませんか?よろしくお願いします。
269 :
NAME IS NULL:2007/06/23(土) 10:38:43 ID:Qpvn0v6w
>>267 テーブル aa のフィールド rank の値をサブクエリの結果で更新する
271 :
267:2007/06/24(日) 10:09:36 ID:uWxZr8d/
>>270 すんません、書き方が悪かったです。
where句がサブクエリの中にしかないのですが。
これって全件更新になってしまわないのでしょうか。
どうも、ある条件で更新されているようではあるのですが。。
274 :
267:2007/06/24(日) 20:15:48 ID:???
サブクエリ内の抽出結果は0〜複数件がありえます
ちなみに現行では0件しか出てないみたいですが。
複数件抽出された場合どうなるんですかね。
サブクエリ内の条件で抽出した結果でそのサブクエリ内の条件に一致するレコード更新が行なわれているとすれば
納得いったのですが。。
やっぱり違ったんでしょうかね。。
明日一日悩むことになりそう( ´Д` )
select count(*)
↑なら常に1件しか返さないはずなんだが質問の条件をわざと隠して聞いているのか?
276 :
267:2007/06/24(日) 23:06:11 ID:???
ああ、count(*)だから1件ですか
そうですね、、1件ですね。<勘違いしてました
つーことはやっぱ全件更新なんですよね。
ありがとうございます。もっかいソース解析しなおします(つA`)
職場の隣の席の女子が定時を過ぎて
「まだ帰らないんですか」とか「今日は帰りが遅いんですか」とか
「今日はこのあと用事あるんですか」とか「おなか空きましたね」とか
やたらと言ってくるから、じゃあ呑みにでも行きますかって言ったら、
「あ、私、習い事があるんで無理です」って言われて、ビックリした。
一瞬なにが起きたのかわからなかった。
横断歩道で青信号だと思って渡ろうとしたらトラックにはねられた人の気持ちになったわ。
質問です
SQL Server2005で 作成済みテーブルの
Create Table を取得できるクエリってありませんか?
ストアドなら
select definition from sys.all_sql_modules
where object_id = (
select object_id from sys.objects where name = 'ストアドの名前')
とかで取れるんですけど。。。
>>279 まねずめんとすたじおでテーブル右クリ-編集
ただし最新版じゃないと編集ってのがでてこない
PGなんかビチビチウンチ
PGなんかビチビチウンチ
PGなんかビチビチウンチ
PGなんかビチビチウンチ
PGなんかビチビチウンチ
PGなんかビチビチウンチ
PGなんかビチビチウンチ
PGなんかビチビチウンチ PGなんかビチビチウンチ PGなんかビチビチウンチ
PGなんかビチビチウンチ
PGなんかビチビチウンチ
PGなんかビチビチウンチ
PGなんかビチビチウンチ
PGなんかビチビチウンチ
睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸
睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸
睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸
睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸 睾丸
SQLServerを弄りはじめているのですが、
SQL構文が今まで使ってきたDBと若干違うため、
戸惑っています。
Transact-SQLの構文リファレンスの書籍があったら
教えてください。
>>284 情報ありがとうございました。
最高の情報です。
286 :
NAME IS NULL:2007/07/02(月) 00:34:29 ID:+ZeJbjhI
すいません質問です
データベースをテーブルを使って入力しているんですが
入力時にデータがTITLE順に並んでいるのをLocation順に表示させたいのですが
どうすればよいのでしょうか
>>286 お前が使ってるシステムの詳細は誰も知らないんだから
知らない人間に分かるように質問してくれ
288 :
NAME IS NULL:2007/07/02(月) 01:26:58 ID:+ZeJbjhI
これ以上どう説明していいのやらわからないんです><
それじゃ答えようがないです><
まずは同じ職場の人に聞いてみることだな。
Locaton順にソートさせればいいよ!
>>286 TITLE欄にLocationも一緒に入れれば?
01:XXXXXX とか。
select * from hoge
order by Location
294 :
NAME IS NULL:2007/07/03(火) 00:41:36 ID:tgazdh0o
>>293さん
多分、286さんから、追加注文来るよ。
他のフィールドは降順にしたいとか・・・。
SQLすら書けなさそうだから問題ない
296 :
286:2007/07/03(火) 01:49:51 ID:JK2HUr+d
ふおーもう駄目じゃあああ><
297 :
286:2007/07/03(火) 02:26:12 ID:JK2HUr+d
と思ったら
>>293の通りにやったらできた!ありがとうごましました!
298 :
293:2007/07/03(火) 10:04:25 ID:???
皮肉のつもりで書いたのだが、
それで正解なのかよw
286、今年からDB触り始めた新入社員にしても少し成長が遅い気が...w
300 :
NAME IS NULL:2007/07/03(火) 16:23:24 ID:WJx9EhHL
>>300 dummiesは可もなく不可もなく。
斜めに読んだ感想。
というか、目的がわからんからアドバイスできんわな。
>>300 SQL Server 2005 自習書シリーズ
http://www.microsoft.com/japan/sql/techinfo/selfstudy.mspx この次は Books Online の最新版をダウンロードして、チュートリアルを一通りやる。
インデックスや統計情報などについては "SQL Server 2000 でいってみよう" と Books Online で問題なし。
SQL Server 2005 については正直いい本が出てない。基本さえわかれば Books Online と MSDN フォーラム、それでもわからない場合はサポートを使ってる。
SQL Server 2005 ビギナーズガイドとインサイド SQL Server 2005 はまだ目を通してないけど、今のとこ不自由はしてません。
>>303 質問した人じゃないけどサンクス!
SQLSERVER使いまくりのプロジェクト入って途方にくれてた・・・orz
まあ、管理しないから接続とsql書ければいいんだけど念のため準備しておかないとね。
SQL質疑応答スレ(
http://pc11.2ch.net/test/read.cgi/db/1176553195/391-397)で質問させていただいた者です。
実行する環境がSQL Serverなため、こちらでも質問させてください。
下記2つのViewから
View_受注残(主キーに該当するのは注文番号&分納番号)
得意先名/需要先/手配番号/分納番号/出荷品番/出荷数量
----------------------------------------------
あ / /001/00 /a /57000
あ / /001/01 /a /114000
・
View_在庫・2次加工中一覧(主キーはロットNo。工程識別コードは1220が在庫。数字が大きいほど在庫に近い工程)
ロットNo/品番/工程識別コード/工程数量
-----------------------------------------------
1000001/a/1220/712
1000102/a/1220/38000
1000302/a/1220/712
1000401/a/1220/15373
1200505/a/1220/1084
1200601/a/1220/5164
1200702/a/1220/1481
1200805/a/1120/48550
1300902/a/1120/49171
1401001/a/1120/49919
1401105/a/1020/49536
・
下記みたいな
得意先名/需要先/手配番号/分納番号/出荷品番/出荷数量/ロットNo/ロット必要数
----------------------------------------------
あ / /001/00 /a /57000/1000001/712
あ / /001/00 /a /57000/1000102/38000
あ / /001/00 /a /57000/1000302/712
あ / /001/00 /a /57000/1000401/5373
あ / /001/00 /a /57000/1200505/1084
あ / /001/00 /a /57000/1200601/1164
あ / /001/01 /a /201600/1200601/4000
あ / /001/01 /a /201600/1200702/1481
あ / /001/01 /a /201600/1200805/48550
あ / /001/01 /a /201600/1300902/49171
あ / /001/01 /a /201600/1401001/49919
あ / /001/01 /a /201600/1401105/48479
データがほしいのですが、文頭リンクの回答SQLを上記2つのViewに当てはめた場合、どのように書き直せばよろしいでしょうか?
また、そのSQL文はSQL Serverで実行可能なものなのでしょうか?
皆様のお知恵を拝借いたしたくよろしくお願いいたします。
「こちらでも」って、向こうの質問取り消さなきゃただのマルチだろ
307 :
305:2007/07/04(水) 00:03:03 ID:???
あちらのスレでは一応、質問を閉めたつもりだったので・・・
誤解しやすい文章で申し訳ありません。マルチと思われ気分を害されていたらすみませんでした。
しっかし、関係者が見たら自分のとこのヤツが聞いたとわかってしまいそうなこんな聞き方していいのかよ。
しかも向こうのスレでレスいっぱいもらってるのに、レス番をを示しもせずにそれを自分とこに使うやり方を教えてくれって
レスをまったく理解しようとしてないだけじゃん。詳しくは向こうのスレを熟読してくださいってか。
つまり答えとなる SQL を書いてくれ、即ち自分の仕事を代わりにタダでやってくれってことだろ。ふざけんな。
自分とこの職場の先輩に「わからないので教えてください」っていうのが先じゃねーの。
そうそう目くじらたてる程のことでもないだろ
と言いつつ一切答えを示さないおいら
>>311 そんなことに頭と時間を使いたくないのはお互い様
質問すら読んでません><
314 :
305:2007/07/04(水) 15:11:09 ID:???
何度も不愉快な思いをさせてしまい、本当に申し訳ございません。
帰ってきたSQL質疑応答スレ(
http://pc11.2ch.net/test/read.cgi/db/1176553195/395-394)で質問したところ、
>305のView_受注残とView_在庫・2次加工中一覧からほしい形式を取り出すのに下記SQL文を実行する必要があるらしいのですが、
SELECT T3.*,T4.製造日番 FROM
(
SELECT *,
COALESCE((SELECT sum(製造数量) FROM 注文テーブル WHERE 製造日番<T1.製造日番 AND 製造品番=T1.製造品番),0)AS ptotal,
COALESCE((SELECT sum(製造数量) FROM 注文テーブル WHERE 製造日番<=T1.製造日番 AND 製造品番=T1.製造品番),0)AS ntotal
FROM 注文テーブル AS T1
) AS T3
FULL JOIN
(
SELECT *,
COALESCE((SELECT sum(注文数量) FROM 進捗管理テーブル WHERE 注文番号<T2.注文番号 AND 注文品番=T2.注文品番),0)AS ptotal,
COALESCE((SELECT sum(注文数量) FROM 進捗管理テーブル WHERE 注文番号<=T2.注文番号 AND 注文品番=T2.注文品番),0)AS ntotal
FROM 進捗管理テーブル AS T2
)AS T4
ON (T3.製造品番=t4.注文品番 )
WHERE T4.ntotal BETWEEN T3.ptotal AND T3.ntotal
OR T4.ptotal >T3.ptotal
ORDER BY T4.注文番号;
私には上記sql文が高度過ぎてどこをどのように書き換えたらよそしいのかさっぱり判断がつきません。
sql文に強い人間が身近にいないため、聞くにも聞けず本当に困っています。皆様助けてください。
皆様よろしくお願いいたします。
>>314 たぶんだが、おまいに今の仕事はむいてない。
>>314 大丈夫だ。中身読んでないから不快な思いしてない。
Management Studio のオブジェクトエクスプローラの詳細で
作成日時に時間が表示されてませんが、表示するやり方
はあるんですか?
>>314 言葉遣いは丁寧だがすげー DQN なレスだな。これほどのは久しぶりに見た。
SQL 文とかそういうの関係ないから。とりあえず周りと相談しろ。この状態じゃこんなとこで答えられん。
>>314 SQL以前に自分がやりたい事をテーブルレベルで考えろ。
で、そいつをストアドにしてしまえ。
どうせSQLひねくりまわした事やったってその職場ではメンテ不能なんだから
だれでも理解できる確実な方法をやればいいだろ。
パフォーマンス?そんなのマシン買ってもらえ。
職場全体の教育コストよりは安いから。
と、質問内容を見ないでカキコ
321 :
305:2007/07/06(金) 19:14:27 ID:???
皆さんにここまでいわれるとは思っても見ませんでした・・・
勉強を一からしなおしてきます。
スレを汚してしまいして申し訳ありませんでした。
322 :
NAME IS NULL:2007/07/06(金) 22:16:24 ID:o79f8M8u
テーブルの内容をINSER文のSQLでエクスポートする方法はないですか。
エクスポートしたあと、SQLを一部修正して複数のDBへINSERTということをしたいのです。
PHPMyAdminのエクスポートみたいなことをしたいのですが。
>>322 そんなことしなくても、SQL Server 2000 には DTS、2005 には BI という機能があります。
もしくは BCP を使う。ネイティブ モードでエクスポート/インポートしてバッチファイルでインポートすればよし。
>>321 仕事か勤務先を変えた方がいいと思われ。
素人に一人で仕事させる会社なんか信用できん。
素人というか、そもそも問題の意図がどこにあるかがさっぱり解かってない
相手にはその質問のどこに問題があるかを指摘してやらにゃ解からないだろうに。
おまいら、ほんと心がねぇよな。
いくら頭が賢くても、心ない人間は付き合いたくない人種だぜ。
いまさらだが
>>305 の質問では、
得意先or需要先とロットbフ関係がさっぱり解からんのよ。
あと、ロット必要数の定義ね。
君の質問だけど、
僕、足立区に住んでて、
足立区にはこれとこれとこの町があるんだけど、
これだけの情報で、僕のお母さん探してくれませんか?
って言ってるようなもの。
それじゃ分かる訳ないなってな感じなのかね。
このような質問の仕方だけで、自身がまだ質問できるレベルに達していないと解かる。
で、たぶんそこが解かれば、SQL自体はそんな難しくないはずだから解かるんでないかな。
いまさらと思うが・・・
328 :
327:2007/07/09(月) 23:46:27 ID:???
亀レスで終わった話題を蒸し返すなよ
バックアップについて質問です。
週に1回全体バックアップ、1日に2回差分バックアップ、
30分に1回トランザクションログバックアップを取るように
バックアップ計画を立てています。
この場合、トランザクションログのバックアップは最大12時間分
残しておけばよいので、SQL Serverエージェントのジョブの設定も
そのようにしたいのですが、方法がわかりません。
具体的には、LOG.BAKファイルの増大を抑えるため、LOG.BAKの
中身が12時間(24回)分のバックアップでローテートされるように
したいのですが。。。
ご教授お願いします。
>>331 データベース保守計画ウィザードを使う。
SQL Server 2005 ならメンテナンス プラン ウィザードね。
333 :
かなかな:2007/07/13(金) 20:51:56 ID:UixSmPfQ
お世話になります。
SQLServer2000StanderdにACCESS2000ADPからADO接続しています。(古い構成ですが)
お聞きしたいのはインスタンスのことです。
現在のSQLServerは既定の構成(インスタンスなし)でセットアップしたものですが、
これに対してACCESSより接続を行うとエラーとなります。
接続文字列は以下のとおりです。
Provider=SQLOLEDB.1; Data Source=HOGEHOGE_SRV; Initial Catalog=HOGE_DB;
Persist Security Info=true; user id=sa; password=****
エラーは「SQLServerが存在しないか、アクセスが拒否されました」です。
で、実はインスタンス名を付与してセットアップを行ったSQLServerがもう一台あって、
そちらに同様の接続文字列で接続するとつながるのです。
データソース名のみ変えています。(Data Source=HOGEHOGE_SRV\INS01 のように)
ACCESSのADPのファイルメニュー−接続で表示されるデータリンクプロパティを
使うと、インスタンス名のありなしに関係なく接続できてしまいます。接続できないのは
ACCESSのVBAで記述したADO接続で、インスタンス名なしのサーバにつなぎにいった時だけです。
すでに行き詰っております。お知恵お貸しください。。
>>333 新規テキストファイルを作成して、ファイル名を test.udl とかに変えてダブルクリックしてみる。
そんでいろいろ設定して接続テストがうまくいったらテキストエディタで test.udl を開く。
それが接続可能な接続文字列で、適当に加工してプログラムに組み込む。
エラーの意味は、SQL Server が Listen していると思うポートにアクセス試行したけど、応答がありませんでした、という意味だ。
つまり既定のインスタンスであれば TCP 1433 番ポートなので、そこにアクセスを試みたけど応答が無かったという意味だ。
335 :
かなかな:2007/07/13(金) 22:09:52 ID:UixSmPfQ
>>334 早速ありがとうございました。こんな便利なやりかたがあるんですね。
接続文字列を貼り付けてみたところ、見事に接続されました。
というかサーバ名を1文字間違えていただけでした。ご教授の方法にて
作成した接続文字列と比較していなければもっと時間がかかったかも。
ありがとうございました。
1文字くらい違ってても多めにみろよコノコノ-
ってことですか・・・
初心者向けに、VB2003からパラメータ付きでSQL Server 2000 のストアドプロシージャを
呼び出すようなサンプロコードが書かれているようなページ無いでしょうか?
339 :
NAME IS NULL:2007/07/16(月) 20:32:21 ID:Bop8QnK9
亀レスだが。
>>181 Management Studio からデータベースを右クリック→タスク→データのインポートで CSV も Excel もインポートできる。
Management Studio Express ではできるかどうかわからん。
Management Studio Express のダウンロード先は
>>57 を参照してください。
また Express Edition で BI 系ツールを使うには、SQL Server Express Toolkit をインストールすれば使える。
初歩的な質問で申し訳ありません。
現在、SQL Server 2000でDBのパフォーマンスチェックを行うために、
SQL プロファイラを使用してDurationの値を監視しています。
ですが、TextDataが「-- network protocol: TCP/IP set quoted_identifier〜」
となっているものと(DurationはNULL)、TextDataがNULL(Durationがやたらと大きい)
のログの意味がいまいちよくわかりません。
上の二つはセットになっているようなので、トランザクションか何かの
時間を表してるのかなぁと思っていますが。
DBのレスポンスだけをチェックしたいのであれば上記の
「TextDataがNULL」のログについては無視してもかまわないのでしょうか?
>>341 気にしたこと無いわ。無視していいんじゃない?
たぶんそれクライアントからの DB への接続で、プーリングを使ってるから duration が大きいんでないの?
343 :
NAME IS NULL:2007/07/24(火) 08:42:33 ID:23CsOyc5
やっぱphpMyAdminのあるMySQLのほうが便利だよな。
344 :
NAME IS NULL:2007/07/25(水) 10:53:45 ID:hBYSx6Qt
SQL文で今日より以前の日を絞り込む方法を教えてください
CURRENT_TIMESTAMP
getdate()でもよかった
347 :
NAME IS NULL:2007/07/25(水) 11:53:31 ID:vso8Zt4w
Ver7 と Ver2005 は同じサーバ下でふつうに
お互い干渉することなく共存できますでしょうか?
接続ポートは異なる番号にするとして。
348 :
NAME IS NULL:2007/07/25(水) 11:56:10 ID:oKumoV+x
すまそ、ストアドプロシージャで
ネスト状態のトランザクションの一番外側のトランザクションをロールバックしたら
内側のトランザクションのコミットまでロールバックされちゃうんだけど、
内側のトランザクションのコミットだけを有効にする方法ってないでしょか。。
(別のコネクションを作って処理方法ってのは見つかったけど処理が遅そうなので、
それ以外でなにか方法ないでしょか)
ぶっちゃけストアドプロシージャのログをテーブルに書き込みたいんだけど、
ロールバックしたら書き込んだはずのログまでロールバックされちまうのよね。。
SQL Server2005っす。よろしくお願いしますm(_ _)m
349 :
NAME IS NULL:2007/07/25(水) 12:05:00 ID:VpzEkwc4
>>348 >(別のコネクションを作って処理方法ってのは見つかったけど処理が遅そうなので、
> それ以外でなにか方法ないでしょか)
これしかないね。
350 :
NAME IS NULL:2007/07/25(水) 12:25:51 ID:vso8Zt4w
>>348 方法論の話になるけど
内側のトランザクションってログを吐くだけ?
ならログを吐く前にトランザクションを解放すればいいのでは?
解かっているとは思うけど・・・
>>347の回答をお願いします。
351 :
348:2007/07/25(水) 13:20:00 ID:oKumoV+x
>>349 む、他に方法はないすか・・・ログ出力とかどーししてるんだろ。。
下の方法が無理だったら別コネクション作ってやってみるっす、ありがとです。
>>350 うん、それも考えたけど処理中には好きなだけログ出したいのん。
ストアドプロシージャの開発経験が無いからハマッたんだけど、
たいていはローカル変数にログを格納しておいて、一度トランザクションを終わらせたあと
全部出すって感じなんかな。
ちょっとこちらで実装試みてみるっす、ありがとです。
PS.バージョン違いのSQLServerのインストールはしたことないからわかんないっす、すまそ。
352 :
NAME IS NULL:2007/07/25(水) 13:53:15 ID:vso8Zt4w
>たいていはローカル変数にログを格納しておいて、一度トランザクションを終わらせたあと
>全部出すって感じなんかな。
ログを吐きたいときにROLLBACKしてローカル変数の
トランザクション解放フラグをセットして
で最後にそのフラグでCOMMITするかの判定をするの方が簡単かと。。。
>>どなたか347の回答をお願いします。
353 :
NAME IS NULL:2007/07/25(水) 14:00:51 ID:vso8Zt4w
あ、ローカル変数のフラグ持たなくても@@TRANCOUNT代用でいけると思う。
>>347 7.0 はインスタンスの概念がないから、2005 を名前つきインスタンスにすれば原理としては動く。
だがサポートはされてないので、サポートがほしければ移行をする。
355 :
NAME IS NULL:2007/07/25(水) 15:02:21 ID:vso8Zt4w
>>354 ちなみに、Ver7運用のWindows2000Serverへ2005運用のWindowsXP(個人PC)から
2005を引越させたかったのです。
移行コストと統合した場合のライセンス数の問題もあるので諦めがつきました。
ありがとお。
357 :
NAME IS NULL:2007/07/27(金) 03:48:54 ID:9Xf5xfZa
どなたか助けてください。
PDO_ODBC で SQL Server に接続するWEBサイトの更新をしなくてはならないのですが、
SQL Server のDBはJapanese_Unicode_CI_ASで中国語や韓国語も文字も入っています。
しかしなぜか、INSERT,UPDATE,SELECTの全ての処理で、文字コードをSJIS変換しないと
文字化けしてしまいます。PHPスクリプトは全てUTF-8です。
文字化けせずにINSERT,UPDATE,SELECTの処理を行う方法はあるでしょうか?
>>357 よくわからんけどあてずっぽうで言ってみる。 文字リテラルにNをつける。
INSERT INTO xx (hoge) VALUES ( N'Unicode 文字列' )
360 :
NAME IS NULL:2007/07/27(金) 07:03:46 ID:9Xf5xfZa
>>358 Japanese_Unicode_CI_AS で同じです。
Management Studio では中国語、韓国語の表示、入力可能なんですが。。
361 :
NAME IS NULL:2007/07/27(金) 07:05:15 ID:9Xf5xfZa
>>358 あっ、データ型は nvarchar です。
362 :
NAME IS NULL:2007/07/27(金) 07:21:23 ID:9Xf5xfZa
>>359 Nプレフィッスつけるとうまく行きます。
でもSELECT *時は自動的にSJIS変換されるようで、
SJISにない文字は?に置き換わります。
あと、INSERT, UPDATE時に文字リテラルにNをつけるのは
PDOのプレースフォルダでは使えないですね。
PDOのメリットが。。。
363 :
NAME IS NULL:2007/07/27(金) 07:59:57 ID:W4GUl2oG
bcp で image型の列に格納されている写真データを、文字形式でフィールド終端文字をカンマにして、
いわゆる csv ファイルとして保存した場合、正常にインポートすることが可能なのでしょうか?
SQL Server は全くの素人なので、MSDNのサイトを色々調べていたのですが、どうもよくわかりません。
どなたか教えて頂けませんか?
364 :
NAME IS NULL:2007/07/27(金) 11:00:11 ID:36Ve7Y87
>>364 これはしらんかった。試してみたらほんとにそうなるね。
これ多分 .NET Framework 2.0 のクラスにバグがあると思うんで、SQL Server の fix として直るか微妙だな。
.NET Framework 使ってない Enterprise Manager を使うか、VB6 か VBA で入力だけやるか、でとりあえず逃げるか・・・
>>363 bcp に -n オプションをつけてエクスポート・インポートしてみ?
>>362 php スクリプトのコードページが SJIS になってると思われ。
どうやって変えたらいいかはわからん。ASP なら @codepage=... で指定するアレ。
368 :
366:2007/07/27(金) 11:33:54 ID:???
369 :
NAME IS NULL:2007/07/27(金) 15:43:30 ID:9Xf5xfZa
>>367 コードページとはPHPでどう指定するのでしょうか?
mb_internal_encoding('UTF-8');
mb_language('ja');
だけでは不十分でしょうか?
>>369 その mb なんとやらはぐぐったところによると http レスポンスに対する文字コードの設定で、コードページとは違うんじゃないかな。
php は使ったことがないんでどうやってやるかはわからない。
371 :
NAME IS NULL:2007/07/27(金) 16:53:17 ID:9Xf5xfZa
357です。
皆さん、いろいろ助言いただきありがとうございました。
やはりPHPとSQL ServerではUTF-8でのやりとりは不可能なのかもしれません。
コードを全て書き換える覚悟で、MySQLやPGSQLも検討しないといけない
かもしれません。。。。つらいです。。
373 :
NAME IS NULL:2007/07/27(金) 19:54:44 ID:9Xf5xfZa
>>372 ありがとう。でもそのページはここに質問する前に確認してまして、
UCS-2,UTF-16での変換処理もテスト済みでした。
結果は、アルファベットのみのテーブル名まで文字化けして、
SQL文自体もエラーが出ます。
その点、UTF-8ならASCII互換なのでデータは文字化けしても
大丈夫なようです。
どの段階でSJISに自動変換されてるかがとても不思議です。
入出力時の文字コード指定なんかもあるのかな?
はあ、もう2週間以上も。。です。。
php pdo odbc と階層が深いからどこかで何かあるんだね。
OSとphpとodbcのバージョンを明記しとくれ。
このスレで答えられそうなのはodbcまでだべ。
375 :
NAME IS NULL:2007/07/27(金) 21:01:40 ID:9Xf5xfZa
>>374 ありがとう。なんかここ優しい人多いね。
Windows Server 2003 Enterprise Edition SP2
PHP 5.2.3 (IISはISAPI、バッチはCGIで)
ODBC 3.526.3959.0
よろしくお願いします!!!
376 :
NAME IS NULL:2007/07/30(月) 22:10:24 ID:G6kjI83w
378 :
NAME IS NULL:2007/07/30(月) 23:32:24 ID:m5/h5tTg
SQLServer2005Expressにクエリアナライザは無いのでしょうか?
ダウンロードサイトなどがあれば教えてください。
また、osqlで接続しようとすると下記のエラーが発生します。
------
C:\Documents and Settings\masuda>osql -U sample_user -P pass
[SQL Native Client]名前付きパイプのプロバイダ : SQL Server への接続を開けません
でした [2].
[SQL Native Client]ログイン タイムアウトが時間切れになりました
[SQL Native Client]サーバーへの接続確立時にエラーが発生しました。接続先が SQL Se
rver 2005 である場合は、既定の設定では
SQL Server がリモート接続を許可していないことが原因である可能性があります。
------
リモートの接続許可をしているのですが、何の設定ができてないのでしょうか?
ちなみに -d DB名 -S サーバ名の指定を入れてもだめです。
ユーザーはちゃんとDB接続の権限はあります。
>>378 あー・・・これでやってみ。
osql -S (local)\SQLEXPRESS -E
もしくは
osql -S (local)\SQLEXPRESS -U <user_name> -P <password>
381 :
NAME IS NULL:2007/07/31(火) 13:00:11 ID:Gabgbzj2
しょぼい質問だけど、SELECT文に数式書けないの?
たとえば「SELECT day(getdate()) = 30」とか。(TRUE または FALSEを受け取りたい)
あ、CASE〜WHENは使わずにです、ふと気になったんよね。
382 :
NAME IS NULL:2007/07/31(火) 19:01:12 ID:vAKxfwZu
SQL ServerでLIMIT OFFSET 句のようなものを最も簡単に
実現する方法はないでしょうか?
>>382 LIMIT に相当するのは SET ROWCOUNT または TOP/PERCENT 句
OFFSET に相当するのはわからん。無いと思う。
>>378のように2005で sqlcmd を使わない理由ってなんだろ? なぜ osql?
388 :
381:2007/08/01(水) 14:15:30 ID:wqqOJI35
389 :
NAME IS NULL:2007/08/01(水) 16:59:56 ID:03Q0U7a/
重いSQLを実行した時に1回目よりも2回目の方が実行時間が短いのですが、
これはキャシュか何かに残るからなのでしょうか?
もし、そうでしたら残らないようにできませんか?
2回目の実行時間を1回目と同じにしたいんです。
SQLServerのバージョンは2005です。
>>389 DBCC DROPCLEANBUFFERS
391 :
376:2007/08/01(水) 22:38:21 ID:???
>>377 ありがと
あの記事は誤りなんですね
業務使用の為Developer Editionはやめときます
BCPでやります
392 :
389:2007/08/02(木) 08:12:22 ID:???
393 :
NAME IS NULL:2007/08/02(木) 15:41:14 ID:d0YVhx1l
CURRENT_TIMESTAMPから-300秒した時刻を書き込みたい場合
どうすればいいでしょうか?
VB6+ADOでSQL Server 2005から10万行とか引っ張ってきてdatagridで表示してるんだけど
検索に時間かかってその間、何も表示されなくなっちゃうんだけど
結果を一気に受け取るんじゃなくて
だらだらと流されてくるのをそのままだらだら表示みたいなことってどうやったらいいんでしょう?
なんて検索したらいいのか検索キーワードもよく解らないんで
検索キーワードだけでも教えてください。
答えそのものずばりの方がうれしいけど
>>395 分けて読んでだらだら表示させればいいんじゃね?
最終的に10万行のレコードを一遍に見せられても
それを見る人間のほうが処理能力追いつかないと思うんだが・・・
398 :
NAME IS NULL:2007/08/06(月) 14:49:29 ID:/Tu3zhUl
更新トリガを使って更新履歴を履歴テーブルに出力しようとしてるんだけど
元のテーブルにtext型があるのでエラーになってしまう
いい回避方法を教えてください。
>>398 "元のテーブルにtext型がある" ので "エラーになってしまう"
↑この因果関係がわからんので説明してくれ。
それからエラーが出る時はそのエラー番号やらメッセージを正確に書き込んでくれ。
じゃないと何が問題でエラーになってるのかわからん。
400 :
goto:2007/08/06(月) 16:12:01 ID:P5Wj6Hsu
MSSQL Server がある日から突然、開始できなくなってしまいました。
サービスマネージャーで開始ボタンを押しても、すぐに停止してしまいます。
どなたかご教示をお願い致します。
イベントログ見ろ。
>>399 詳細を報告するのでお願いします。
更新履歴をとりためにトリガーを作成したいと考えてます。
INSERT INTO [HISTORY_LOGDATA].[dbo].[LOG]
(コメント)
SELECT
コメント,
FROM [Deleted]
のコメントがTEXT型で定義されている状況です。
このsqlを実行すると
サーバー : メッセージ 311、レベル 16、状態 1、プロシージャ D見積_HISTORY、行 71
挿入されたテーブルおよび削除されたテーブルでは、TEXT、NTEXT、および IMAGE 列を使用できません。
のえらーが出ます。
どうしたらいいのか教えてください。
>>402 ちゃんとマニュアル読めよ。
http://msdn2.microsoft.com/ja-jp/library/ms191300.aspx | SQL Server 2005 では、AFTER トリガ用の inserted テーブルおよび
| deleted テーブル内で text 列、ntext 列、または image 列を参照す
| ることを禁止しています。これらのデータ型は旧バージョンとの互換
| 性のためだけに用意されているものです。大量のデータのストレージ
| には、varchar(max) データ型、nvarchar(max) データ型、および
| varbinary(max) データ型を使用することをお勧めします。AFTER
| トリガと INSTEAD OF トリガでは、inserted テーブルと deleted
| テーブルで varchar(max) 型、nvarchar(max) 型、および
| varbinary(max) 型のデータがサポートされます。詳細については、
| 「CREATE TRIGGER (Transact-SQL)」を参照してください。
解決方法は別の方法で同じ機能を実装するか、コメント列の型を
text → varchar(max) / nvarchar(max) / varbinary(max) に変えるか、か。
SQL Server 2008 CTP ではまだ text 型は使えるけど、その次にはもうなくなりそうだな。
407 :
NAME IS NULL:2007/08/08(水) 17:18:10 ID:3I8cN/t6
sys.tablesより検索しておのおののテーブルのカウントを取りたいのですが、間違いだといわれます・・・
declare @name varchar(128)
declare curs CURSOR for
select name from sys.tables where name not like '[_]%'
open curs
fetch next from curs into @name
while @@fetch_status=0
begin
declare @count nvarchar(1024)
select @count=count(*) from @name ← ここが間違い
fetch next from curs into @name
end
close curs
deallocate curs
言われてみればもっともなんですが、文字列からテーブル型に代える手段ってあるんでしょうか?
>>408 やりたいことがわかりません。テーブルの "カウント" って何?
テーブルごとの行数を出したいんだろ
レコード数の意味でしょ。ソースは間違ってるけど。
>>408 > declare @count nvarchar(1024)
なんで、レコード「数」なのに文字列なんだ?
初心者なんだしょ。
415 :
NAME IS NULL:2007/08/16(木) 14:51:28 ID:9jbOvHpM
素人質問っす。
同じスキーマ内のユーザー定義ストアドプロシージャからユーザー定義関数を呼び出すときにもスキーマ名は必要っすか?
『'(ユーザー定義関数の名前)'は 組み込み関数名 として認識されません。』ってエラーが出ますのん。
同じスキーマ内なんだからいいじゃんって思うんだけど、なにかが間違ってる??
ちなみにユーザー定義ストアドプロシージャ作成時の CREATE文のストアドプロシージャ名には
スキーマ名は付けてないけど思い通りのスキーマにストアドプロシージャは作成されます。
(ためしにストアドプロシージャ名にスキーマ名を付けて CREATEしてみたりもしたけど同じエラーが発生)
416 :
NAME IS NULL:2007/08/20(月) 17:56:41 ID:ybUOpt+W
OracleのMERGE、MySQLのREPLACE構文の代替ってありますか?
>>416 if exists ...
update ...
else
insert ...
SQL Server 2005 Express を使っています。
バックアップを取っていない場合に、
レコードを削除してしまったら復活する方法はないのでしょうか。
419 :
NAME IS NULL:2007/08/24(金) 12:59:22 ID:6I2DLghf
>>418 それ、ゴミ箱から消したファイルを復活させたいってのと同じじゃね?
コミットしてなかったらロールバックで復活可能だが(w
420 :
NAME IS NULL:2007/08/24(金) 20:48:47 ID:Jo3vzugf
初心者すぎる質問で申し訳ないです。
ユーザーCALのユーザーってSQLSERVERのユーザー、Windowsのユーザー、
○○さんと××さんが使用するっていう自己申告のユーザーのうちどれを
指してるんでしょうか。MSのホームページみても理解できませんでした。
>>420 アクセスするユーザー数だけ必要。
対象システムの最大利用者数分購入する必要があるはず。
422 :
NAME IS NULL:2007/08/24(金) 22:42:47 ID:pk3uMvIo
SQLには、Webサーバ上のASP.NETプログラム経由でしかアクセスしない
場合でも、そのASP.NETの利用ユーザ数分だけCALが必要なのでしょうか?
(SQLサーバには、ファイアウォールで直接ユーザからのアクセスはできないようになっている)
>>422 直接アクセスできなくたって、SQL Serverを利用している事に変わりはない。
CALならASP.NETの利用ユーザ数分必要。
424 :
NAME IS NULL:2007/08/25(土) 23:26:17 ID:oW87BVWG
初心者な質問なんですいません。
現在、SQL-Server2005の価格表とにらめっこしているのですが、
ライセンスのところがよく分りません。
"Select A Level"と"Open Business No Level"の違いがわかる方
いらっしゃいましたらご教授お願いいたします。
426 :
NAME IS NULL:2007/09/04(火) 17:36:54 ID:BavPmLq2
SQL クエリアナライザ で実行モードで「結果をグリッドに表示」を選択しても
何も表示されなくなってしまいました。
また、トレース、統計、メッセージは表示されますが、
実行プランも表示されなくなってしまいました。
表示されないとは、タブは出来るんですが、内容が真っ白です。
SQL Server2000で、クエリアナライザはそれについていた物です。
何か分かる方いますか?
>>426 結果をテキストでは表示できたり、SHOWPLAN ALL ではプランが表示されるというなら、
コントロールが壊れちゃったんだろうな。クライアント ツールだけ再インストールが手っ取り早いと思う。
SQL Server 2005 の SQL文で、あるテーブルの任意の位置にカラムを追加したいのですが
その方法はありますか?
TABLE-A に
A, B, C と列がある時、A と B の間に AB というカラムを追加し、
A, AB, B, C というテーブル情報にしたい。
末尾に追加するのであれば ALTER Table できるのですが。
方法があれば教えてください。
>>428 目的が分からんからアレだけど、ALTER TABLEじゃ無理じゃね?
別案として、
・カラム(A、AB、B、C)を持つ「TABLE_B」を作成
・TABLE_AのデータをTABLE_Bにコピーする
(必要であればABに値も入れておく)
・あとはTABLE_Aに移し変えるなり好きにする
430 :
429:2007/09/06(木) 16:22:30 ID:???
追加
Enterpirze Managerだと出来るかも
テーブルのカラム、任意に並べ替えることにどれほどの意味があるの?
テーブル構造見るときに気持ちいい程度なんじゃないの。
データを読み込むときは、
SELECT A,AB,B,C FROM TABLE_NAME
ってすれば、ABがどこにあろうと…
>>428 ALTER TABLE では無理。
>>429 の通り。
GUI の管理ツールでカラムを追加した場合は、内部のレコードがいったん tempdb に対比され、テーブル定義が削除され、再度テーブルが作成されてデータが tempdb からもどされるので、GUI 上と同じ列順になる。
その、テーブル定義の並び順が、どうして大切なのか、
そういう風にするとSQLの最適化が出来るとかいう情報があるなら
ぜひ教えてほしいんだけど。
キーが無いテーブルに、キーを追加するなら最適化できるから
十分理由はあるんだけど、キーの項目が先頭に無いといけない
とはTechNetにも記述無いしなぁ
RDB では、良く検索される項目を左側に持っていくと
抽出効率が良くなると、聞いた事はある。
どれぐらい差があるのかは知らないが。
OS:Windows Vista Business64bit
にSQL SERVER 2005の評価版(x64)をインストールしたんだけど
インストール時に規定のインスタンスを指定してインストールしたにもかかわらず
management studioに表示されない。
SP2を入れてみても改善せず。
だれか助けて
438 :
NAME IS NULL:2007/09/09(日) 00:58:18 ID:S34UPkq4
こんにちは、ど素人プログラマです。
SQLサーバー2000について教えて欲しいのですが、
あるテーブルに項目1、項目2、項目3が定義されているとして、
項目1の値が「1」のときは、項目2は必須項目
項目2の値が「1」以外のときは、項目3は必須項目
というような事を外部キー制約のように実現するにはどうすればいいのでしょうか?
制約? トリガ?
>>437 >management studioに表示されない。
[ファイル]→[オブジェクトエクスプローラを接続]で接続してもだめでしょうか?
あと、サービスの起動は確認済みでしょうか?
>>438 個人的にはINSERT、UPDATEトリガーを使うのが良いかと。
440 :
NAME IS NULL:2007/09/09(日) 12:49:10 ID:Qt4qWxfl
>>437 コマンドラインで接続できるか?
osql -E で接続できれば、Windows認証で接続できている。
osql -U sa -P password で、passordをインストール時に指定したものを
入力して接続出来るのなら、sql認証も有効になっている。
これでmanagement studioで接続できないのなら、ファイアウォールを
疑ってみるとか
441 :
NAME IS NULL:2007/09/09(日) 19:36:36 ID:n4fxWSxo
すみません、ょっとお伺いします。SQL Server 素人です。
自宅鯖でMSDE+ASPで遊んでいて、MSDEをSQL Server 2005 Express に
アップデートしたのですが、ASPのプログラムで、
SQL Server に書き込みできなくなりました。
[Microsoft][ODBC SQL Server Driver][SQL Server]sysservers に
サーバー '○○' が見つかりませんでした。
sp_addlinkedserver を実行して、サーバーを sysservers に
追加してください。
と表示されるのですが、具体的に何をどうしたら良いのでしょうか?
>>441 君はリンクサーバーに接続しようとしてるから、リンクサーバーを追加すりゃいいんだよ。
その ASP プログラムって自分で作ったやつか?
443 :
441:2007/09/09(日) 23:05:33 ID:n4fxWSxo
スミマセン、リンクサーバーがなんやらわかんなくて。
ASPは自分でつくったやつ。
Set objDBC = Server.CreateObject("ADODB.Connection")
objDBC.CommandTimeout = 60:
objDBC.ConnectionTimeout = 120:
objDBC.open C_DBName, C_DBID, C_DBPW:
Set ObjRS = Server.CreateObject("ADODB.Recordset"):
txtSQL = "SELECT * FROM t_カウント WHERE カウント名=情報ID'":
ObjRS.Open txtSQL, objDBC,3,3:
intProID = ObjRS.Fields("カウント値"):
ObjRS.Fields("カウント値") = ObjRS.Fields("カウント値") + 1:
ObjRS.Update:
ObjRS.Close:
444 :
441:2007/09/09(日) 23:08:22 ID:n4fxWSxo
C_DBName は、ODBCのシステムDSNに登録してあります。
これだけじゃだめなの?
445 :
441:2007/09/09(日) 23:15:11 ID:n4fxWSxo
webアプリで、ローカルサーバのSQL Serverに接続して
データを更新したいだけなのですが・・。
>>443 ODBC で追加オプションは取れてるの?
ちなみにサーバーは (local)\SQLEXPRESS と指定するんだぞ。
ドライバは SQL Server Native Client を指定する。
いろいろわかってればもっと違うんだが、とりあえずそれでやってみ。
もう少し詳しいことを知りたければ、とりあえず ASP から SELECT @@version を実行して結果を表示してみるとかな。
ちなみに、エラーの意味は
"君が指定したデータベース名は指定された SQL Server インスタンスの中にないよ"
っつー意味ね。
449 :
441:2007/09/10(月) 04:49:10 ID:g0Bkdph5
>>446 > ODBC で追加オプションは取れてるの?
> ちなみにサーバーは (local)\SQLEXPRESS と指定するんだぞ。
> ドライバは SQL Server Native Client を指定する。
当たりでした。
ありがd 大感謝
m(__)m オヤスミナサイ
452 :
NAME IS NULL:2007/09/10(月) 16:53:24 ID:pZqYwMR/
すいません、質問です。
SQL Server2000 SP3を使用してRESTOREを行ったところ下記エラーがでて、データベースが開けなくなってしまいました。
Location: p:\sql\ntdbms\storeng\drs\include\record.inl:1447
Expression: m_SizeRec > 0 && m_SizeRec <= MAXDATAROW
SPID: 51
Process ID: 740
接続しにいこうとすると既定のデータベースを開けませんといった旨のメッセージが表示されてしまいます。
DBCCを実行しても、復元中です。実行できませんとメッセージが表示され、実行することすらできません。
なにか復元する方法ないでしょうか?
>>452 >SQL Server2000 SP3を使用してRESTOREを行ったところ下記エラーがでて、データベースが開けなくなってしまいました。
その手のアサーション関連の不具合をSP4で修正しているはず。
SQL Server 2000 SP4を用意して、リストアしてみたら。
ttp://support.microsoft.com/kb/841776/en-us FIX: Additional diagnostics have been added to SQL Server 2000 to detect unreported read operation failures
ttp://support.microsoft.com/kb/827714/ja [FIX] NOLOCK ヒントまたは READ UNCOMMITTED 分離レベルを使用するとクエリが失敗してリテール アサーションが発生することがある
>Location: Drive:\sql\ntdbms\storeng\drs\include\record.inl:1447
454 :
NAME IS NULL:2007/09/10(月) 19:28:36 ID:pZqYwMR/
>>453 お返事ありがとうございます。SP4にして再度ためしてみました。
RESTORE DATABASEした結果、エラーメッセージが変わっただけで動作は変わりませんでした。
ファイル 1 で、データベース 'TEST'、ファイル 'TEST' の 1456 ページが処理されました。
ファイル 1 で、データベース 'TEST'、ファイル 'TEST_log' の 1 ページが処理されました。
メッセージ 7987、レベル 22、状態 1、サーバー TEST01、行 1
データベースの整合性の問題がデータベース 'TEST' から検出されました。DBCC CHEC
KDB および DBCC CHECKCATALOGをデータベース 'TEST' で実行する必要があります。
同じようにDBCC CHECKDBなどをすると、「データベース 'TEST' は開けません。復元中です。」と出て実行できません。
なにか他に対処法ありますでしょうか?
また最悪、復元が出来ない場合、バックアップファイルなどからデータを取り出すなどのことは可能なのでしょうか?
バックアップファイルをテキストエディタなどで覗くと、データは入っているようなのですが……。
>>454 もしかしてRESTORE DATABASE 〜 WITH NORECOVERYでリストアしているって事ない?
WITH RECOVERYでリストアしてみたらどうなるかな?
456 :
455:2007/09/10(月) 19:43:03 ID:???
>>454をよく読んでいなかった。
RESTOREが終わった時点で、整合性エラーを検出しているんだ。
ただ復元中って出ているから、データファイルの整合性をチェックしていて
時間がかかっているような気もする。
457 :
452:2007/09/10(月) 19:44:07 ID:pZqYwMR/
>>455 WITH RECOVERYでやっても変わりないみたいです
458 :
452:2007/09/10(月) 19:51:56 ID:pZqYwMR/
>>456 最初自分もそう思ったんですが、3時間ほどたっても変わらない状況です。
11MB程度のデータなんです。ディスクアクセスがたいしてあるわけでもなく、本当に復元中なのか謎な状態でして……。
>>458 ここまできたらマイクロソフトに問合せてみた方が良いかも。
TechNetやMSDN、パートナー契約を結んでいたら、契約に含まれている
回数までは無償で問合せできるし。
以前、マイクロソフトに問合せた事があるけど、こういった
(お金を払って契約している)ユーザーに対しては、かなり親切に対応してくれるよ。
460 :
452:2007/09/10(月) 21:06:18 ID:pZqYwMR/
>>459 そうですか。一度問い合わせてみることにします
どうもありがとうございました。原因などがわかったら報告にきますね
461 :
437:2007/09/11(火) 06:34:23 ID:???
>>439,
>>440 アドバイスありがとうございます。
いろいろ試してもだめだったのでVirtual Server 2005 R2にWindows Server 2008(32bit)入れて
まっさらな環境にしてSQL SERVER 2005(32bit)入れて自己解決しました。
64bit鬼門すぎ
BACKUP DATABASE tablename TO DISK =
で出力デバイスをファイルにしたときファイルは
ローカルファイルじゃないとダメなのでしょうか?
ネットワークの共有フォルダだとエラーになるので
きっとそうなんだろうとは思いますが・・・・・
>>462 実際に読み書きするのはSQLServerのサービスプロセス。
サービスのアカウントが読み書きできるところなら出来る。
普通はネットワークにはアクセスできないアカウントで動いているので結果的に出来ない。
465 :
NAME IS NULL:2007/09/14(金) 09:15:16 ID:sLMOoozG
素人ですいません、SQL Server 2005 Express EdtionのService Pack2のUpdateが失敗して更新出来ません。
エラーコードは0x65Bです。
黄色い盾が消えずに困ってます、宜しくお願いします。
466 :
NAME IS NULL:2007/09/14(金) 10:34:24 ID:vxnEF19a
バックアップとってるなら原因探すよりSP2で再インストールさせたほうがはやいかもよ
別なPCでテストしてからのほうがいいけど
軽く検索した感じ回避策はいまいち見つかってないようだし
467 :
NAME IS NULL:2007/09/14(金) 11:49:05 ID:sLMOoozG
そうですか、ありがとうございます。
468 :
NAME IS NULL:2007/09/14(金) 12:01:29 ID:UtGDR6zs
教えてください。
T-SQLで、列の規定値追加、変更は出来るのでしょうか?
ALTER TABLEでは出来そうにないんですが...
469 :
468:2007/09/14(金) 14:45:52 ID:UtGDR6zs
自己解決しました。
ALTER COLUMNじゃなく、ADD CONSTRAINTを使えばいいんですね。
よりよい方法が他にあったら、教えてください。
470 :
NAME IS NULL:2007/09/16(日) 13:29:03 ID:uviOaQk6
来週専門のほうでテストがあるんですがSQL Serverを勉強する際にいるSQLサーバーでなんかいいのありませんか?
なるべく軽いのでお願いします
>>470 意味がよくわからんが、先生か友達に聞いたほうがいいんじゃない?
多分 SQL Server Express と SQL Server Management Studio Express をダウンロードすればいいんだろうけど
そこから途方にくれると思われ。
>>470 Developer Editionでいいんじゃない。
Enterprise Editionと同じ機能で5000円位だし。
>>470 SQL Server 2005 Express
SQL Server Management Studio Express
WebMatrix
この3個で十分。
WebMatrix ではなく、Visual C# の無料版でもいいけど。
(Webプログラミングしたいのか、クライアントのアプリを作りたいのか)
474 :
NONAME:2007/09/17(月) 11:27:06 ID:NjKQqxCi
Microsoft Windows XP Home Edition
Microsoft Windows XP Professional
The microsft Operating systems.
WinXPで、MSDE2000Sp4を使っているんですが、コマンドラインからアタッチを使用とすると
メッセージ 5173、レベル 16、状態 2、サーバー (SERVER)、行 1
ファイルを別のデータベースに関連付けることはできません。
とメッセージが出ます。
こういったエラーって何が原因なんでしょうか?
>>475 コマンドラインからアタッチってのは sp_attach_db を自分で呼んでいるという意味か?
Enterprise Manager を使ったらエラー無くアタッチできると解釈していいのか?
普通に考えて "sp_attach_db の構文を正しく記述してないから" とは思わないのか?
プロファイラを起動して Enterprise Manager からアタッチするときどんな SQL 文が実行されているかをチェックしてみなさい。
ちなみに、エラーメッセージでぐぐったらそのエラーは別々のデータベースのデータベース ファイルをアタッチするように
sp_attach_db を呼ぶと返されるってさ。
477 :
475:2007/09/18(火) 21:15:45 ID:???
>>476 レスありがとうです
バッチファイルでsp_attach_dbを実行しているんですが、
別の環境では同じバッチファイルでも問題なくアタッチが出来るという状態です。
問題が起こっている環境の場所へいけないのがネックなんですが。
別々のデータベースファイルをアタッチするって、指定してるmdfとldfが別のデータベースって
認識されているってことなんですかね?
>>477 自分で SQL ステートメントを書いて実行してみれ。
同じバッチファイルでも何かの事情で違う SQL ステートメントが生成、実行されることだってあるだろ?
データベース ファイルを再度ちゃんとアタッチできる状態からコピーしなおしてみるってのもやってみな。
なんでエラーが起きてるのかはわからん。
バッチファイルが誤った SQL ステートメントを生成・実行しているのか、データベース ファイルに問題があるのか、・・・
ちなみにデータベース ファイルにはデータベース固有の GUID が振られており、データベース ファイル群の中に一つでも
異なる GUID を持つファイルがあると当該のエラーが出るらしい。
SQL Server でファイルとファイル グループのバックアップを復元する
http://support.microsoft.com/kb/281122/ja このことを元にそのコンピュータや顧客の置かれている状況でどのような時にそんな状況が起きうるかとか、
どうすればいいかを想像してみれ。
あとは、mdf だけ指定して sp_attach_db を実行すると LDF が勝手に作られるみたいだから、どうしようもなければそれでもいいかもな。
480 :
475:2007/09/19(水) 15:38:29 ID:???
アドバイスありがとうです。
最終的に479氏の手段で稼動させることはできました。
エラーの原因までは結局つかめてないけどな。
…自分の不勉強さを呪うわ…orz
すみませんどなたかご教授を。。。
windows2000のDドライブ上にSQLServer2000を
インストールして使用していました。
昨日Cドライブが死んでしまい、Dドライブはまだ生きているので
とりあえずDVDに全てCOPYをし、別HDDにOSから入れ直している状態なのですが
このDVD上のデータを再度インストールしたSQLServer上にリストアする事は
可能でしょうか?
教えてちゃんですみませんが、宜しくお願い致します。
SQLの「データフォルダ」の全てのファイルをリストアすればいい。
master とか tempdb とか、お前さんが作った db名のファイルとか
があるフォルダが、データフォルダ。
483 :
481:2007/09/19(水) 20:16:56 ID:???
>>482 早速のご返答有り難う御座います。
この場合のリストアって、
『フォルダ内のファイルを全部COPY』
ってことでよろしいでしょうか?
運用中に突然壊れたとかでなければ動くようになるとは思うが、
丸ごとコピーは正規のバックアップ方法でも正規の復旧方法でもないから、
とりあえずやってみろとしかいえんな。
上書きコピーでいくならサービスはとめてからやれよ〜
486 :
481:2007/09/19(水) 20:53:09 ID:???
487 :
NAME IS NULL:2007/09/20(木) 00:37:40 ID:30mbiUwW
SQLサーバーデータベースの再編成ってどうやるの。
そもそも必要なの?
>>487 再編成という言葉が何を意味しているのかわからないが。
>>487 DBCC DBREINDEX または DBCC INDEXDEFRAG
が索引の再編成。これはデータの追加削除が激しいならまめにやったほうがいいな。
クラスタ化索引の再編は時間がかかるから、
総容量の大きなテーブルは非クラスタ索引にしておくのも一手。
データ部の再編は基本的に必要ない。
MSSQLは8Kの固定ページサイズなので空きページの再利用は自動でかつ効率よくやってくれる。
空きページをファイルシステムに返して開放したいなら
DBCC SHLINKDATABASE を使う。
>>489 DBCC SHRINKDATABASE ね
491 :
NAME IS NULL:2007/09/20(木) 16:48:59 ID:ZZNi8NHK
SQL Server2000 で、作成されているテーブルに付いてなのですが、
Managerから、該当するテーブルを開いてみると、データが入っているはずの
項目を見ても空になっています。
その際、そのセルにカーソルを合わせて、何か編集を行うとすると
「このセルは編集できません。」とエラーが出ます。
全てのデータがなっている訳ではなくて、ポツポツとあります。
こうなっているフィールドの型はntext型になります。
リンクテーブルやデータのエクスポートでAccessからみると、
どちらも正しくデータが入っています。
ただし、リンクテーブルの場合、全てのレコードでデータの変更は出来ません。
何か解決策はありますでしょうか?
ちなみに、一度デタッチ → アタッチをしてみましたが、変化はありませんでした。
>>491 わかんないけど、Unicode で入ってて SJIS で表示できない文字でも入ってるんじゃないの?
ntext型だとManagerからはちゃんと見れなかった気がするぞ。
他の方法で更新するしかなかったような
494 :
NAME IS NULL:2007/09/20(木) 19:42:28 ID:30mbiUwW
495 :
NAME IS NULL:2007/09/20(木) 20:03:14 ID:T4Z4T0FU
bcpでCSVをインポートする方法を教えてください。
接続してる状態じゃなければだめとかもわかりません
496 :
NAME IS NULL:2007/09/20(木) 21:19:30 ID:K6Y78rP2
>接続してる状態じゃなければだめ
つうか、インポートするためにはSQLサーバに接続しないとダメなわけで…
(オフラインとかいう考え方あるなら、俺もやり方知りたい)
498 :
NAME IS NULL:2007/09/21(金) 14:30:11 ID:6dTeJjeC
SQL Server 2005 expressに関して質問です。
SQL Server MSEのログイン-新規作成で、他マシンのユーザを
Windows認証で追加したいのですが、他マシンのログイン名
(domain\username)が通りません。
[検索(E)]ボタンを押して「場所を指定してください」の[場所(F)]を
クリックしても、他マシンのドメインが現れません。
他マシンには管理者権限でパスワード設定済のユーザを作って
ありますが、そのユーザを追加できないのです。
考えられる原因について、どなたかアドバイス頂けませんか。
>>498 Active DirectoryやWindows Domainにそのコンピュータや追加するコンピュータは参加してる?
>>499 それぞれのマシンは同一ワークグループ内にあり、相互の共有
フォルダへのアクセスや、SQLServer認証でのサーバへの接続
は可能ですが、Active DirectoryやWindows Domainに関しては
「それが何か」ということ自体を知らないのが現状です。
不勉強で申し訳ありません。
一度調べてみます。ありがとうございました。
501 :
NAME IS NULL:2007/09/21(金) 21:56:31 ID:9ro8Xx3l
>>498 ユーザアカウントの作り方からして間違っている。
Windows2000pro. or WindowsXPしかないワークグループ環境でWindows認証を
行う場合は、SQLServerにではなくコントロールパネルから"ユーザアカウント"
又は"管理ツール"→"コンピュータの管理"→"ローカルユーザとグループ"で
ユーザアカウントを作らなければならない。
ちなみに作成したアカウントが Administratorsグループに所属するとSQLServer
内では owner属性で扱われ全てのデータベース、テーブルで操作ができる。
対してUsersグループに所属する場合はSQLServerにConnectはできるけれど
どのデータベースも操作できない。当然、テーブルの読み書きもできない。
相応の権限のロールが必要。
ワークグループのみでもちゃんとWindows認証でリモート接続できるからな。
Oracleからの移行でトリガの移行をしようとしてるんだけど構文が解らないので
エロイ人、教えてください・・・・
Oracleのトリガ構文は・・・・
CREATE OR REPLACE TRIGGER NULLPO.TRG_MONANEKO
BEFORE INSERT OR UPDATE
ON NULLPO.MONANEKO
REFERENCING OLD AS OLD NEW AS NEW
BEGIN
IF :NEW.NOTE IS NULL THEN
:NEW.NOTE := SYSDATE;
END IF;
END;
/
なんですが、SQLServerには:NEWやら:OLDが無いらしいのですが
これをTransact-SQLに置き換えるとどんな構文になるか教えてください。
>>502 試行はしていない。
影響のあった行の参照はinserted/deletedの特殊表を使うが、
この表自体を変更することは出来ないので、
このケースでは必ず主キーが必要になる。
create trigger NULLPO.TRG_MONANEKO
on NULLPO.MONANEKO
after insert, update as
update NULLPO.MONANEKO set NOTE = GETDATE()
where PKEY in (select PKEY from inserted where NOTE is null)
504 :
502:2007/09/27(木) 17:29:04 ID:???
>>503 エロい人ありがとう!
なるほど〜。随分、ボラクルとは作法が違うのですね。
これで解決しそうです。
ありがとうございました。
505 :
NAME IS NULL:2007/09/27(木) 22:42:26 ID:aY73QQtY
SQLServerを使用して、c#.netをやってます!
さっそく質問なのですが、Datetime.Nowで値を取得するとyyyy/mm/ddまでの値しか取得できません。
後で排他処理をする時、時間まで取得したいのですがどうすればいいでしょうか?
それともDB側では暗黙的に時間も入っているのでしょうか?
単純にC#でDateTime.Nowの値は、時刻も含まれるはずだが。
SQL Server 2005 Expressと、SQL Server Management Studio Expressで
フルテキスト検索のテストをしてるのですが、
USE [testdb]
GO
select *
from dbo.Customer
where contains(name, '太陽企画');
このようなコードでマッチしません。nameには'太陽企画'という
データはあるのですが、なぜでしょうか・・・。
フルテキストカタログとフルテキストインデックスは作成してて、
name like '太陽企画'ならマッチするんですが・・・。むずい・・・
>>508 ちとこの2つは調べてみてくれ。
'太陽' や '企画' では検索できるか?
FREETEXTでは検索できるか?
すいません。ありがとうございます・・・。
カラムの型をtextからntextとかnvarchar(MAX)のunicodeにしたら
ちゃんとマッチするようになりました。。。textだと、
'太陽'とか'企画'でもマッチしませんでした。。。
511 :
NAME IS NULL:2007/10/03(水) 04:21:23 ID:BPM1pdYY
こんばんは。
SQL Server 2000を使用しています。
あるテーブルに200万レコード程のデータがあります。
カラムはint型が3つに、image型が1つです。
Enterprise Managerのタスクパッドを確認すると、そのテーブルの
サイズは約2GBとなっています。
DELETE分でレコードを約150万レコード程削除してもサイズは数MBしか
小さくなりませんが、約160万レコード程削除するとサイズが1.5GB程
小さくなり、0.5GB程になります。
DELETE件数とデータサイズが比例していないのですが、SQL Serverは
このような動きをするのでしょうか。
比例してサイズを小さくさせる事は可能でしょうか。
よろしくお願いいたします。
DBCC SHRINKDATABASE
とか調べて
>>511 DELETEした時点でサイズが縮小されるの?
SQL Serverでは一度確保した領域は、DBCC SHRINKFILEとかSHRINKDATABASEをやらないと
縮小されなかったはずだけど。
(ただしデータベース作成時に設定したサイズ以下にはサイズを縮小できない)
あと、DELETEするとトランザクションログにログが記録されるから、ログファイルのサイズ増えているような気も。
SQL Server 2000 で、動作しているシステムがあります。
この度、もう1台サーバーと SQL Server 2000 を用意して、
現在のサーバー → 新サーバーに、リアルタイムにデータをコピーして、
もし、現在のサーバーが壊れた時に、新サーバーに切替えを行なう事を考え
ています。
SQL Server 2000 同士で、リアルタイムにデータをコピーする手法があれば教えて
頂けないでしょうか?
>>511 >Enterprise Managerのタスクパッドを確認すると、そのテーブルの
>サイズは約2GBとなっています。
テーブルのサイズはどこで見れますか?
データベースのサイズなら
>>512-513のとおりだと思います。
オプションでDBの自動圧縮がオンになったりしてますか?
517 :
511:2007/10/04(木) 03:15:48 ID:nx6lfmnn
みなさん、コメントありがとうございます。
>>512 SHRINK DATABASEを行ってもサイズはの変化はありませんでした。
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
11 1 263672 1280 261768 261768
11 3 29736 1280 29728 29728
11 2 1280 1280 1280 1280
>>513 >DELETEした時点でサイズが縮小されるの?
削除したレコード数によっては縮小される時とされない時があります。
>SQL Serverでは一度確保した領域は、DBCC SHRINKFILEとかSHRINKDATABASEをやらないと
>縮小されなかったはずだけど。
>(ただしデータベース作成時に設定したサイズ以下にはサイズを縮小できない)
DBCC SHRINKDATABASE,SHRINGFILEを実行してもあまり圧縮されませんでした。
>あと、DELETEするとトランザクションログにログが記録されるから、ログファイルのサイズ増えているような気も。
はい、こちらは300MB程増えていました
>>515 >テーブルのサイズはどこで見れますか?
タスクパッドのテーブル情報タブにて確認しています。
>オプションでDBの自動圧縮がオンになったりしてますか?
オフ(未選択)になっていました。
以下、タスクパッドでのテーブルサイズの詳細です。
イベント, 行,サイズ,インデックスサイズ
元データ, ,925099,2101752,248
レコード削除1(543478件) ,381621,2071048,248
SHRINK DATABASE ,381621,2087264,248
レコード削除(240467件) ,2141154,769912,248
以上です。よろしくお願いいたします。
>>517 >タスクパッドのテーブル情報タブ
が情報をどこから持ってきてるかによるな。
おそらく統計情報だろうから統計の更新が遅れてるだけじゃないかと思う。
情報タブの表示のスピードから見て少なくとも表示ごとに生の情報を持ってきてはいないはず。
sp_updatestatsを実行してみて変わらなかったらまた報告してくれ。
519 :
512:2007/10/04(木) 15:18:01 ID:???
>>511 だいぶ横道に逸れてるようだけど、内部構造を調べてもあんまり意味ないよ。
いったい何がしたいの?
いっぱいデータを消した後にデータベース ファイルのサイズを小さくしたいのであれば
DELETE ステートメントの実行後に DBCC SHRINKDATABASE を実行する。これだけ。
>>517 でサイズの変化がないとか言ってるけど、ファイルがぎっちぎちに詰まってるから
これ以上小さくできないだけ。
圧縮って言っても zip や lzh みたいにファイルを小さくするわけじゃなくて、
予約だけされていて使われてない空の部分を OS のファイルシステムに返すだけだから、誤解の無いように。
521 :
511:2007/10/08(月) 10:47:57 ID:ejBEkIGa
回答が遅れ申し訳ありません
>>518 sp_updatestatsを実行してみましたが、変化はありませんでした。
>>519 ありがとうございます。これから内容を確認してみます。
>>520 このテーブルには毎日多くのデータが追加されるので一定期間で削除したいのですが、
前述のようにDELETEしてもテーブルサイズやデータファイルのサイズが小さくなりません。
この状態で運用を続けるとサイズがどんどん肥大化していくので、
どこかでディスク空き容量が無くなってしまう懸念があります。
内部構造的にどこかのタイミングで縮小されるようならいいのですが、
そういった情報を見つけることができておりません。
>>521 クラスタ索引があるとデータリーフも索引の一部になるので削除したあとの再利用がされにくい。
おそらくページかエクステント内から完全にデータがなくならないと再利用されないと思う。
デフォルトだと主キーがクラスタ索引になるので、再利用を早めたいなら主キー索引の再編成が必要になるだろう。
データの追加削除が多いようなら、主キーを含めすべて非クラスタ索引にするのがいい。
VB6からADOでSQL SERVER 2000を使う仕事をしています(Access+DAOからの移行です)。
WHERE節で複数条件をAndでつなぐと、やたらにSELECT(DELETEやUPDATEも)が遅くなるような気がしているのですが、
回避方法はありますでしょうか?
いったん単独条件でSELECTしておいて、残りはFilter指定でやるようにすると劇的に改善されるのですが、面倒です。
また、劇的に改善されるといっても絶対的な速度はたいしたことなく(元が死ぬほど遅いので)、
「Accessのときより遅い」とクレームがつきそうです。
インデックスは複数フィールドをまとめた状態で設定されているのですが、これがまずかったりするのでしょうか。
元がAccess+DBOなので、.Seek用に作られた名前付きIndexがそのまま移行している形になっています。
既出かとは思いますが、どうかよろしくお願いします。
DBO ×
DAO ○
ですね。すみません。
>>523 一般論から言えばそういうことはない。使い方を間違っているか別の要因が関係している。
具体的な例をあげてもらえば個別に解説できると思う。
ホントどISAMであるJETDB(DAO)からRDBへの移植はそれぞれ特性も違いかなり難しい。
単純にコンバートしようとするとパフォーマンスや動作上の問題が多数発生する。
>>523 インデックスがうまく効いていないんじゃないかな。
クエリアナライザで実行プランを確認してみて。
あとは、クエリアナライザのインデックスチューニングウィザードを試してみるとか。
527 :
NAME IS NULL:2007/10/18(木) 00:07:25 ID:2wtlRKYh
日時を格納するフィールドに、datetim型を使うか(n)charを使うか迷ってるんですが、どっちがいいですか?
528 :
NAME IS NULL:2007/10/18(木) 07:55:20 ID:PHcDACtf
データ量を減らすために、charに一票
>>528 DATETIMEは8byte。
でもまあ、日付だけで時刻はいらないような場合は悩むな。
ANSI-SQLのDATEとINTERVALは欲しい。
お前ら意外と理解あるのなw
↑誤爆です><
532 :
528:2007/10/19(金) 00:52:16 ID:???
datetime型だ、SQLで加工するのがややこしかったので、データ量を犠牲にして文字列型でいくことにしました。
レスくれた方ありがとう。
533 :
NAME IS NULL:2007/10/23(火) 17:38:48 ID:4X2HVnn9
SQLServer初心者です。
VB2005からSQLServer2005への接続について質問させて下さい。
同サーバーのプロジェクト名Test_dbにテスト接続はできるのですが、
データソース構成ウィザードで、テーブル、ビュー等の左側に「+」「−」
が無く、展開できません。 データソース、データセットとして実態を
取込めません。
ちなみにVB2005からAccessのテーブルをデータソース、データセットとして取込む事は
できました。
SQLServerから取込むにはどの様にするば良いでしょうか。
アドバイスお願いします。
dtsxのパッケージを作成してサーバ側に配置インストールしたんですが動作しません。
開発環境PCのAと、サーバPCのBがあります。
パッケージの作成はAで行い、AのVS2005でのパッケージ作成とデバッグ実行では問題なくSQLが成功します。
buildしてできたdtsxファイルをAで開き、そこから直接実行しても問題なく完了します。
このdtsxをBにコピーし、ダブルクリックから起動して直接起動するとエラーが出ます。
エラー内容はどうも接続部分で躓いている様子です。
SQLServerにパッケージインストールウィザードで配置し、JOBに登録してから実行してもエラーが出て
エラーログなどを見るとやはり接続関係で止まっているようです。
逆、つまりBで実行できてAで実行できないというならわかるんですが(Aで作る時、接続先は外部PCのBへのConnectionになっているので)
Bで実行できないというのがよくわかりません。
エラー内容は
エラー:接続"server.testdb.sa" を取得できませんでした。接続が正しく構成されていないか、この接続に必要な権限が不足している可能性があります。
です。
どちらからも繋がらないなら構成が間違ってるのか権限がないのかというのは見直すのがわかるんですが
Aからは繋げてBから繋げないので、構成とか権限はあってるように思うんですが。
データ量どうのこうのというより、データベースはデータが命なわけで、
ありえない日付とか挿入されてデータに不整合が発生しないように、ありえない日付の挿入をブロックしてくれる
日付型を使うべき。もちろん、大抵のアプリの場合、フロントエンドでも、ユーザービリティの観点から
たいていは日付のチェックを行うが、それがかりにバグってても、日付型にしておけば、
最後の関門のデータベースの日付チェックでありえない日付をはじいてくれるから安心。
DATE型があれば、それでいいけどDATETIMEだと日付入れる場合時間なしで入れないと
いけないのに'2007-10-23 10:00'とか入れてしまうともう駄目
今回のシステムはintで日付を持ってる。20071023みたいに。
538 :
NAME IS NULL:2007/10/24(水) 07:53:08 ID:TfcxssxI
正当性の判定をユーザが作るなら、intで待ち受けてもいいかもな
20071303 をエラーとはじいたり
20071131 をエラーとはじいたり というチェックルーチンを作るのは結構めんどくさい
一番めんどくさいのは、うるう年判定
初心者質問ですがよろしくお願いいたします。
コマンドからデータベースを作成しようとしていますが、データベース名に
変数を使うとうまくいきません。
変数を使ってうまく作成する方法はありますか?
ちなみにこの文で実行しました。
Use master;
GO
DECLARE @unko varchar(10)
Set @unko = 'unko'
begin
CREATE DATABASE @unko
end
----------------------------
以下、処理結果です。
Use master;
データベース コンテキストが 'master' に変更されました。
DECLARE @unko varchar(10)
Set @unko = 'unko'
begin
CREATE DATABASE @unko
end
メッセージ 102、レベル 15、状態 1、サーバー Temp\SQLEXPRESS、行 5
'@unko' 付近に不適切な構文があります。
>>539 varchar の変数にステートメントをまるごと格納して、exec の引数として渡す。
>>540 おお、以下のとおりやってみたら成功しました。
ありがとうございました。
Use master;
GO
DECLARE @unko varchar(10), @query varchar(100)
SET @unko = 'unko';
SET @query = 'CREATE DATABASE ' + @unko;
EXEC (@query)
GO
MSSQLから、mysql用にデータベースのエクスポートをすることはできますか?
mssqlの知識が無いので、わからないのですが、
テーブルの定義やデータ等、テキストファイルだけでのエクスポートはできないのでしょうか?
拡張子がbakファイルのもらったのですが、
データのヘッダー1文字目に「TAPE」とあるので、
テープバックアップしたバックアップファイルで、これは単なるmssql用データなのでしょうか?
>>542 エクスポートのやり方や形式に互換性なんて無い。
あとマルチまがいはやめたほうがいい。どっちかに移動した旨を書いておけ。
544 :
sage:2007/10/29(月) 15:57:07 ID:7E2B0ILf
質問です。
SQLSERVER2000のSP3で、毎日のバッチ処理でデータを追加するテーブルがあります。
そのテーブルには主キーが設定していています。(仮に「キー」という列に設定したとします。)
この「キー」はデータを追加する際に現在の最大値から連番で振っています。
このテーブルのデータは、バッチ処理での追加はありますが、DELETEはありません。
UPDATEはしています。
DBの保守計画で、整合性チェックと最適化を毎日動かしていましたが、ある日、いきなり
整合性チェックと最適化JOBでエラーになり始めました。
「DBCC CHECKDB」で調べてみたところ、上記のテーブルで一貫性エラーが発生していると出ました。
設定してあった主キーを外し、「キー」で重複するデータを探したところ、データ内容がまったく
同じデータが何件か存在しました。
バッチ処理でデータを追加する際にこのようなデータが発生してもテーブルの主キーを設定している
のでエラーになるはずです。
このような現象が発生する理由をご存知の方はいないでしょうか。
宜しくお願いします。
>>544 理由を聞きたいの?ディスク上にあるデータが壊れたか、SQL Server のバグ。
>>544 その主キーは非クラスタ索引ですか?
それならば、誰かが索引を無効にした、またはIOエラーなどで無効になった可能性が高い。
BCPでロードしなおしたとかない?
>>545 SQLSERVERのバグでしょうか。直してもまた別テーブルで同じ現象が出てきますし。
>>546 恐らく非クラスタ索引ではないと思います。
EnterpriseManagerのテーブルデザインで主キーを設定しただけで、インデックス等の設定はしていません。
>>547 クラスタ化索引なら索引が無効になった段階でテーブルが使えなくなるので、
オペミスで無効にしてしまった線は消える。
他でも起きるならバグよりもディスクのIOエラーを疑ったほうがいいと思う。
>>548 テーブルのデザイン時に主キーを設定したら、その項目はクラスタ化索引になるはず。
ディスクのIOエラーというのは、HDDの障害ということですよね?
交換したら直るのかもしれないということですか。
SQLSERVER2000を触るのが私だけですのでオペミスは考えていませんでした。
説明が足りずに申し訳ありません。
とりあえず SP4 にするこったな。
SP4 じゃないとディスク I/O エラーが起きてもログ取れないし。
コンプライアンス云々で実行されたSQLコマンドをすべてログにとれるDBを探していますが、
SQLserver2000あるいは2005は指定のDBに対してSQLが実行されたとき、
そのSQLコマンド(Insert Update Delete)をログにとることはできますか?
>>551 サーバートレースでもいいかな。遅くなるけど。まあ全部ログに落としたらどんな DB 製品でも遅くなるか。
>>552 もうちょっと詳しくお願いできませんでしょうか?
>>553 DBの処理をトレースするソフトを導入するってことですか?
>554
ちょっとSQLServerの付属のプロファイラ実行してみろ。
ただ、全部残すと恐ろしいログのサイズになるので適当にフィルタして欲しいクエリだけ残るようにがんばってくれ。
トリガーだと更新されたレコードはわかるけどSQL自体はわからないね。
変更履歴のログという感じには使える。というか使ってる。
556 :
NAME IS NULL:2007/11/01(木) 11:46:18 ID:zHDwSPx0
金額を切り上げた数字をSELECT文で書きたいのですがどうすればいいでしょうか?
例
1000⇒1000
1001⇒1100
1099⇒1100
と言う風に出したいのですが可能なのでしょうか?
SQL Serverをパブリッシャにして、外部のPostgreSQLをサブスクライバにして、
レプリケーションを行いたいと考えています。
単純に、PostgreSQL用のODBCドライバを組み込んで、SQL Serverからサブスクライバとして
登録しようとしましたが、
SQL Server側からは、OracleとIBM DB2しか見えていないようです。
どなたか原因が分かる方がいらっしゃいましたら、教えて下さい。
>>555 実行したいのですが、ログがとれるとわからないと経費が下りないんで手元にモノがないのです
プロファイラというのを実行すればSQLコマンドのログを指定のフィルタを通したものだけ保存できると思っておkですか?
>559
プロファイラはSQLServer付属のツール。
SQLServerすらも手元にないとでも?
プロファイラの理解はそれでおk
>>559 いったいどんな会社だ?評価版とかあるだろうが。新人に何も教えず丸投げとか?
でも新卒だとしてももう半年以上経ってるんだしなあ。
ちょっとは隣の席の人とでも会話したほうがいいんでねーの?
562 :
NAME IS NULL:2007/11/02(金) 21:11:31 ID:gdtcmQpZ
SQLserver2005EEというのがタダらしいのでそれで調べたいと思います
ありがとうございました
>2005EE
エンタープライズ エディションと一瞬勘違いしたじゃないか w
エキスプレス エディションね
管理用のGUIツールが付かない点と、DBのログオプションが
シンプル(切り捨てモード)と言う以外は、同じように使えるんじゃないかな。
SQL Server Management Studio Expressも思い出してあげてください
思い出しました。
確かに、そういう便利な純正ツールもあるよな。
社内のデータベースを、エクスプレス・エディションで動かしたら
何か問題あるかな?(ライセンスの)
VisualStudioの奴は業務で使うとライセンス違反らしいが…
エキスプレス エディションってなんかの汁でも出るのかよwww
くだらんつっこみだなぁ
頭の悪さがにじみでてるな
アメリカンエキスプレスとか普通に言うし
どうでもいいだろう。
汽車の窓からハンケチふれば牧場の乙女も花束投げる♪
エキスプレス、ビルヂング、ハンケチ・・あんにゅい感じがして好きだな。
eXPress EditionでXPの方がEnterprise Editionとかぶらなくていい。
ただWinXPとかぶるからMSはやらないだろうが。
>>567 まあ気付いてると思うけど、それに突っ込みいれてる一番つまらないのは君だからね
はいはい(苦笑
571 :
NAME IS NULL:2007/11/05(月) 14:38:35 ID:wDZ2lOpO
初心者質問ですがよろしくお願いいたします。
SQL Server Management Studio 2005で
データベースの復元中に処理を中断したら、
データベース名(復元しています...)と表示されました。
データベースのプロパティを開こうとすると
「データベース'データベース名'は開けません。復元中です。
(Microsoft SQL Server、エラー:927)」
と表示されます。
それから3時間程ずっとその状態なんですが、
まってればそのうち復元が完了するのでしょうか??
どなたか原因及び解決方法が分かる方がいらっしゃいましたら、
教えて下さい。
運用開始後、テーブル設計を変更(追加/更新)する場合、
更新版DBのテーブルを空にして、運用サーバを一旦落とし、
運用版→更新版にデータを取り込むんでしょうか?
運用版DBと更新版DBの構造を比較して、更新部分のSQL文を生成して
くれるツールがあるのでしょうか?
新テーブル CREATE
旧テーブルから新テーブルへデータコピー UPDATE
単純にこれだけじゃないのか?
VB.NET とか、 ASP.NET で簡単にプログラム組めば終わりのはずだが
サーバを落とす必要性を考えた理由は?
>572
エンタープライズマネージャでテーブルを変更するときのクエリを保存したり、
Visioでテーブル構造を取り込んでそれを反映したりとかできる。
自動で作られるクエリは一時テーブルにデータを移して作り直しだからデータ量が多いと結構痛いことになるかも。
データ量が多いテーブルで列追加くらいならalter tableを自前で書いてるよ。
列のサイズが変わったりとか大幅に変更になる場合は動かしながらは無理。いったん止めないと駄目だね。
575 :
NAME IS NULL:2007/11/07(水) 09:15:33 ID:ou6vFdyT
すみません、初心者です。
知っていたら教えて欲しいのですが、
SQLServer2000使用で、フィールド数を300程度を設けたいのですが、
Access2003からSQLServer2000を参照する場合、
全部のフィールドを参照・編集することはできるのでしょうか?
確かAccessは使用可能フィールド数が255だったと思うのですが・・・
質問です。
[サーバ]
WindowsServer2003
SQLServer2005
上記のサーバが複数台、LAN上に配置されています。
各サーバには、各サーバ上で動作するストアドがあります。
このストアドを更新する際、各サーバ間でVersionを合わせる必要があります。
私の知識では、各サーバ上でALTER PROCEDUREを流すことしか思いつかないのですが、
他に便利な方法等ありますでしょうか?
よろしくお願いいたします。
577 :
572:2007/11/07(水) 13:11:47 ID:???
>>573>>574 レス、有り難うございます
> データ量が多いテーブルで列追加くらいならalter tableを自前で書いてるよ。
旧DBの新DBを完全比較して、更新用のDDLを生成してくれるツールがあると、
それをユーザに配布して、実行してもらうだけで済むので凄く楽なんですが。
すべての変更点をDDL文に落とすおは、私には厳しい感じです
次善策として、テーブルを空にした新DB.MDFを拠点の管理者に配布
して、アタッチして、旧DB.MDFのテーブルデータを全部取り込むし
かないのかな、と。
(これだと旧DB.MDFをDropした後に、新DB.MDF→旧DB.MDFに戻さない
といけないような)
> サーバを落とす必要性を考えた理由は?
一般ユーザの旧DBへのデータ更新を防ぐため、だったのですが、
一般ユーザがアクセスできないようにすれば、サーバは落とす
必要はないですね
>>575 フィールド300もあるテーブルの設計に問題はないのかと・・・
>>578 だよな。1フィールドの中に色々詰め込んでプログラムでばらせば半分以下だぜ。
580 :
NAME IS NULL:2007/11/07(水) 17:24:03 ID:ou6vFdyT
>>578>>579 すみません、575です
仕様上どうしても255以上、300程度のフィールドを設けねばならず、
複数フィールドの内容を1フィールドにまとめずに処理をしたいのです
581 :
NAME IS NULL:2007/11/07(水) 18:11:24 ID:Wr3F4zOP
200って1レコードに設定できる最大バイト数がきまってるってほんとか?
SSISってなんだよ?
普通にC#でDBアプリケーション作っちゃいけないのかよ?
583 :
まりも:2007/11/07(水) 22:55:38 ID:NVJ4rdlb
SQLServer初心者です。
DB内のハングル文字をウェブで表示したいのですが、可能可能でしょうか?
まずは、お聞きしたくてカキコしました。
584 :
まりも:2007/11/07(水) 23:26:25 ID:NVJ4rdlb
SQLServer初心者です。
クエリで取得したDB内のハングル文字をウェブで表示したいのですが、化けてしまいます。
ハングル文字でちゃんと表示する事は、技術的に可能なのでしょうか?
サーバーOS:windows 2000 server(言語defaluet日本語/韓国語ほか追加済)SQLServer 2000
IIS5/Coldfusion5
表示側はUTF-8で、直書きしたハングル文字は正常に表示されていて、DBで取得した文字に関してのみ化けています。
スレ違いの気もするのですが、まずはDB側ハングル文字扱いの際の設定が正しいかどうか確認したくてカキコしました。
どうかよろしくお願いいたします。
585 :
まりも:2007/11/07(水) 23:31:53 ID:NVJ4rdlb
フィールドの設定は、
nverchr
照合順序をKoreanWansung_CI_AS
にしてみましたが、だめでした。何が足りないのでしょうT。T
たぶん、ハングルについて答えられる人は2chには居ないだろうな。。
DBにハングルでちゃんと記録されているなら
アプリかWebサーバの問題。
同じようなことをMysql&Apacheで経験しているが
そんときはKoreanのクソサーバが原因だった。
588 :
まりも:2007/11/08(木) 00:56:21 ID:fOua6aLw
ガーン!2chならいらっしゃるかと・・
589 :
まりも:2007/11/08(木) 01:00:38 ID:fOua6aLw
>587様
ありがとうございまs。
DBにハングルが記録されているかどうかの確認ですが、
例えば、エンタープライズマネージャーでデータを表示し、
フィールド内の文字列をコピペして、
テキストでハングル表示されれば、
ちゃんと記録されていると判断してますが、それはOKでしょうか?
それだけでも、切り分けられれば前に進みます。
590 :
まりも:2007/11/08(木) 01:13:10 ID:fOua6aLw
SQLServer自体にハングルに対応するための言語パックみたいなものが
必要なのかと思っていたのですが、そうでなければ、クエリ取得から、
出力時のエンコードの問題になるのかと。。
DB側は関係ないんですかね。。何の文字が入ってても。。
591 :
まりも:2007/11/08(木) 01:15:20 ID:fOua6aLw
はぁ。。まりも、まりもっこりしちゃいそうです。。
>>580 複数フィールドをまとめるとか言っている時点で失礼だがDBに対して
あまり知識がないと思われ・・・試しにその仕様というのを簡単にここに書いてみれば
幸せになれるかも。
あくまで300フィールドで突き進むというのなら止めはしないが・・・
ちゃんと正規化してその数値なら私の知らない異次元の方なので
ごめんなさいです。
とりあえずここは邦人スレの方向でお願いしますニダ
>>575 こういう質問は素直にMSに投げた方が良いと思われ
仕様の限界を超えた場合の挙動のテストなんてユーザがやるか?普通。
>>575 試しにSQLServerでテーブル作ってみた
create table foo(
fld001 varchar(50) primary key,
fld002 varchar(50),
...以下 fld300まで続く
で、作成時に
警告: テーブル 'foo' が作成されましたが、最大行サイズ (15658) が行ごとの最大バイト数 (8060) を超えています。
このテーブルの行の INSERT または UPDATE は、結果の行の長さが 8060 バイトを超える場合は失敗します。
なんてのが出た。
次にACCESS2003でODBC接続でリンクした場合、fld255までしか見えない。
次にADPファイルで接続した場合、fld300まで見えた。
適当にデータを入れたり(全フィールドには入れなかった)したけど特にメッセージは出なかった。
面倒なのでこれで終わり。
596 :
NAME IS NULL:2007/11/09(金) 11:45:15 ID:SU8Cv9DR
declare @cursor int;
exec sp_cursoropen
@cursor=@cursor output,
@stmt=N'exec sp_tables';
これを実行すると、exec sp_cursoropen の実行時に
「キーワード 'declare' 付近に不適切な構文があります。」
といわれてしまうんですが、
sp_cursoropenの@stmtの中にexecは使えないのでしょうか?
cursorが予約語だから。
600 :
NAME IS NULL:2007/11/12(月) 23:59:31 ID:GUgahVXu
'とか"とか%とかは
' はSQL文のシングルコートと競合する可能性があるので使わないか ''(シングルコート2つ)で記述する
" はSQL文やプログラム内のものと競合するので使わない
% はワールドカードで使うので使わない
という認識をしてますが間違ってますか?
上記以外にもSQL文につかうとまずい文字ってありますか?
601 :
NAME IS NULL:2007/11/13(火) 00:13:27 ID:xXvnlMUm
SQLServer2000で稼働させていたストアドプロシージャを新しいマシン上でSQLServer2005に移行して動かしたところ、
マシンのスペックはCPU、メモリともに大幅に増強されているにも関わらず、パフォーマンスが落ちてしまいました。
どんな原因が考えられるでしょうか?
統計情報は更新しています。
604 :
NAME IS NULL:2007/11/13(火) 11:48:02 ID:ix6NkP0r
トランザクション分離レベルについて質問です。
トランザクション分離レベルを常にREPEATABLE READ
にしておきたいのですが、そのような設定は無理なのでしょうか?
いくつか解説を見ると、
トランザクションの最初に、
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
として、実行することと書いているのですが、
これだと、毎回書かないといけないので、めんどくさいのですが。
>>604 MSSQLではSET TRANSACTION ISOLATION LEVELは
接続に対する命令なので接続後に1回書けばいい。
BEGIN TRANSACTION毎に書く必要があるのはPostgreSQLがそう。
たとえば項目が2000個ある場合など、どのようにテーブル設計すればよろしいでしょうか?
TEST-0001:123
TEST-0002:789
:
:
TEST-2000:999
Hi! Nice site!
610 :
Vista:2007/11/16(金) 17:51:30 ID:klWd0S4A
Vista+MSDE2000について質問です。
Vistaにサポート外のMSDE2000をインストールしたらうまく動作しました。
ところが、
XPからネットワーク接続できますが、
Vistaからは接続できません。
ファイアウォールやUACを無効化してやってみましたが、
現象変わらずです。
子機Vistaから親機VistaのMSDE2000に接続する方法を
どなたかしりませんか?
611 :
NAME IS NULL:2007/11/16(金) 19:44:53 ID:vV6+8oUu
うまく動作してへんやん
612 :
NAME IS NULL:2007/11/16(金) 20:16:47 ID:BR8EDWie
サポート外やん
613 :
NAME IS NULL:2007/11/16(金) 22:26:17 ID:XD+hACtW
TSVファイルのインポート方法で質問です。
現在、TSVファイルをインポートするプログラムを作成中なのですが
BCPかBULK INSERTを使用しようと思っています。
問題はこのTSVファイルの末尾5行が
サマリーレコードになっており、カラム数が他の行とあっていません。
アプリで末尾5行にTABを付加してインポートした後に削除してもいいのですが
このファイルには数百万レコードのデータが格納されており性能劣化を懸念しています。
末尾5行は固定なので高速に削除するか編集する方法はありますか?
もしくは、BCPに末尾5行を読み込まないか不足しているカラムを
強引にインポートする方法はありますか?
SQL Server 2000をSQL Server認証モードで使用しています。
saのパスワードをいつ変更したのか、最終変更日時を調べる
方法はあるのでしょうか?
もしパスワードハッシュが見られるのでしたら、その方法でも
結構です。
よろしくお願いします。
SQLserver2000を勉強中ですが
自動コミット トランザクション モード (SQL Server 既定)
明示的なトランザクション モード
暗黙のトランザクション モード
上記のどのトランザクションモードか調べるにはどうしたらいいでしょうか?
SQLServer2005で Oracleのシーケンステーブルのような
テーブルを作成したいと考えていますが
SQLServer2005で実装するには、どのようにすれば良いでしょうか?
自分で調べてみたのですが、オートナンバー型はあるようですが
Oracleのシーケンスのように、使えるものが見つかりませんでした。
DBCC CHECKIDENTは?
>>616 主処理のトランザクションを開始する前に独立したトランザクションで必要な番号を採っておく。
または主処理とは独立したセッションを開きそこで番号を取得する。
主処理のトランザクションに採番処理を含むとデットロックやパフォーマンスの低下を招く。
>>617 >>622 ありがとうございます。
DBCC CHECKIDENTでも代用できる部分があったのですが
どうしても、番号だけ取得したい場合に
無駄なデータが増えてしまってどうも無駄な気がしたので聞いてみました。。
現在は、裁判用テーブルを作成して テーブルロックをかける→値取得→アップデート
という流れで実現可能か、確かめてみている所です。
test
nanikore?
ストアドプロシージャで以下のような感じで、hoge列の値を戻り値としたい場合は
どうのように記述するのでしょうか?
返されるレコードは必ず1件のみです。
SELECT hoge FROM Foo WHERE hoge = 1
>>636 ストアドプロシージャの構文覚えてきなさい。
まず、変数の宣言とDISTINCTについて勉強しましょう。
ストアドプロシジャ化する必要があるのかな?
あと、値を返すだけだったらストアドプロシジャよりはストアドファンクションの方が楽だったりするし。
(ストアドプロシジャもOUTPUTオプションで戻り値を返す引数として宣言できるけどね)
ちなみに、今回の要件だったらストアドプロシジャ化しなくても、以下の構文で取得できる。
(hogeはINTだと仮定)
DECLARE @hoge INT
SELECT @hoge = hoge FROM Foo WHERE hoge = 1
DECLARE @hoge INT
@hoge = 1
でいいと思う
640 :
NAME IS NULL:2007/11/30(金) 20:14:18 ID:dJBxApwF
ACCESSからSQL Serverのテーブルをリンクしてます。
カレントDBのADODBコネクションに対してひとつのトランザクションで
多数のリンクテーブルを結合して結構複雑なSELECT文と
UPDATE文やINSERT文やDELETE文を混在させていっぱい実行したとき、デッドロックっぽいものが起きます。
(トランザクションの途中のUPDATE文でACCESSで「ODBC接続に失敗しました」とエラーが出るんだけど、
それまでに何回かはおなじUPDATE文が成功しています)
んで、SQL Server Profilerで様子を見ると、
ACCESSではひとつのトランザクションでおこなっているはずなのに複数のSPIDを使ってるではないですか!
てことは自分で自分に対してデッドロックしてるのでは?と思うのですが、当たってるでしょうか。
んで、回避方法はあるでしょか・・・結構複雑なSELECT文をビューや関数にするといいのかなぁ。。
ファイルがインプットだからストアドプロシージャはちときついですのん。
____
/ \
/ ─ ─ \
/ (●) (●) \
| (__人__) | それはない
\ ` ⌒´ ,/
r、 r、/ ヘ
ヽヾ 三 |:l1 ヽ
\>ヽ/ |` } | |
ヘ lノ `'ソ | |
/´ / |. |
\. ィ | |
| | |
自宅で使うならトライアル入れておけばいいだろ。
いや、勿論そうしますけど w 、Developoer Edition の条件はそういう風に捉えて良いのかなと思ったわけで。
自宅とか関係なく、開発用に使う分ならいい。
了解です m(__)m
実行プランでindex seekとかhash matchとか出ているのですが
hash matchってどういう意味っすか?
ハッシュ結合
649 :
初心者:2007/12/02(日) 23:17:41 ID:r6XgxIY/
はじめまして。初心者です。
突然ですが質問があります。
SQL SERVER 2005 で、自動的(1時間ごとに)にバックアップをとり、48時
間分のファイルを保存しておきたい時はどのようにしたらいいのですか。
みなさまのお力をお貸しください。(__)
まず、ログファイルの管理方法をどうするのか。
バックアップファイルのサイズがどの程度なのか。
スケジューラを使うのか等を決めた方がいいよ。
651 :
初心者:2007/12/02(日) 23:34:06 ID:r6XgxIY/
name is null さん
返答ありがとうございます。
基本的にフルバックアップです。
サイズはは100メガくらいです。
スケジューラは使います。
ログもそのまま保存します。
name is null さん
name is null さん
name is null さん
>>651 そこまで決まってて、何が聞きたいんだ?
俺、エスパーじゃないし、、、
654 :
初心者:2007/12/03(月) 15:02:44 ID:ukVIXvlY
超初心者で、上司に頼まれて徹夜でしらべてたっす。
定期バックアップは分かりました。
1時間ごとのバックアップを取り48時間分のデータのみ保存しておきたいときは
何をどのようにすればいいのですか?
その48時間以降のものは削除する方法といいますか。
よろしくお願いします。
間隔48hのスケジュールでバックアップデータを48種類作成し、上書きすればいいんじゃね?
656 :
初心者:2007/12/03(月) 16:31:07 ID:ukVIXvlY
657 :
NAME IS NULL:2007/12/03(月) 22:52:15 ID:G/RsR7SD
単にテーブル名に変数を使いたいのですが無理なのでしょうか?
SELECT * FROM @TABLE
テーブル変数ってのは調べましたが目的が違うようですし…。
658 :
NAME IS NULL:2007/12/03(月) 23:48:17 ID:GpJGGX+L
OracleDBに対してクエリを投げるときに変数は無理?
>>657 EXECUTEかsp_executesqlを使うといいかも。
※ただしSQLインジェクションには注意。
SQLインジェクション対策のため、sp_executesqlを推奨。
(例)
EXECUTE('SELECT * FROM ' + @TABLE)
>>658 > OracleDBに対してクエリを投げるときに変数は無理?
Oracleとはリンクサーバーとして接続?
「変数」ってどんな事をやりたいのかが判らないけど、
問題なく使えると思うけど。
661 :
NAME IS NULL:2007/12/04(火) 09:25:14 ID:2qzlgR1W
658です。SQL Server 2005使ってます。
OLEデータソースのアクセスモードをSQLコマンドにしてクエリを直接入力する時に変数使いたいんですけど、
OLEDB接続マネージャがOracleを指していると、変数で?が使用出来ないんですよね。
更に、必ず、OKボタンで警告でるんですよ。。。
コンポーネントのロケールIDのコードページがなんちゃらかんちゃらって訳わからんとです。
test
663 :
657:2007/12/04(火) 13:32:19 ID:???
664 :
657:2007/12/06(木) 13:27:41 ID:???
教えて戴いたsp_executesql 試してみましたが、こちらもテーブル名で変数の利用はできませんでした・・・。
スマートじゃないけど諦めてIF文で分岐させて、そのままSQL記述することにしまつ
>>664 なんか勘違いしていると思われ。SQL ステートメントを varchar 型で作って sp_executesql に渡すんだよ。
こんな感じ。
〜
DECLARE @SQL_STATEMENT as varchar(255)
SET @SQL_STATEMENT = 'SELECT * FROM ' + @TABLE -- CAST が必要な場合は適宜 CAST する
PRINT @SQL_STATEMENT -- これで SQL ステートメントを表示して、中身が正しいか確かめる
EXECUTE sp_executesql(@SQL_STATEMENT) -- 実際に SQL ステートメントを実行する
SQL Server 側のトリガで、接続元クライアントの情報(IPアドレス、コンピュータ名など)
を取得するにはどうしたらよいでしょう?
無理でしょうか?
>>666 SQL Server 2005以降ならSQL CLRでプロシジャを作ればできると思う。
668 :
NAME IS NULL:2007/12/07(金) 01:43:39 ID:R8ptFJiN
ReportingServicesの質問もここでいいのかな?
Reporting Services 2000を別サーバにあるReporting Services 2005に移行したいのですが、
なんかいい方法ないですか?
Reporting Services 2005側はインストールしただけなので何でも出来ます。
なんにせよ情報が少なすぎて・・。
669 :
NAME IS NULL:2007/12/07(金) 10:52:06 ID:W82n5Pzl
ADOスレで聞いていましたが、スレ違いのようなのでこちらに移動してきました。
以下転載+追記です。 何か対応方法をご存知の方がいれば、教えていただけたらと思います。
環境:
Win2003ServerR2 SP2 英語版 最新パッチインストール済み
SQL Server 2000 Standard SP3
現象:
以下の内容でDBを新規作成しました。
"CREATE DATABASE MyTestDB
ON PRIMARY (NAME = MyTestDB_DAT ,FILENAME = 'D:\MyTestDB\MyTestDBData.mdf', SIZE = 1MB,FILEGROWTH = 10%, MAXSIZE = UNLIMITED)
LOG ON (NAME = MyTestDB_LOG, FILENAME = 'D:\MyTestDB\MyTestDBLog.ldf',SIZE = 1MB, FILEGROWTH = 10%, MAXSIZE = UNLIMITED )"
次にEnterprise Managerを使って、作成したDBの完全バックアップ→差分バックアップを行いました。
この時点では完全・差分共にバックアップは正しく取れて、リストアも可能です。
この後ntbackupを使ってD:\以下にあるDBには関係の無いファイルをバックアップすると、
MyTestDBのリストアダイアログを表示したとき作った覚えのないバックアップセットが自動的に作られてしまい、DBが復旧できなくなります。
また、D:\MyTestDB1 D:\MyTestDB2 と複数DBを作って同じことを試すと両方のDBに影響が出ます
その後調べたところ、ntbackupの実行でmsdbのバックアップ関連のテーブルに不要なレコードが追加されていることがわかり
不要レコードの削除で、見かけ上は不要なバックアップセットを消すことができました。
しかし、この状態では完全バックアップは問題なくリストアできますが、差分バックアップのリストアに失敗します。
差分バックアップをリストアした場合のエラーは以下のような内容でした。
Microsoft SQL-DMO (ODBC State: 42000)
Cannot apply backup on device 'BAKファイルのフルパス' to database 'MyDB'. RESTORE DATABASE is terminating abnormally.
ntbackupを実行せず、DBのバックアップのみ行った場合は特に問題なく動作しています。
670 :
664:2007/12/07(金) 14:44:21 ID:???
>>665 すみません。詳しく書いてなかったのですが、OPENXMLでWITH句?にテーブル名割り当てしてるので、
このテーブル名には変数使えないみたいです。
>>669 なんか ntbackup + Volume Shadow copy Service を使ってデータベースと同じボリュームにあるファイルをバックアップすると、その次は完全バックアップを取ってからじゃないと差分バックアップがとれなくなるんだよね。
sql2k5 でも同じ問題がおきるけど直せないんだってさ。VSS をとめてから ntbackup するか(これで大丈夫かは覚えてない。試してくれ) ntbackup した後は完全バックアップをとってしのぐしかない。MSDE Writer とかもからんでるらしい。
http://www.mdscj.org/portal_memberdata/portraits/mercenaries mercenaries
,
http://www.mdscj.org/portal_memberdata/portraits/callofduty4crack call of duty 4 crack
,
http://www.mdscj.org/portal_memberdata/portraits/Europauniversalis Europa universalis
,
http://www.mdscj.org/portal_memberdata/portraits/penumbra penumbra
,
http://www.mdscj.org/portal_memberdata/portraits/Europauniversalis Europa universalis
,
http://www.mdscj.org/portal_memberdata/portraits/callofduty4crack call of duty 4 crack
,
http://www.mdscj.org/portal_memberdata/portraits/Europauniversalis Europa universalis
,
http://www.mdscj.org/portal_memberdata/portraits/area51secrets area 51 secrets
,
http://www.mdscj.org/portal_memberdata/portraits/fearparseusmandate fear parseus mandate
,
http://www.mdscj.org/portal_memberdata/portraits/fieldops field ops
,
1つのテーブルで最大何レコードくらい扱ってる?
一億レコードとか無理?
>>673 2000 Ent SP4と2005 Ent SP1で1億レコードの実績あるよ。
1レコードのサイズは忘れた。
675 :
NAME IS NULL:2007/12/11(火) 17:41:47 ID:gi58fe7W
インストールについて質問です。
HDDが二つあるんですが、Cドライブは、あけておきたいので、
Dドライブだけにインストールしたいと考えているんですが、
詳細選択で、Dドライブだけ選択しても、Cドライブにインストールされてしまいます。
Dドライブだけにインストールする方法はありませんか?
676 :
NAME IS NULL:2007/12/11(火) 23:25:05 ID:wms2Xoe4
@Return Valueの番号とエラー内容対応表みたいなのどこかにあります?
探しても見つからなくて、例えば一意制約違反なら-4が返るとか
>>675 common files の呪縛からは逃れられない
OSをDに突っ込むか、
あるいは容量だけが気になるなら、
名無しパーティションを作成した上で
common files\mssql
とかにマウントするとよろしい
678 :
NAME IS NULL:2007/12/12(水) 14:23:56 ID:0a54ISX9
はじめまして、リンクサーバーについてお教え頂きたく書き込みました。
SQLServer2005のExpressを使っています。
データをAccessのmdbファイルのテーブルに書き出そうと、以下の方法を試しましたが
どちらもInsertできませんでした。
SQLServerにはSQL認証のsaでログインしています。
1、リンクサーバーを設定し、以下のSQLを作成
INSERT INTO LINKMDB...Table1(コード, 項目, 登録日時)
SELECT コード, 項目, 登録日時 FROM sTable
結果:
[dbo].[StoredProcedure2] を実行中.
リンク サーバー "LINKMDB" の OLE DB プロバイダ "Microsoft.Jet.OLEDB.4.0" から、
メッセージ "更新可能なクエリであることが必要です。" が返されました。
リンク サーバー "LINKMDB" の OLE DB プロバイダ "Microsoft.Jet.OLEDB.4.0" で
テーブル "[LINKMDB]...[table1]" を INSERT INTO できませんでした。
該当する行はありません。
(0 行が返されました)
@RETURN_VALUE =
[dbo].[StoredProcedure2] の実行が完了しました。
2、リンクサーバーを解除し、OPENROWCOUNT を使ったSQLを実行、
セキュリティ構成で使用を許可
INSERT INTO
OPENROWSET('Microsoft.Jet.OLEDB.4.0','c:\test.mdb';'admin';'','SELECT コード, 項目, 登録日時 FROM Table1')
SELECT コード, 項目, 登録日時 FROM sTable
結果:
[dbo].[StoredProcedure1] を実行中.
リンク サーバー "(null)" の OLE DB プロバイダ "Microsoft.Jet.OLEDB.4.0" から、
メッセージ "複数ステップの OLE DB の操作でエラーが発生しました。
各 OLE DB の状態の値を確認してください。作業は終了しませんでした。" が返されました。
リンク サーバー "(null)" の OLE DB プロバイダ "Microsoft.Jet.OLEDB.4.0" から、
メッセージ "複数ステップの OLE DB の操作でエラーが発生しました。
各 OLE DB の状態の値を確認してください。作業は終了しませんでした。" が返されました。
リンク サーバー "(null)" の OLE DB プロバイダ "Microsoft.Jet.OLEDB.4.0" に対するクエリ
"SELECT コード, 項目, 登録日時 FROM Table1" を実行できません。
UPDATE/DELETE/INSERT ステートメントで必要なインターフェイスをプロバイダがサポートできませんでした。
プロバイダが、他のプロパティまたは要件と競合が発生したことを示しています。
該当する行はありません。
(0 行が返されました)
@RETURN_VALUE =
[dbo].[StoredProcedure1] の実行が完了しました。
残すはADOで開いて・・・と考えていますが、ストアドでスパッとできればと思いまして。
よろしくお願いいたします。
679 :
NAME IS NULL:2007/12/12(水) 16:27:40 ID:c6/wQ7we
初心者質問すません。。
SELECT文内の項目値を再利用したいときどう指定したらいいのでしょうか。。
実際はもっと複雑な計算式なので、計算式を複数回書くのはちょっとと思ってます。
副問い合わせしたらいいんですが、再利用できたらいいなぁと。
(ORACLEだったらできたような・・・)
--テスト用テーブル作成文(削除は手でしてください)
create table TBL_A(COL_KEY int, COL_A1 int)
create table TBL_B(COL_KEY int, COL_B1 int)
--「列名 'TMP_A' が無効です。」エラー発生SELECT文
select TBL_A.COL_A1 * TBL_B.COL_B1 as TMP_A,
case when TMP_A >= 0 then 'プラス' else ' ' end
from TBL_A inner join TBL_B on TBL_A.COL_KEY = TBL_B.COL_KEY
--TMP_Aの代わりに計算式をそのまま書いたら検索できるSELECT文
select TBL_A.COL_A1 * TBL_B.COL_B1 as TMP_A,
case when (TBL_A.COL_A1 * TBL_B.COL_B1) >= 0 then 'プラス' else ' ' end
from TBL_A inner join TBL_B on TBL_A.COL_KEY = TBL_B.COL_KEY
すません、どなたか回答くださいませm(_ _)m
SQL Server 2005 Enterpriseをインストールすると、
Visual Studioが一緒に入っているのがわかりました。
これって、Visual Studio 2005の製品版と同じものでしょうか?
知識がないので、教えていただければと思います。
682 :
NAME IS NULL:2007/12/12(水) 20:52:02 ID:IXuZw2+V
SSISでパッケージ作って、
MSDBにインポートしたけどパッケージ修正したい時はどうすればいいのですか
あとまともなSSISの本とかないですか
>>674 キー項目次第か?単純なINTのみなら実用になるか?
684 :
NAME IS NULL:2007/12/12(水) 23:54:00 ID:y01m2iYd
すげー1億レコードなんて耐えられるんだ・・
素人に毛が生えた程度の俺なんて、次のシステム1000万件と聞いて不安がってるんだけど
全然大丈夫なんですね
初歩的質問になりますが、どうぞよろしくお願いします。
Microsoft SQL Server Management Studio を使って SQL Server 2005 Express
Edition のデータベースに接続し、そこでデータベース名を変更したのですが、
Data ディレクトリに入っている実際のデータベースファイル名(*.mdf および
*_log.ldf)には変化がありませんでした。これらを新しい名前に変更して
SQL Server 2005 Express Edition で認識させるにはどうすれば良いでしょうか?
>>679 根本的な解決じゃないけど、ストアドファンクションを使ってみては?
例)
CREATE FUNCTION foo(@COL_A1 AS INT, @COL_B1 AS INT)
RETURNS nvarchar(3)
AS BEGIN
IF SIGN(@COL_A1 * @COL_B1) >= 0 BEGIN
RETURN N'プラス'
END
RETURN N''
END
使い方)
select TBL_A.COL_A1 * TBL_B.COL_B1 as TMP_A, .dbo.foo(TBL_A.COL_A1, TBL_B.COL_B1)
from TBL_A inner join TBL_B on TBL_A.COL_KEY = TBL_B.COL_KEY
>>685 デタッチ→ファイル名変更→アタッチでどう?
スレ違いでごめんなさい・・・
データグリッドで1レコード複数行表示が可能なおすすめのフリーソフトってありませんか?
690 :
NAME IS NULL:2007/12/19(水) 09:58:01 ID:oHeoFdmn
>>686 遅レスすまそ、レスありがd。
ファンクションしか手がないっすか、計算を2回するっちゅーことになるのですよね。
副問い合わせとファンクション使用どっちがパフォーマンスいいかなぁ。。
691 :
NAME IS NULL:2007/12/20(木) 04:00:54 ID:0sj1sf8I
すみません、教えてください。
普段BAMP(FreeBSD,Apache,MySQL,PHP)環境でWEBの仕事をしているものです。
今回はお客様の要望でWin Server 2003 Enterprise, IIS, SQL Server 2005 Enterprise, PHP
環境での開発をしなくてはならなくなりました。
ただWin Server,SQL Serverは様々なエディションがあり、
どれを購入してよいかわかりません。
お客様と同じものを用意するのが普通でしょうが、
Webアプリ開発でのテスト用にしか利用しないため、
最安価にしたいのです。
Win Server 2003は Standard 5CAL 12万くらいのものにしようと思います。
SQL Server 2005については、Developerという5000円くらいの非常に
安価なものがあるのですが、これは開発、テスト用に問題ないものでしょうか?
よろしくお願いします。
692 :
NAME IS NULL:2007/12/20(木) 04:28:40 ID:0sj1sf8I
>692
OSもMSDNライセンスのなら10万程度のがある。
ほんのちょっぴり安い。
>>692 Visual Studio with MSDN Subscriptionなら開発環境(Visual Studio)から
OS、SQL ServerのDeveloper Editionまで付いてくるから、開発/評価なら
これ一本でOKかも。
695 :
NAME IS NULL:2007/12/20(木) 11:23:41 ID:Ldxr3WPw
2005 JDBC Driver 1.1 を付属のサンプルソースで動かしてみたのですが
接続エラーになります。ほんとにこのドライバ動くの?
と疑問を感じてるのですが、だれかJDBCを使っている人いますか?
696 :
NAME IS NULL:2007/12/20(木) 11:50:09 ID:Ldxr3WPw
早い自己レスですが、試行錯誤してるうちに
ポート番号を指定しないようにしたら接続できることが判りました。
サーバインストール時にポート番号はデフォルトなので1433で
指定していましたが、もしやとサーバを確認したら別の番号になってました。
失礼しました。
ていうかIISとPHPの組み合わせは・・・
趣味とか社内だけのシステムならまあいいかもしれないけども。
サーバーOS:windows 2000 server(言語defaluet日本語) SQLServer 2000(SPなし)
でエンタープライズマネージャーからデータベース選択して「削除」を実行すると特定のデータベース
だけダンマリになってしまい削除できません。同じような経験をした人はいますか?他のデータベース
は削除できたんですが。。。すみませんが知ってる方御願いします。m(_ _)m
drop database
2つのDBにそれぞれコネクトし、それぞれの抱えるテーブルに
UPDATEやDELETEを同期を取って行いたいのですが
マニュアルトランザクション管理だと同一のコミット、
ロールバックを保証できないですよね?
既存の機能でTransactionScopeのようなもので出来るようにも
思えず、何かアドバイスをいただければありがたいです。
要は2層コミットがやりたいわけなのですが・・・
ロックかけてそれぞれ更新を確認できたらコミットすればいいんじゃないか?
>>702 ありがとございます。
そういうコードを書いてみたんですが、
trxB.Commit();
trxA.Commit();
↑これでもし、trxB.Commit()のあと(trxA.Commitの前)で
予期せぬ例外が発生したらと思うと夜も眠れなくなりました。
trxBの方はロールバックできないですよね…。
TransactionScopeで普通にできるだろ?
>>704 そうなんですか?
サンプルに別々のDBにコネクション2本張る例が
見つからなかったもので…
ならば頑張って試してみます。
スレ汚しすみません。
>>704 方法としては
>>703のコードを
TransactionScopeで囲んでおけばよいというイメージですよね?
どうもありがとうございました。
>>704 2個目のコネクションにOpenしにいった時点でプロセスが固まりましたw。
やっぱり出来ないみたいですね〜。
他をあたってみます。
>>708-709 フォローありがとうございます。
結論から言えば、DBは同じSQL-Server配下なので、
Aの更新後、ChangeDatabaseを使ってBに切り替えて更新…という方法で
試したところ目的は達成されました。
711 :
NAME IS NULL:2007/12/28(金) 11:35:15 ID:vrIVVzNe
すみません。
固定長のデータを、テーブルにインポートしたいのですが、
「未知のバージョンのBCP…」でフォーマットエラーとなり、
データをインポートできません。
どうすればよろしいのでしょうか、
よろしくお願いします。
因みに、動作環境は、SQLServer2000です。
>>711 フォーマットファイルの書式がおかしいと思われ。
1行目にバージョン情報、2行目に列数を書く必要があるけど、それが書かれていないと思う。
詳しくはBooks Onlineを参照。
713 :
NAME IS NULL:2008/01/09(水) 16:25:21 ID:tcuNBDxU
SERVER1のSQLServer7から
SERVER2のSQLServer2005にデータを移行準備をしているのですが、
SQLServer2005上でSQLServer7のデータをOPENROWSETを使って取得して
INSERTするようにSQLを書いて実行したのですが、
SQL Server によって、コンポーネント 'Ad Hoc Distributed Queries' の STATEMENT 'OpenRowset/OpenDatasource' に対するアクセスがブロックされました。
サーバーのセキュリティ構成で、このモジュールが OFF に設定されているためです。
システム管理者は sp_configure を使用して、'Ad Hoc Distributed Queries' の使用を有効にできます。
'Ad Hoc Distributed Queries' を有効にする手順の詳細については、SQL Server Books Online の「セキュリティ構成 (Surface Area Configuration)」を参照してください。
というエラーが出てうまくいきません。
MSDNなどでAd Hoc Distributed Queries'を有効にする方法をググったのですが
行き詰ってしまいました。
「Ad Hoc Distributed Queries'を有効にする方法」とは具体的に
どのようにやればよいのでしょうか?
>>713 Editionによって違うかもしれないが、
Expressだとスタートメニューに「SQL Server 2005セキュリティ構成」というのがある。
その中の「機能のセキュリティ構成」で変更できる。
普通にオンラインバックアップして、リストアすれば済む話では?
716 :
sage:2008/01/10(木) 12:59:49 ID:UxlvsMOZ
>>715 最初にやってみたのですが、旧バージョン互換としてリストアされて
しまうようだったので、断念しました。
>>714 ありがとうございます。無事エラーが出なくなりました。
俺の会社はいまだに6.5。
今年は買い換えようと見積もり待ちだよん。
特に問題なければそのまま使い続けるのが基本。
新しくすれば、手間もコストもかかるし。
俺の会社もいまだに6.5。
主力は別の鯖で稼動してるし、
もう大した業務残ってる訳じゃないが
いつ死ぬか分からんのだけが心配。
今年はSQLite3にリプレース予定だよん。
>>719 SQLite3にリプレースてw
ファイルDBで十分なのかよw
721 :
sage:2008/01/15(火) 11:32:17 ID:GZ5unOPC
それだったら最初からmdbにしとけばいいのにといってみたりする
>>718 だよね。
でももうハード的にだめそうw
容量も足りない(´Д⊂
おれも2000Serverにファイルサーバ+Appサーバと一緒に7が入っているサーバ機があって
今度サーバ機をOSごと上げることになった。OSは2003で7は正式にサポートされてない
ということでDBサーバも2005に乗せ代えを余儀なくされた。
みんな貧乏会社なんだね・・・
もしかして、SQL Server 代ケチってるとか思ってるの?
バージョンアップに伴う人件費がもったいないからバー
ジョンアップしないだけだよ。
人件費の安そうな
>>724 みたいな会社は判断基準が違う
んだろうけどな。(w
SQLserverが高いよね・・・
729 :
NAME IS NULL:2008/01/21(月) 00:48:57 ID:uKZoGaJr
64ビット環境にExpress Editionをインストールしようと思うんだが、
この場合、wow64で動作するけどframeworkは32ビット、64ビットどっち入れればいいのかな?
730 :
NAME IS NULL:2008/01/21(月) 22:14:10 ID:WzKywxfz
DB開発を初めて2週間程経つのですが、抽出対象のDBが増えるにつれてわけがわからなくなってしまいます。
DBの結合を図で表現できるような機能はSQLServerにないでしょうか?
また、DBの設計仕様書ってどのように書けばいいのでしょうか
??? ?????? ????? ??????? ?? ??? ?????-?????
??? ?????? ????? ??????? ?? ??? ?????-?????
????-????? ????? ???? ???? ?&%
732 :
NAME IS NULL:2008/01/22(火) 09:57:15 ID:sRl7to0x
>>376 >>377 Microsoft SQL Server 2005 Express Edition Toolkit Service Pack 2をインストールすれば、
「C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTSWizard.exe」を実行することが可能みたいですね。
あまりに初歩的な質問で恐縮なのですが、教えていただけないでしょうか。
現在、XPsp2に、
Microsoft SQL Server 2005 Express Edition をインストールされています。
ここに、Microsoft SQL Server 2005 Express Edition with Advanced Services Service Pack 2 を
入れたいのですが、そのままインストールしてもいいのでしょうか。それとも
Microsoft SQL Server 2005
Microsoft SQL Server Native Client
Microsoft SQL Server VSS Writer
Microsoft SQL Server セットアップ サポート ファイル(英語)
を削除してからなのでしょうか。
with Advanced Services Service Pack 2 をつかってデータベースの勉強がしたいのですが、
データベースプログラムというのはシステムに深くかかわっていそうで、下手にこの状態で
インストールするとおかしくなるのでは?と、ずっと停滞しています。
よろしくご教示ください。お願いいたします。
>>733 2005 だけアンインストールしとけばいいよ。
それ以外は重複してインストールされることはないから。
質問です
使用環境
SQL Server2台(名称 SQL1、SQL2) (共に、OS:Windows 2000 sp4、SQL:2000 sp3)
SQL1,2のアカウントは
SQL1:sa、saasp
SQL2:sa
(SQL1,2のsaパスワードは同じ)
SQL1のOS上で、IIS稼動中(ASPアプリ利用)
SQL1に、SQL2に対してリンクサーバの設定済み。
プロパティのセキュリティタブの情報にて、
・マッピング情報は無し
・「次のセキュリティコンテキストを使用する」にチェックをしており、saアカウントを入力している。
SQL1に、ストアド(名称 sp1)があり、SELECT文を記載しており、FROM句にlinked_server_name.catalog.schema.object_nameの記述
問題点
SQL1のIIS上のASPからADO(アカウント:saaspでSQL1にログイン)で、ストプロsp1を実行したいが、以下のエラーが表示される。
「ログイン マッピングが存在しないので、リモート サーバーへのアクセスが拒否されました。」
クエリアナライザで、SQL1にsaでログインしsp1を実行した場合、エラー無く実行可能
クエリアナライザで、SQL1にsaaspでログインしsp1を実行した場合、同様のエラーが表示される
試行錯誤した事
1.マッピング情報を設定してみる
ローカルログイン:saasp、リモートユーザ/パスワードにsaとそのパス
→結果:改善せず
2.アカウントsaaspにサーバロールを付与してみる。
→結果:System Administratorsを付与したときのみ、エラーが出ない
その他のロールは、エラーが出る
質問
ロールSystem Administratorsを付与する以外での、エラーを出なくする方法は無いでしょうか?
System Administratorsは過剰な権限のため、付与を行いたくないところでして・・・
よろしくお願いいたします。
736 :
NAME IS NULL:2008/01/23(水) 20:27:32 ID:vDpEbHpG
質問させて下さい。
JDBCドライバのPreparedStatementにてWHERE句の値
にバインド変数を使用すると性能がかなり低下します。
おそらくインデックスを使用できていないのではと
考えていますが、原因及び対処方法をお願いします。
バインド変数の部分を通常のリテラル値に変更すると
即応答が得られます。
環境
Java VM 1.4
SQL Server 2000
SQL Server 2005 JDBC Driver
737 :
733:2008/01/23(水) 20:34:03 ID:???
>>734 そうなんですか、ありがとうございます。
やっと環境ができて、わくわくします。ありがとうございました。
>>736 こちらでは普通に使えてるから一般的な現象じゃないと思うよ。
具体的なSQLやプログラムコード、テーブルのスキーマ定義を出さないと回答は得られない。
>>735 まあ、とりあえず SQL 2000 に SP4 をインストールするとして、
このスレの
>>110 >>117 あたりから連なるレスを見るといいよ
740 :
735:2008/01/24(木) 17:26:58 ID:???
>>739 返事有難うございます。
投稿前に
>>110からの話は見ていたのですが、私も
>>141で書かれているように
矛盾した動きじゃないか?と思っていました。
同じ穴に落ちないように、個別設定したログインマッピングが完全にない事を確認し、
「次のセキュリティコンテキストを使用する」のみ適用されるように注意していました。
あとはSP4ですね・・・
稼動中システムなので、少し怖いですが検証してみます。
SP4以外での確認点などご存知の方がおりましたら教えて頂けますでしょうか。
741 :
NAME IS NULL:2008/01/24(木) 17:51:05 ID:QKpH9G9k
すいません。接続のことでお知恵を貸してください。
SQLServer2005を2台運転しているサーバがあります。
サーバAとサーバBにODBCの接続テストをやったところ
サーバAには接続できてサーバBには接続できません。
Windows認証とSQLServer認証どちらも駄目です。
ODBCのエラーメッセージはConnectionOpenで
「SQLServerが存在しないかアクセスが拒否されました」
とでます。
しかし、サーバBの接続時にホスト名ではなくIPアドレスを
指定したところ接続されます。
単純に名前解決ができていないと思いサーバBへ
「ping ホスト名」を実施したところ無事応答がありました。
どのような原因が考えられますでしょうか?
ちなみに二つのサーバの違いについてですが、
サーバAはインスタンス名がついていますが
サーバBはインスタンス名のないデータベースです。
また、サーバAはSP2があたっていますが
サーバBは当てていないと思われます。(管理者に未確認)
742 :
741:2008/01/24(木) 18:03:42 ID:QKpH9G9k
説明がおかしかったので訂正させてください。
>SQLServer2005を2台運転しているサーバがあります。
SQLServer2005を運転しているサーバが2台あります。
>>741 外部からの接続許可が
AはTCP/IPおよび名前付きパイプ
BはTCP/IPのみ
になってない?
744 :
735:2008/01/24(木) 18:43:35 ID:???
>>735です
(モヤモヤ感が残りましたが)解決しました。
SQL1→SQL2へのリンク接続ですので、まずはSQL1へSP4適用
適用後、テストするが同エラーメッセージ
SQL1に新規でリンクサーバ設定を作成し、テストすると成功
エラーが出たリンクサーバ設定は、リンクサーバ設定の設定名称と、リンク先の使用したいDB名を同じにしていたので、
そこがダメな要因だったのかと疑う。
他のSP3のSQL Server(SQL3とする)に、問題が出ていた設定と同じように
リンク先の使用したいDB名と同じ名称でリンクサーバ設定を行う。
SQL3からテストすると成功。
さかね・・・と思い、SQL1のエラーが出る設定を同名、同設定で作り直す。
テストすると成功・・・。
745 :
741:2008/01/24(木) 18:57:38 ID:QKpH9G9k
>>743 ありがとうございます。
外部からの接続許可は
AがTCP/IPのみ
BがTCP/IPおよび名前付きパイプ
になっていました。
今確認がとれましたが
ODBCからのBへ接続を試みたときは
名前付きパイプだと接続できましたが
TCP/IPで接続すると駄目です。
接続はアプリの仕様でTCP/IP必須なので
それで進めるしかないのです。
念のためBをAと同じくTCP/IPのみにしてみたのですが
結果は同じでした。
こんなところです。
746 :
NAME IS NULL:2008/01/26(土) 11:10:01 ID:1W0ziNth
747 :
NAME IS NULL:2008/01/26(土) 12:22:00 ID:FuUuDm6+
Windows XP Service Pack 3 のリリースが近づいています。
影響を受ける人はあまりいないかもしれませんが情報です。
Windows XP Service Pack 3 が適用された環境に
SQl Server Management Studio Express をインストールしようとすると
エラーが出てインストールができません。
マイクロソフトは Service Pack 3 におけるこの問題を修正しません。
この問題は Service Pack 3 の既知の問題となります(Knowledge Base に載せる予定のようです)。
Service Pack 3 の環境において SQl Server Management Studio Express を必要とする場合は
まず Service Pack 2 の環境で SQl Server Management Studio Express をインストールし、
その後 Service Pack 3 を適用することが現状の唯一の回避方法のようです。
SQl Server Management Studio Express のインストーラの問題のようなのですが、
問題が修正されたインストーラが配布されるかどうかは不明です。
>>747 Express でなく Developer だとどうなのかとおもって検索したが、見つけられない。
ソースがあったら教えて欲しい。
749 :
NAME IS NULL:2008/01/27(日) 21:44:46 ID:GkgPPk8F
Windows XP Service Pack 3 のベータテストに参加しているので
問題に気づいてフィードバックしたらマイクロソフトから
「この問題は修正しない」という回答が返ってきました。
Developer Edition については大丈夫かと思いますが
今検証中です。
750 :
NAME IS NULL:2008/01/27(日) 23:00:53 ID:GkgPPk8F
Developer Edition のインストールは問題ありませんでした。
誤解のないように念を押しておくと
問題は SQl Server Management Studio Express (SP2適用版のみ検証)であって
SQL Server 2005 Express は問題なくインストールできます。
もうすぐSQL Server 2008がでるから、
MSお得意の意図的な切り捨てだな。
752 :
NAME IS NULL:2008/01/28(月) 00:39:12 ID:+z5J9EQm
2008 の RTM は Q3 にずれ込んだらしいよ。
M$死ね
2005ExpressEditionで勉強し始めたばっかりなんですけど、
testdbという名前で作ったのをmanagement studioから消してもう一度
作ろうとすると
ファイル 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\
testdb.mdf'は既に存在するので作成できません
というメッセージが返ってきて作成することが出来ません。このファイルの
消し方、教えてください。
ちなみに alter database remove file testdb では
'file' 付近に不適切な構文があります。というエラーになっちゃってます。
こんばんです
SQLServer2005 リリース版にSP1をあてなあかんです
SP2は他のプログラムの関係でダメらしい・・・
んで実機が手元に無くて準備は人任せなのですが
システムデータベース系の『Autogrow』の設定って
どのように見ればよかったんでしたっけ?
今電話で聞かれて答えられなかった・・・orz
>>754 management studioから消してってどういう手順で消してるんだ?
削除で消したらmdfも一緒に消えると思うが。
まあ残ってるとしたら、そのファイルを直接消せばいいだろう。
そのフォルダまでExplorerで直接いってSfiht+Delで。
ただのDB実体ファイルだし。
SQL Server2005でManagementStudioから
backup database master to disk ='c:\aaa.bak' with name = 'master' , init
を実行するとメッセージとして
データベース 'master' の 376 ページ、ファイル 1 のファイル 'master' を処理しました。
データベース 'master' の 2 ページ、ファイル 1 のファイル 'mastlog' を処理しました。
BACKUP DATABASE により 378 ページが 0.514 秒間で正常に処理されました (6.016 MB/秒)。
みたいなのが出力されますがこれを結果セットとして戻せないでしょうか?
VBからADO.NETで実行した時に途中経過みたいな感じで上記メッセージを
だしたいのですが結果セットとしてとれないので表示できません
>>757 SqlConnection.InfoMessage
SQL Server 2005 ですが、
SQL Server に発行された SQL 文の全ての記録をログとして
残しておきたいのですが、何かよい方法はないでしょうか?
761 :
NAME IS NULL:2008/01/31(木) 17:47:58 ID:Y0OjbJfo
>>760 すごく重くならない?
Profilerでトレースしてみるとか?
それはそうと、SQL Server 2008のCTP版のインスコで
最後のツールのところでエラーが出るよな?
management studioで起動してもデータベース接続で
ハネられるし。
762 :
NAME IS NULL:2008/02/01(金) 01:49:28 ID:/tBXR7WZ
ASP.NETでSqlCacheDependencyを使う時にSQLServer側の設定で、
dboスキーマ以外のテーブルに対してテーブル変更のポーリングを有効に
することってできますか?
ASPNET_REGSQLユーティリティで、例えばAdventureWorksの
Person.Addressテーブルのキャッシュ依存関係を有効にしようとしても、
ASPNET_REGSQLのコマンドが成功しません。
-tオプションにAddressって入れると「そんなテーブル無い」って言われるし、
Person.Addressって入れるとスキーマ定義がおかしいとか言われるし。
(dboスキーマのテーブルなら成功しました)
763 :
762:2008/02/01(金) 01:55:24 ID:/tBXR7WZ
補足:
これは成功するけど↓
aspnet_regsql.exe -S <Server> -U sa -P saのpass -ed -d AdventureWorks -et -t ErrorLog
Addressテーブルが有効化できないわけです。↓
aspnet_regsql.exe -S <Server> -U sa -P saのpass -ed -d AdventureWorks -et -t Address
-t スキーマ.Address
はどう?
765 :
762:2008/02/01(金) 13:49:38 ID:???
>>764 それとか、DB名.スキーマ名.テーブル名とか、[]で囲うとかやってみたんですが同じエラーになります
詳細なエラーメッセージは手元にないけど、スキーマ定義が云々といった風な。
SQL Server 2000を使用しています。
ログディレクトリ配下の
SQLAGENT.OUT
ERRORLOG
の2ファイルについて、ファイルがローテーションする
タイミングは再起動以外にありますか?
>>766 ないと思うが、いったい何が聞きたいんだ?
>>767 回答ありがとうございます。
SQL Servererが出力するログのローテーションをスケジュールを決めて行いたいです。
調査をしていて、再起動の際に上記2ファイルがローテーションすることは確認できました。
それでも、代替方法があるならSQL Serverの停止・再起動は避けたいと思っています。
他に手段がなければ日毎のSQL Serverの再起動もやむなしです。
>>768 > SQL Servererが出力するログのローテーションをスケジュールを決めて行いたいです。
この発想がそもそも正しくないかもしれないな。あまり深入りして聞くつもりもないけど。
770 :
NAME IS NULL:2008/02/04(月) 20:08:11 ID:00FNKyrD
>>768 ERRORLOG なら、
sp_cycle_errorlog
SQLAGENT.OUT
こっちは一時的にとまっても問題ないだろうから、
サービスの再起動
くらい
SQLServerからリンクサーバーでORACLEを接続してるんですけど、
リンクサーバーの設定に互換性照合順序ってのがあって、
それはチェックが入ってても入ってなくても
データの取得処理に変化がないんですが、これって重要な設定なのでしょうか?
>>769 ログの内容から、エラーが発生しない限りログへの新しい出力がない
=日程でローテーションを組むべきではない、ということですか。
>>769-771 再起動とストアドを視野にいれて再考してみます。
ありがとうございました。
Express Editionではインスタンスは2つ作れないんですか?
つくれます
Express?Editionではインスタンスは2つ作れないんですか?
779 :
NAME IS NULL:2008/02/06(水) 09:14:24 ID:zUBreNiC
質問させてください
SQLServer2005を稼働しているPCに対して
外部PC(ネットワーク経由)からSQLServer2005のデータに接続する際
クライアント側では何が必要なのでしょう?
まったくのド素人で開発丸投げされて困惑中です
どこか接続手順なんかでも掲載されている場所なんかがあれば助かりますが
MS社のヘルプなど読んでもチンプンカンプンですorz
ぼすけて
「SQL Server 2005 Express Edition with Advance Service Service Pack 2」をインストールしました。
Management Studioを起動すると上のメニュー部分は日本語なんですが、
ログイン時のダイアログや右クリック等、メニュー部分以外が日本語化されていない状態です。
設定でどうこうできる部分が見当たらず、検索してもそういった現象を見つけ切れませんでしたので
何かご存知の方がいましたらお願い致します。
環境はXP SP2です。
別に英語でもいいんじゃない?
仕事でユーザーにサポート用で渡す端末なんで、英語だとちょっと都合が悪いんです・・・すいません。
>>783 マニアックなプログラムで。。。
「dbMagic」なる開発ツール?で作成された代物です
786 :
781:2008/02/06(水) 11:37:07 ID:???
自己解決しました
スマソ
787 :
780:2008/02/06(水) 11:39:03 ID:???
>>784 > 仕事で...
仕事、かつ自分で何とかできないなら、Express Edition なんか使うなよ。
789 :
NAME IS NULL:2008/02/07(木) 01:16:19 ID:vee0rUtr
>>779 テーブル内に格納されているレコードを削除しただけでは、普通はデータベース ファイルのサイズは小さくならないよ。
データベース ファイルのサイズを小さくするには DBCC SHRINKDATABASE とかを実行する。
あと、自分のことに「ご」をつけちゃいかんよ。
>>780 接続するための基本的なものは Windows に最初っからはいってるよ。
VBScript ならば Windows + メモ帳だけでプログラムは組める。
既出かもしれないが、sqlserverでoracleのシーケンスみたいなことは、
できるんでしょうか?
たぶん簡単には、できないんでしょうけど、oracle→sqlserver移植の経験がある方
教えてください。
Access2003使ってSQLserver6.5のDBのテーブルに
データの挿入をしていたんだが、
急に実行時エラー↓が出るようになった。
'default'セグメントがフルなので、データベース'spl'のオブジェクト'DB_name'の
領域を割り当てられません。
syslogsで領域を使い果たしたときは、トランザクションログをダンプして下さい。
そうでなければ、ALTER DATABASE又はsp_extend segmentを使ってセグメント
のサイズを増加して下さい。(#1105)
トランザクションログをダンプしたけど症状変わらずで困っています。
何か解決方法はありますか?
795 :
794:2008/02/08(金) 18:05:12 ID:???
すみません。DBのサイズを拡張したら直りました。
>>793 単純に連番 (飛び番でも) 振るだけなら、identity でいい。
複数のテーブル間で一意の番号を持ちたいとかなら連番用のテーブルを
持つなどの工夫が必要。
>796
>>複数のテーブル間で一意の番号を持ちたいとかなら連番用のテーブルを
>>持つなどの工夫が必要。
まさに、これがやりたいのです。
DB2も、持っている機能なので2008では実装してほしかった。
798 :
NAME IS NULL:2008/02/09(土) 09:18:14 ID:coR9yueJ
>>781 さんと全く同じ現象が同じ環境で出ています。
もしよろしければ解決した方法を教えていただけませんか?
私が試したことは以下の二つです。
@SSMSEの再インストール
Aすべて日本語で表示されているPCで動いているSSMSEの設定ファイルをコピー
(My Documents\SQL Server Management Studio Express\Settings内のファイル)
「SQL Server 2005 Express Edition with Advance Service Service Pack 2」をインストールしました。
Management Studioを起動すると上のメニュー部分は日本語なんですが、
ログイン時のダイアログや右クリック等、メニュー部分以外が日本語化されていない状態です。
設定でどうこうできる部分が見当たらず、検索してもそういった現象を見つけ切れませんでしたので
何かご存知の方がいましたらお願い致します。
環境はXP SP2です。
なんだろね。.NET Framework 2.0 の日本語 Language Pack が入っていない状態でインストールしたとかかな?
だとしたら、アンインストール→日本語 Language Pack のインストール→再インストールかな。
SSMS だけアンインストールすればいいのか、全部アンインストールしなきゃいかんのかはわからんし、
ただ単に Language Pack を入れればいいだけかもしれない。
>>799 返答ありがとうございます。早速試してみましたが
SSMSだけの再インストールでは直りませんでした。
やったこと:
@SSMSアンインストール → MSXML6.0アンインストール → 日本語Languageパックアンインストール .NET Framework 2.0 アンインストール
→ .NET Framework 2.0 インストール → 日本語Languageパックインストール → MSXML6.0インストール → SSMSインストール
SQLサーバーのアンインストールは他の作業があるため本日は無理そうなので、また後日試してみます。
SEQUENCEとIDENTITYはそれぞれ長所短所があるから両方サポートしてるのが増えてきている。
ANSI SQL的にはIDENTITYじゃなかったっけな。
質問です
SQLローダみたいにctrlファイルとsqlファイルとデータファイルで
一気にINSERT文を発行する仕掛けってあるのでしょうか?
検索してみても、sqlcmdで一行一行insert文を発行するしかないのですが、
もしあるのならキーワードだけでもお教え願えないでしょうか。
よろしくお願いします。
SQL Server2005からPervasiveV9へのリンクサーバー接続ができないっす
ODBCデータソースのシステムDSNに作成
ACCESS2000からだとそれに対してリンクするとPervasiveのテーブルが参照できる
SQL Serverから同じシステムDSNにadd_linkedserverしても
「リンク サーバー "xxxxx" のプロバイダ "MSDASQL" に無効なスキーマまたはカタログが指定されました。」
となる
作成時に何か注意点とかない?
今はSQL Server2005からACCESSへリンクサーバー
ACCESSからPervasiveへリンクとしてるんだけど非常に遅いので・・・
807 :
NAME IS NULL:2008/02/13(水) 11:32:12 ID:RhTUbnSx
Datetime型の値から、年、月、日を取得する関数はありますが、時、分、秒を取得する関数が見つかりません。
時分秒がほしい時は、DATEPARTを使わないといけないのでしょうか?
808 :
NAME IS NULL:2008/02/13(水) 16:15:27 ID:EqwFgUud
SQL Server6.5ですが、SELECTがかち合うととまる現象があります。
SQL ServerのSELECTはデフォルトでLOCKするんですか?
8年前のシステムですが・・・その後Orcleしか使っていませんので初心者です。
>>808 トランザクションは速やかにコミットするのが共有ロック方式での基本。
repeatable readやserializableのトランザクションを使ってるならロックされる。
read commitedの読み取り操作は行(6.5だとページかな)ごとに
一時的にロックされるだけなので余り問題はならない。
READだけの場合共有ロックだからとまらないはず。
どこかで更新かけてるとか、排他ロックかけてるとか?
811 :
,:2008/02/13(水) 23:05:28 ID:???
>>808の状況は、かちあった2者じゃなく第3者がジョインに使ってて、
ジョインしてる別テーブルを更新しても起こるんでしょ?
所詮、SQLなんて「シンプル」クエリー
だから、複雑だったりコネクションが多いと、トリガー使おうがCOBOLには歯が立たない。
>>811 そこで何でCOBOLが出てくるんだ?
マルチI-SAMファイルとの比較ならともかく。
>そこで何でCOBOLが出てくるんだ?
釣りだからじゃね?
814 :
NAME IS NULL:2008/02/14(木) 10:25:02 ID:tJ6l2k50
808です。
ありがとうございます。
A処理は、ほぼ全件検索の帳票印刷。
A処理中、他の処理を立ち上げるととまってしまいます。
(A処理が終わると動き始めます、今度調査しています)
両方ともにSELECT以外はかいていないんですが・・・
>>814 ORDER BYや一時表の作成なんかでtempdbが排他ロックされたと思われ。
SQL Serverの特性で、tempdbのせいで同時実行性が損なわれる場合があるので、
マルチプロセッサの場合にtempdbにプロセッサ数分のファイルを追加するとか、
スナップショット分離(tempdbのサイズに注意)や、読み込みだけだったら
ダーティリードになるけど、SELECTクエリーに(nolock)を付けて読み込むとか。
>A処理は、ほぼ全件検索の帳票印刷
スナップショットサーバーカーソルが使えそうだが、
6.5で使えたかどうかわからない。
817 :
ごきぶり:2008/02/14(木) 17:29:15 ID:SJ9/qCJg
>790
ありがとうございます。
>>815 初めて知った
コアヅオだからtempdb増やしてみよ
819 :
NAME IS NULL:2008/02/16(土) 14:18:45 ID:ZAE8bFc6
DB:SQL SERVER 2005において、サーバーグループと新規サーバーを登録した
際に、オブジェクトエクスプローラに接続しようとすると、以下のような
エラーが出て、接続できません。
「SQL Server 2005 に接続しているときときにこのエラーが発生した場合は、
SQL Server の既定の設定がリモート接続を許可しないようになっていること
がエラーの原因である可能性があります。」
「SQL Server Browser」を”無効”→”自動”に変え、「DatabaseEngine」
のリモート接続を、”ローカル接続のみ”→”ローカル接続及びリモート接続”
に変えましたが駄目です。
何か他に対処法はありますでしょうか?
820 :
NAME IS NULL:2008/02/17(日) 00:52:35 ID:DAxGz+Jq
ファイアウォールの有無を確認するとか、
設定後にサービスを再起動させたかとかくらいしか思いつかないなぁ。
なぁCompact遅くないですか・・・
数千行で顕著にインサートが遅くなってくんだけれど。
これだけじゃわからないとおもうけれど、そんなことはありえない(=自分のミス)なのかCompactならありえるのかだけでも教えてくれ。
>>821 Compact は遅いよ。Compact に数千行もインサートするってどないやねんと、それだけ聞くと思っちゃうな。
SQLiteは早いのに・・・
SQLCE に何を期待しているかによるんじゃないの。
Windows Mobile で動いて PC 上の SQL Server と簡単に組み合わせられるってところは CE ならでは。
なので PDA 上でしか CE を選択しないオレにとっては数千行のインサートなんてしないから、
そのパフォーマンスが悪かろうと使いたいところでは CE を使うよ。
SQLCEのターゲットとして、SQLiteのような、組み込み用途の同じプロセスでライブラリとして動く、手軽かつ高速のデータベースっていうのはないのかね?
DBMSの性能は最後はメモリ勝負だしな。
SQLiteはCEでも動くと思う
大量のデータを削除したいです。
条件の指定できるtruncateってありませんか?
それか一時的にトランザクションログへの書き込みを無効にする方法。
元に戻せなくてもよいので。
SQL Server2005
必要なデータを別のtableにselect intoしておいてから
ALTER tableで差し替えるなり
元テーブルをtruncateしてからINSERTするなりすればいいんじゃない
復旧モードを一時的に変更するんじゃ駄目かな?
SQL Server 2005からだったらDELETEにTOP指定できるようになったんで、
TOPで適当な件数を指定して、削除レコードが0になるまでループするとか。
833 :
828:2008/02/19(火) 05:51:30 ID:???
実験してみます
834 :
781:2008/02/19(火) 18:44:23 ID:???
>>798 解決かどうかはわかりませんが、当方の環境で一部しか日本語化されなかった原因がわかりました。
SQL ServerをCドライブ以外にインストールすると起きるみたいです(多分
ずっとDドライブにインストールしていたんですが、Cドライブにインストールすることで正常に日本語化されました。
ご参考までに。
835 :
NAME IS NULL:2008/02/20(水) 17:21:13 ID:0hiWPJtx
朝からすいません。
SQLServer2005をインストール中なのですが、
デフォルトでインストールしてC:にデータ領域を作ってしまい
その後アンインストールをしてエクスプローラからデータ領域を削除、
再インストールしたのですが、失敗したインスタンスが残ってしまい
同じインスタンスを作成できなくなりました。
インスタンスの削除はどのようにしてやればいいのでしょうか?
詳しくなくて、後々トラブりたくないなら、OSから再インストールする方がよいと思うよ。
詳しい人ならここに書かなくても対処できるだろうけど。
●同じインスタンス名で上書き再インストール
●インスタンスごと丸ごとアンインストール
これで消える
ああ上書き再インストールじゃなくて
修復再インストールね
842 :
NAME IS NULL:2008/02/21(木) 18:31:24 ID:yG4GU6iX
分かれば教えていただけますでしょうか。
現在、SQL Server6.5 SP5a を Windows2000 Server 環境にて利用しております。
ハード的な理由により、別のサーバ機に環境を移すことになりました。
新サーバもなるべく環境を変えたくないため、Windows2000Serverです。
今までも何度かサーバを移したりしましたが、
なぜか今回に限ってSQL Server6.5がインストールできませんでした。
色々調べてみたところ、今回の新サーバがXeon 1.6GHz(Dual CPUです) を搭載しているため
要件の「Intel Pentium または互換の 166 MHz 以上のプロセッサを搭載した PC」に
当てはまっていないのではないかと思っております。
上記理由もあり、いい加減SQL Server6.5 からバージョンを上げようかと思っています。
ただ、現在がSQL Server 6.5というのもあり、エクスポートデータを
上位バージョンのSQL Server で問題なくインポート出来るためにも
いきなり SQL Server2005 などではなく、なるべく近い上位バージョンにした方が
いいのかと考えています。
ここで質問ですが、
1.「Intel Pentium または互換の 166 MHz 以上のプロセッサを搭載した PC」というのは
Xeon は含まれているのでしょうか。
2.SQL Server 2000 は Intel Xeon を利用したサーバー(OS:Windows2000 Server)に
導入する事が可能でしょうか。
初歩的な質問かもしれませんが、ご教授頂ければと思います。
宜しくお願い致しますm(_ _)m
>>842 A.1 XeonもPentium互換プロセッサです。
A.2 インストール可能です。
845 :
842:2008/02/21(木) 22:33:26 ID:upE4ML7q
回答有難うございます。
>>843 そうなんですか!
では、SQL Server6.5 が入らなかったのは、要件が合わないという理由では
なさそうですね。。。別の理由があるんでしょうか、、。
とりあず、A2の回答よりSQL Server2000 へ乗り換えの方向で考えてみます。
ありがとうございます。
>>844 サービスパックとはWindows2000Serverのでしょうか?
記入忘れておりましたが、 Windows2000 Server SP4にはなっております。
現象は、SQL Server 6.5 のインストールが途中で止まる、、、と言いますか
進まなくなってしまいます。
INSTMSDB.SQL を修正したり、インストールディスクの空き容量調節など行ってみましたが
どれも効果なし。という結果でした(−−;
出来れば SQL Server6.5 で導入できればいいのですが、
とりあえず解決法が見えないため、上でも書かせていただいたように
SQL Server2000 への移行で手を打とうかと考えております。
もし、解決法などありましたら引き続き回答頂ければと思います。
よろしくお願い致します。
846 :
NAME IS NULL:2008/02/21(木) 22:52:29 ID:bAQyT7se
SQL Server 2000をデフォルトの分離レベルで使用しています。
1時間程度の更新系夜間バッチ中、照会系画面の表示が
ブロッキングされます。
分離レベルをREAD UNCOMMITTEDにすればブロッキングは
回避できるかと思いますが、ダーティリードも避けたいところです。
照会系画面がブロッキングされない対策がありましたら
アドバイスをお願いします。
>>846 更新後は排他ロックがかかるので大域の更新が走ってるなら当然ブロックする。
更新期間は他の運用をとめることを勧めるがあえてやりたいなら下記のとおり。
大域の更新をやめて出来るだけ小さい単位でコミットを繰り返す。
更新前にバックアップDBに切り替えて参照専用の運用をする。
READ UNCOMMITEDでダーティリードする。
>>845 Virtual ServerにWindows 2000 Serverの環境を作って、そこにインストールするとか。
まあMSのサポートを考えると、SQL Server 2000以降に移行した方がいいけどね。
850 :
NAME IS NULL:2008/02/22(金) 23:27:38 ID:mDCxraD7
もうすぐ現在の出向先の仕事が終わりそうなので次はサーバー管理の
仕事をやってみたいのですがSQLServerに関しては何で何を勉強しておけばいいんでしょうか?
ちなみに現在の出向先でもサーバーとSQLSERVERのシステムを一人で保守してますが
サーバー1台だけですし、ACCESSで作ってもいいようなトランザクションもいらない小さな業務システムなので
エンタープライズマネージャーでテーブルデザインしたりデーターベースの復元とバックアップぐらいしかやったことが
ありません。次に行かされそうなところが10台規模のサーバーがありSQLServerとオラクル
が動いているということなので不安でたまりません。
次も1人で行かされそうなのですが飛び込みでやっていけるもんなんでしょうか?
自分としては何か対策を立てておきたいのですが。
あとアーキテクチャ徹底解説SQLServer2000という本が手元にありますが
分厚いので読んでません。
毎日バックアップだけしとけば何も勉強しなくても大丈夫だろ。
852 :
NAME IS NULL:2008/02/22(金) 23:55:55 ID:mDCxraD7
>>851 ネットワークの勉強でもしといたほうがいいですかね?
要員は一人で必要スキルは
サーバーがLinuxとwindows(合わせて10台程度。クライアントの数は不明)、データベースがSQL鯖とオラクル、
プログラミングがVB.net,JAVA,C言語。その他がコンテンツの修正が出来る程度(何のコンテンツか不明)、
HTMLを理解している・・だそうです。
C言語は客先の質問に答えられる程度でいいみたいですがC言語、Linux、オラクル、JAVA、Web
なんかは全くの未経験です。医療センターらしいですけどやっぱり危険ですかね?
必要スキルの範囲が妙に幅広いのが気になります。
どんな感じの仕事か推測できる人がいればアドバイスお願いします。
853 :
初心者です。:2008/02/23(土) 00:08:13 ID:C6fqHCw3
いままで会社で1人でaccess 2000のmdbでがんばってきたのですが、
仕事量が増えたので、SQL SERVER 2005とaccess 2000のadpにしました。
勉強しながら、だいぶできあがったのですが、1つだけわかりません。
それは、テーブル、ビュー、ストアドがみえている!です。
テーブルの中は別に自由でいいのですが・・・。
複数の人間で仕事するので、テーブル削除さえたら、困るのです。
小さい会社ですので、自分でやるしかないのです。
権限で設定のような気がするのですが、教えてください。
854 :
NAME IS NULL:2008/02/23(土) 00:26:02 ID:ooNFZyQq
>>853 MDBでリンクテーブル作ってフォームから入力してもらうじゃ駄目なんですか?
小さい会社だったら、「テーブル削除なんかするなよ」って
おふれ回しときゃいいんじゃないか?
て言うか、テーブルの中身はぐちゃぐちゃになってもいいけ
ど、テーブル自体を削除されたら困るってどういう状況か理
解できないんだが。
そもそも、mdb でやってる時はどうしてたんだよ。
856 :
NAME IS NULL:2008/02/23(土) 01:09:17 ID:ooNFZyQq
853は初心者らしいけどフロントエンドとバックエンドって分かってるんだろうか?
857 :
NAME IS NULL:2008/02/23(土) 11:05:23 ID:ooNFZyQq
>>855 確かに853は謎だよな。
でもうちの客先でもLinux好きで自分で色々やってる素人がいるんだが
DBMSで社内のデータを管理するって言い出した。
その人プログラミングはできないからどうやってシステム作るんですか?
って聞いたら社員のPCにDBMS付属の管理ツール入れて直接テーブルに
入力させればいいんじゃね?とか言い出してびびったよw
858 :
798:2008/02/23(土) 12:00:55 ID:???
>>781 さん
>>834の方法で、当方でも問題解決することができました。
ありがとうございます。
>>850 Linuxとwindows、SQL鯖とオラクル、VB.net,JAVA,C
このうちのどれかひとつがそこそこ出来れば、それだけで食っていけるぞ
上記の案件がすべてこなせる人材の出向だったら、うちの会社じゃ月額240万かかる。
未経験で行くのなら、デスマーチ決定だな
SQLServer2005のSSISにある「SQLServerオブジェクトの転送」って遅いんでしょうか?
試しに10個のテーブルをコピーしてみたら2分近くかかるんです。
SQLServer2000のインポート・エクスポートにあったオブジェクトのコピー(動いてるのはDTSですよね)
だと大して時間かからなかったのに。
要因を探ろうとデータのコピーをなしにしたりネットワークの要因を排除する為に
同じサーバ内で別のDBにコピーさせてみたりしたんですが大して早くならないんです。
ただ同じサーバ内で同じパッケージを連続して実行したら2回目以降はえらく早い(10秒かからない程度。
状況が同じになるようにコピー前に削除はしてあります)ので、
コピーするオブジェクトの情報をDBから集めるのにえらく手間取ってる(2回目以降はキャッシュに当たった?)
のかと思ったのですが、、
DTSに比べてSSISのこの機能は遅くなってしまったんですかねぇ・・・?
同様の経験された方いっらっしゃいませんか。
(SSIS扱うのが今回初めてなのでSSISのパラメータの組み方にも自信がないのですが・・・。)
1回実行したときにDB拡張されてて
削除後に空き領域が出来てて
もう一回実行しても速かった
862 :
860:2008/02/23(土) 15:40:18 ID:???
>>861 DBファイル自体はかなり大きめにとってあるのですが・・・。
そして先ほどコピーしたテーブルを削除してから別のテーブル10個で実行すると
同じように時間がかかるのです。
また別サーバからのコピーの際、コピー元サーバの負荷が結構高め、コピー先サーバの負荷が
ほとんどない事からしてそういった問題ではないように思うのですが。。
DTSとSSISの両方でSQLServerオブジェクトの転送を使ったことがある方から、
顕著なスピード的な差が見られたかを教えていただけると助かるのですが・・・。
863 :
NAME IS NULL:2008/02/23(土) 19:59:58 ID:ooNFZyQq
>>859 やっぱりそうですか・・
前任者は1年で辞めると言い出したそうですが、人間関係が嫌とのことらしいですが
本当の理由は違うかもしれませんね。
ただ、この業界ってきつそうに書いてても実際は楽だったりその逆もあるので・・
確かにスキルの幅は広いですがひとつひとつのスキルはそこそこでいいのかもしれませんし
どちらにしても内容を詳しく聞けないと危険そうですね。
スキルを上げるために多少未経験の仕事があっても飛び込んでうまくやってる人もいますが
皆さんはどういう基準で仕事を受けてますか?
double よりも decimal を使ったほうが有効桁数が大きいので、
精度の高い値を格納できると思います。
ですので小数点を格納したい値には decimal を用いればいいと
思うのですが、ここで double を用いるメリットは何があるのでしょうか?
漏れは varchar に格納している漏れは勝ち組
>>864 扱える最大値がぜんぜん違う。
doubleは
1797693134862315700000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
00000000000000までいける。
仕様も何も全く違うデータ型なんだから、
同列で比べること自体が間違ってる
0.5を格納して取り出すと値が変わってしまうのはどっち?
floatとdecimalの使いわけは何を基準にすべき?
>>870 floatは2進数の小数で格納されるので 2進<->10進変換で誤差が出る場合がある。
たとえば 0.01+0.05=0.06 はfloatで処理するとFALSEになる(実装にもよる思うけど)。
科学技術計算のように誤差が許容できて、すごく大きな値(もしくはすごく小さな値)を
使いたいときはfloat/doubleが便利。
decimalは10進数で処理するので先にあげた誤差の問題がない。
873 :
NAME IS NULL:2008/02/28(木) 00:24:28 ID:MEMoFgLk
>>873 キーにCHAR使ってるから照合順序が関係してると思う。
Linkedserverの設定やら使われてるOLEDBの情報くらい調べるべきだな。
875 :
NAME IS NULL:2008/02/28(木) 11:46:04 ID:0jE/8Q40
>>873 いい嘘な結果が返ってこようが
TPC-E / TPC-H ペンチマークで最高パフォーマンス
が出たんだからいいじゃねぇか。データベースはスピードが命!
これはアメリカのゲームです。1度やってみてください。
これは、たった3分でできるゲームです。試してみてください。驚く結果をご覧いただけます。
このゲームを考えた本人は、メールを読んでからたった10分で願い事がかなったそうです。
このゲームは、おもしろく、かつ、あっと驚く結果を貴方にもたらすでしょう。
約束してください。絶対に先を読まず、1行ずつ進む事。たった3分ですから、ためす価値ありです。
まず、ペンと、紙をご用意下さい。先を読むと、願い事が叶わなくなります。
@まず、1番から、11番まで、縦に数字を書いてください。
A1番と2番の横に好きな3〜7の数字をそれぞれお書き下さい。
B3番と7番の横に知っている人の名前をお書き下さい。(必ず、興味のある性別名前を書く事。男なら女の人、女なら男の人、ゲイなら同姓の名前をかく)
必ず、1行ずつ進んでください。先を読むと、なにもかもなくなります。
C4,5,6番の横それぞれに、自分の知っている人の名前をお書き下さい。これは、家族の人でも知り合いや、友人、誰でも結構です。まだ、先を見てはいけませんよ!!
D8、9、10、11番の横に、歌のタイトルをお書き下さい。
E最後にお願い事をして下さい。さて、ゲームの解説です。
1)このゲームの事を、2番に書いた数字の人に伝えて下さい。
2)3番に書いた人は貴方の愛する人です。
3)7番に書いた人は、好きだけれど叶わぬ恋の相手です。
4)4番に書いた人は、貴方がとても大切に思う人です。
5)5番に書いた人は、貴方の事をとても良く理解してくれる相手です。
6)6番に書いた人は、貴方に幸運をもたらしてくれる人です。
7)8番に書いた歌は、3番に書いた人を表す歌。
8)9番に書いた歌は、7番に書いた人を表す歌。
9)10番に書いた歌は、貴方の心の中を表す歌。
10)そして、11番に書いた歌は、貴方の人生を表す歌です。 この書き込みを読んでから、1時間以内に10個の掲示板にこの書き込みをコピーして貼って下さい。そうすれば、あなたの願い事は叶うでしょう。
もし、貼らなければ、願い事を逆のことが起こるでしょう。
とても奇妙ですが当たってませんか?
877 :
NAME IS NULL:2008/02/28(木) 23:26:10 ID:lxCwvbbD
>873
実は昔雑誌のオマケで付いてきたβ版でしたって落ちじゃね?
アレはバグだらけでかなりヒドかった。
SQL Server Compact って鯖じゃないのに何でサーバって名前についてるの?
SQLServerをCompactにしたから
880 :
NAME IS NULL:2008/03/02(日) 01:12:27 ID:Ja1oQWs4
sqlserver2005に対してSQL Server Management Studioで接続しています。
レコードを一括で処理するために「新しいクエリ」ボタンを押してSQLを発行しています。
そこであらかじめトランザクションを開始しておいて
いくつかSQLを発行して最後に更新後の値を手動で確認したあと、
コミットしたいと思うのですが、こういう場合どうすればよいでしょうか?
普通にUpdateすると直後に反映してしまいますし、
「begin transaction」を実行してから
別の「新しいクエリ」よりSQLでUpdateを実行した場合も
このトランザクションに含まれないようです。
なにか良い方法ありませんか?
別の「新しいクエリ」を作らずに
一つの「新しいクエリ」の中で連続して実行
bcpユーティリティでテキストへ出力するときにselect条件で対象を絞り込んでからというのは出来ないのでしょうか?
883 :
880:2008/03/02(日) 15:09:55 ID:???
>>881 うまくいきました。
同じクエリウィンドウの中だと書き直して再実行しても同一トランザクションと
見なされるんですね。
ありがとうございました。
885 :
NAME IS NULL:2008/03/02(日) 18:49:42 ID:Ja1oQWs4
SQLServer2005でトリガーを作成しています。
レコードが更新された時に更新されたレコードの
「更新日時」列に現在の日時をセットするトリガーを作成したのですがうまくいきません。
「ブクエリは複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後に続く場合や、サブクエリが 1 つの式として使われる場合は複数の値は許可されません。」
というエラーがレコード更新時に発生します。
UPDATE 〜〜 WHERE 主キー=0
のように1行のみに限定して更新した場合は正常に動作します
ALTER TRIGGER [dbo].[トリガー名] ON [dbo].[TABLE1]
FOR UPDATE AS
UPDATE [TABLE1] SET 更新日時 = getdate() WHERE 主キー = (SELECT 主キー FROM inserted)
何が悪いのでしょうか?
エラー内容からすると「SELECT 主キー FROM inserted」が複数行を返していることが
原因のように見えるのでカーソルとループ使って書き直したのですが
やはり同じエラーが発生してしましました。
何が悪いのでしょうか?
そもそもUPDATEを実行した場合更新したレコードごとに
トリガーが呼ばれるのでSELECT 主キー FROM insertedが
単一のレコードを返すと思っているのですが
私が勘違してますでしょうか?
>単一のレコードを返すと思っているのですが
>私が勘違してますでしょうか?
はい、勘違いしてます。
insertedは複数レコードが入るからjoin使って書き直せばいいんじゃない
>>885-886 WHERE 主キー in (SELECT 主キー FROM inserted)
じゃダメなの?
888 :
885:2008/03/03(月) 01:44:03 ID:???
>>886 勘違いしてましたか汗
記憶違いでした。。
join使って無事解決しました。
ありがとうございます。
>>887 WHERE 主キー in (SELECT 主キー FROM inserted)
こちらもOKでした。
この2つはどっちの方が早い(効率的)なんでしょうかね。
自分的には今回のように主キーの場合は
joinにせよinにせよ両方インデックスを調べるので
速度は同じだと思いますが合ってますよね?
889 :
NAME IS NULL:2008/03/03(月) 15:33:04 ID:LsZsFXvo
>>888 やってみればいいと思うが。
どっちもたいして変わらないなら、自分の好みで。
891 :
885:2008/03/03(月) 22:47:15 ID:???
>>889 existsは違いませんか?
existsはレコードを返せばレコードを返せば真を返すだけですよね?
この場合はinだと思います。
>>890 すみません、
手抜きをしたわけではないのですが自分自身SQLを発行して
インデックスが利用されたかを調べる術を知りませんので
こういう書き方になりました。
もちろんやってみたのですが体感的には変わらなかったです。
>>891 existsが正解。マニュアル嫁よ。
inだと主キーが複数項目の場合に対応できんだろが。
>>805 事後報告
select * from linktable...tablename でエラーでてはまってたんだけど
OpenrowsetでパススルークエリにしたらリンクサーバーからPervasive直参照できた
894 :
885:2008/03/05(水) 00:04:57 ID:9PCwUBNa
>>890 >>892 existsを使ってトリガを書き直してみました。
書き直し前
UPDATE [TABLE1] SET 更新日時 = getdate() WHERE 主キー in (SELECT 主キー FROM inserted)
書き直し後
UPDATE [TABLE1] SET 更新日時 = getdate() WHERE exists (SELECT 主キー FROM inserted)
やはりexistsを使った方は一行だけ更新した時に
トリガが全行の更新日時が更新されてしまいました。
使い方が間違ってるのでしょうか!?
間違ってる。
この場合、TABLE1の全レコードに対してexistsがTRUE返しちゃうから、
相関サブクエリー(だっけな?)にすればOKじゃね?
MSDE2000ってストアドプロシージャ使えます?
898 :
885:2008/03/06(木) 01:31:15 ID:uFoRp3ua
>>894 >>895 相関サブクエリー(相関副問い合わせ)ですね。
実はお恥ずかしいことながら初めて聞いた言葉でした。
調べまして結論は以下となり、動作確認OKでしたのでご報告致します。
以下の3つでうまくいきました。
UPDATE TABLE1 SET 更新日時 = GETDATE() WHERE 主キー IN (SELECT 主キー FROM inserted)
UPDATE TABLE1 SET 更新日時 = GETDATE() FROM TABLE1 INNER JOIN inserted ON TABLE1.[KEY] = inserted.[KEY]
UPDATE TABLE1 SET 更新日時 = GETDATE() WHERE EXISTS (SELECT * FROM inserted WHERE inserted.[KEY] = TABLE1.[KEY]
ここまで来てまた疑問が浮かんでしまいました。
この3つでどれがパフォーマンスの観点からベストなのかを調べる方法は
ないでしょうか?
例えばインデックスが利用されることを確認する方法ですとか。。
我が儘言いまして申し訳ないです。
調べるためのキーワードレベルでも構いませんのでお教えいただけないでしょうか?
>899
実行プランを確認してみるといいかも。
ただし、同じSQLでも投入されているデータの量や値の偏りによって、
プランは変わっちゃうから実データに近いものが準備できればベスト。
×>899
○>898
すまん
SQLServerのDTSって、どっかにわかりやすい解説無いですかね
RubyのアプリとCSVで連携する必要が出てきて、
DTS使えばエクスポート出来そうなんだけど
使い方が良くわからんです…(私はRuby開発側なので)
win2000にSQL2000インストールして使っているのですが、
エンタープライズマネージャーからデータベースツリーを開こうとすると異様に時間が掛かっています。
ログを見ると「データベース'XXX'の開始中」が1つのデータベースにつき20回くらい発生しています。
データベースの復旧もダイアログが出るまで時間が掛かっているのですが、
何かオプションとかで解決するもんなんでしょうか?
主キーって連結より単一の方がパフォーマンスいいのでしょうか?
5列を連結するより、自動追加の列で特定する方が早そうな気がしますが
レコード最大で1000万件くらいになりそうなのですが、耐えられるの?
>>904 平気。としか言いようがない。
マスタとなる顧客テーブルが2,000万件、
受注テーブルが6,000万件程度なら経験ある。
オンラインが利用しているテーブルのうち、一番件数多いので1億強だったかな。
2000Entと2005Ent(x64)。
適切な索引が付いていてそれがまともに使用されていれば大丈夫。
むしろバックアップやリストアにかかる時間など運用の方が先に問題になってくる。
908 :
904:2008/03/08(土) 22:00:41 ID:???
さんくす。
しっかし皆すげー量のデータ扱ってんだな・・。
女は世の中に星の数ほどいることを知った904であった
910 :
NAME IS NULL:2008/03/10(月) 17:24:57 ID:qMij27lQ
すいません。教えてください。
SQL Server Management Studioや
VisualStudioのサーバエクスプローラから
プライマリキー以外のキーにUnique制約を
付けるのはどうするんでしょう?
SQL Server 2005を使っています。
>>910 Management Studioならテーブルをデザインで開いて
対象列の行を選択して右クリック
「インデックス/キー」
追加ボタン
全般の「UNIQUE」を「はい」
だと思います。
912 :
デフォルトの名無しさん:2008/03/11(火) 18:56:57 ID:qPjyzYRo
>>905 それって速度的な面はどんなもんなんでしょうか・・・
客先のDBが4年位で6Gまで膨れ上がってて、
処理が日ごとに遅くなったってクレーム来るんだよねorz
どういう対応したらデータ量大きくなっても大丈夫なのか分からぬ。
何か画期的な対策ってないものでしょうか。
>>912 日々膨らむデータに対してはキーのレンジ単位に1台づつ
物理的にDBサーバ増やして対処してるの見た(使った)ことある。
(0〜1000,000はDBサーバA、1000,001〜2000,000はDBサーバBにあるってイメージ)
もちろんバックアップなどの運用はかなり大変だったようだが。
大容量のバックアップはlitespeedを買って
相応のCPUリソースを用意すればある程度なんとかなる
916 :
NAME IS NULL:2008/03/11(火) 23:04:44 ID:Jdx/X7qD
SQL Server 2005のサービスが何もないんですけど、
どうしたらサービスを作ることができますか?
917 :
905:2008/03/11(火) 23:13:31 ID:???
>>912 自分が入った時にオンラインのレスポンスでクレームあった以外は特に。
その時は重複インデックスの削除、tempdbの分割あたりで解決したような。
その後は予算にも恵まれ、H/W変更もできたのでまぁ順調。
他システムからのファイルを取り込むバッチが多いんだけど、
BULKで突っ込んだり1件単位のコミットを行わないですむように工夫したりはしてる。
>>916 SQL Server 買う時に、インストールまでやってくれってベンダに言っておけばいい。
>912
10〜50GBとかくらいのサイズになってるDBとかあるけど
インデックスとか適切なのだと大丈夫だけどそうでないとサイズがでかくなったとたんにきつくなるね。
おまじないとしてsp_updatestatsを実行してからプロファイラで重いクエリを調べて
重いものから順にインデックスがちゃんと効くように見直してく。
インデックスがちゃんと効くようになるとSQLServerのプロセスの
メモリ使用量が一気に減るから全体的にパフォーマンスがよくなる。
レコード数に偏りがあるような場合に明示的にインデックスを指定しないと駄目なこともある感じ。
特にインデックスが複数ある場合に適切じゃないインデックスが使われてすごく重いことがあるかな。
updatestatisticsで思い出したが
インデックスを作ってあるフィールドの内容に偏りがあると
統計に上手く反映されなくてインデックスが効果的に使われないってことがあったな
ちとSQL文を忘れたけど、この場合は統計に使うレコードの率を増やしてやると
嘘のようにパフォーマンスが上がったりする。
sp_updatestatsを日曜日深夜に全レコード対象にかけるとか
922 :
名無しさん:2008/03/12(水) 17:15:44 ID:/lIQk/Cr
列名に()を使いたいのだがエラーがでる。
どうしたらいい?
>>922 ダブルクオーテーションで囲えばいけると思う。
クライアントソフトによってはSET コマンドで設定がいるかもしれない。
925 :
名無しさん:2008/03/12(水) 19:07:50 ID:/lIQk/Cr
>>923 924
サンキュー 助かったありがとう
テーブルサイズの計算について、勉強するのに有益なサイトありませんでしょうか?
928 :
912:2008/03/13(木) 13:37:19 ID:???
>>913-921でレスくれた方
ありがとうございます。
とりあえず外部キー等指定頻度の高い項目にまでインデックスを貼ってみたところ
速度が改善されそうです。
パーティションも考えましたが客先は2000なので次の手段として温めておきますorz
月末のアクセス集中砲火のときに耐えられるか心配ですが
とりあえずこれで進めてみようと思います。
外部キーとなる列には非クラスタ化インデックス付けた方がパフォーマンスいいの?
varcharは可変長文字列なので大きめに取っておいても問題ないですか?
30くらいのフィールド数の場合、全部varchar(200)とかにした場合、
パフォーマンス的に影響があったりしますか?
OllKorrect
932 :
926:2008/03/14(金) 23:03:58 ID:???
>>927 素人ですみませんが、int型とかdatetime型も固定バイトに当たるのでしょうか?
SQLServer2005でテーブル定義を今書いているのですが、
SELECTする時は必ずORDER BY DESCする列があります。
こういう場合に検索を速くするためにすることってありますか?
遅レスで申し訳ない。
>>825 > SQLCEのターゲットとして、SQLiteのような、組み込み用途の同じプロセスでライブラリとして動く、手軽かつ高速のデータベース
VistaDBってのを見つけたよ。
http://www.vistadb.net/ Developers can build embedded cross-platform ASP.NET and WinForms
database applications for desktops, mobile devices and web servers using
VB.NET, C# or any other Dot Net enabled language.
・ Small < 1 MB footprint truly embedded ZeroClick
・ Microsoft SQL Server 2005 compatible data types and T-SQL syntax
・ None of the SQL CE limits
なお、最近出た Express版の方は「No Compact Framework support」(公式blog)
な模様。
ManagementStudioが認識できるようにモジュール入れないとだめ。
インストールの仕方はMSDNのどこかに載ってる。
ComactEdtionのSSMSへのインストールとかうんたらで。
でも結局自分はあるはずのファイルがなかったりエラーになったりしたのでSQLServer2008を入れることにした。
とりあえず2008のSSMSからいじれてる。
>>936 私も2008入れています。
モジュールの入れ方を調べててもHitしそうになかったのでw
ありがとうございました。
939 :
938:2008/03/17(月) 11:09:42 ID:???
おれもアホやね。リロードせなアカンかったわ。
SQL Server2005について質問です.
1.
key列に 'TOKYO' と 'Tokyo' が混在するとPRIMARY KEY 違反になってしまうのですが,
両方を区別するにはどうすればよろしいでしょうか?
DISTINCTやGROUP BYでも区別してくれませんでした
SQL Server Management Studio Expressでクエリを入力する時に
大文字と小文字を区別しない(テーブル名などで)のも同じ原因でしょうか?
2.SQL Server Management Studio Expressで,オブジェクトエクスプローラーなどを日本語表示にする
パッチ等があれば教えて下さい.
以上よろしくお願いします.
1 無理
2 日本語版がある
>940
大文字小文字違いのデータを入れたいならその列の照合順を変えろ。
クエリのテーブル名などの大文字小文字が区別されるのはDB自体の照合順の影響。
テーブル名の大文字小文字とかも区別したいならDBの照合順を変えろ。
大文字/小文字区別はPKにしてると出来なかったんじゃなかった?
>>943 外部キーとリファレンス先のCOLLATEはあわせたほうがいいかも。
COLLATE Japanese_CS_AS_KS_WSが妥当かな?
945 :
NAME IS NULL:2008/03/22(土) 21:18:43 ID:xRI/qUei
SQL Server 2005のフリー版のやつにプロファイラってついていますか?
Express版には付いていない。
947 :
NAME IS NULL:2008/03/22(土) 23:39:51 ID:b4GggKf+
音楽のアルバム名を登録したテーブル「アルバムTBL」と
それに収録されている曲名リストを登録したテーブル「トラックTBL」があります。
指定した二つの曲が共に収録されているアルバム名を取得したいのですが、
どんなSQLになりますか?
二つのテーブルは「アルバムID」列で結合可能です。
アルバムTBLでアルバムIDは主キーです。
>947
SELECT アルバム名 FROM アルバムTBL WHERE
EXISTS (SELECT * FROM トラックTBL WHERE トラックTBL.アルバムID = アルバムTBL.アルバムID AND トラックTBL.曲名 = @曲名1)
AND EXISTS (SELECT * FROM トラックTBL WHERE トラックTBL.アルバムID = アルバムTBL.アルバムID AND トラックTBL.曲名 = @曲名2)
とりあえずパフォーマンスとかどうでもよかったらEXISTSで手抜き。
パフォーマンスが気になるレコード数があるか想定するなら普通の表結合に書き直してね。
949 :
NAME IS NULL:2008/03/24(月) 15:57:21 ID:/VnKEb27
VisualStudio2005インストール後にSQL Server2005をインストールしたんだけど、
ManagementStudioが見つからない(スタートメニューにない)
SQLServerのDVDを入れて追加でインストールしようとしても、
「開発ツールはインストール済みです」みたいなメッセージが出ます。
ManagemetStudioを入れるにはどうすればいいですか?
環境
OS:Windows Vista Ultimate
VS:2005 SP1
SQL:2005 SP2
ManagementStudioはVisualStudio内の一機能として実装される。
ヘルプ引けば一発
>>949 スタート+R -> sqlwb -> enter
でいつも起動している。
スタートメニューに出てこないってのはインストール順によって
そういうことになるという書き込みを見たような気がするが、
スタートメニューは使わないのでどうしたらいいかは覚えてないわ。
952 :
NAME IS NULL:2008/03/25(火) 13:59:28 ID:9n2z5qiu
今までWinNT + SQL6.5だったのが、
今度からWin2003server + SQL2005にグレードアップすることになりました!
恐らくこのスレにお世話になることと思います〜ウヒ
MERGE欲しいよう
955 :
NAME IS NULL:2008/03/25(火) 14:06:32 ID:9n2z5qiu
すみません、エラーが間違っていました。
タイトル: Microsoft SQL Server Management Studio Express
------------------------------
サーバー 'HIROSHI\ARIADNE' のデータベースのアタッチに失敗しました。
(Microsoft.SqlServer.Express.Smo)
ヘルプを表示するには
http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.3042.00&EvtSrc=Microsoft.SqlServer.Management. Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=データベースのアタッチ+Server&LinkId=20476 をクリック
------------------------------
ADDITIONAL INFORMATION:
Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。 (Microsoft.SqlServer.Express.ConnectionInfo)
------------------------------
データベース 'Ariadne'(ID: 5) のページ (1:1310) で内部操作中に、一貫性が損なわれていることが検出されました。
ご購入元に問い合わせてください。参照番号 3。
データベース 'Ariadne' でログに記録された操作をやり直しているときにエラーが発生しました。
エラーが発生したログ レコード ID は (3124:1484:2) です。
通常、この前に特定のエラーが Windows イベント ログ サービスにログ記録されます。
完全バックアップからデータベースを復元するか、データベースを修復してください。
新しいデータベース 'Ariadne' を開けませんでした。CREATE DATABASE は中止されます。
(Microsoft SQL Server、エラー: 5242)
ヘルプを表示するには
http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server& EvtSrc=MSSQLServer&EvtID=5242&LinkId=20476 をクリック
------------------------------
BUTTONS:
OK
------------------------------
このエラーでした
956 :
NAME IS NULL:2008/03/25(火) 21:46:19 ID:3ZCn973U
時代は2008なんだがw
>>949 自分のメモに書いてあったんでコピペしとく。
問題
SQL Server をインストールした後、Management Studio がプログラム メニューにない。
解決方法
Start -> Run -> appwiz.cpl から Microsoft SQL Server 2005 の構成を変更し、
ワークステーション コンポーネントをアンインストールする。その後 Tools\Setup.exe を起動してワークステーション コンポーネントをインストールする。
説明
この問題は次のような時に起きる。
Visual Studio 2005 をインストールするなどして、SQL Server Express がインストールされる。
その後に SQL Server の上位エディションをインストールすると、ワークステーション コンポーネントのインストールがブロックされるため、
Management Studio がインストールされない。
>>952 一ヶ月ほど前のバックアップをもどす。
SQL Server のサービスを停止する。
壊れた mdf と ldf を上書きする。
SQL Server のサービスを起動する。
DBCC CHECKDB を実行する。
レスありがとうございます。
----------
一ヶ月ほど前のバックアップをもどす。
SQL Server のサービスを停止する。
壊れた mdf と ldf を上書きする。
SQL Server のサービスを起動する。
---------------
この時点でオブジェクトエクスプローラーでデータベースを確認すると、
(未確認)となってしまっていてDBCC CHECKDBが実行できないのです。
実行できる方法はありますか?
>壊れた mdf と ldf を上書きする。
デタッチしてから上書き
そんでアタッチ
としてもだめかね?
デタッチもできないんです。
>>961 それは激しく壊れているのでバックアップから戻しなさいという意味だね。
非公開の方法だけどその状態でも多少なんとかなる方法はある。
だけどできるかどうかは保障しないし、データの整合性なんかも保障されないよ。
データベース名や ldf のパスは自分の環境に適当に変えて、自分でリスクを負ってやってね。
-- システム テーブルを直接更新できるように設定を変える
USE master
GO
sp_configure 'allow updates',1
GO
RECONFIGURE WITH OVERRIDE
GO
-- データベース ステータスを緊急に変更する
UPDATE master..sysdatabases SET status = 32768 WHERE name = 'Northwind'
GO
-- トランザクション ログ ファイルを再構築する
USE master
GO
DBCC REBUILD_LOG('Northwind', 'C:\Program Files\Microsoft SQL Server\MSSQL$INSTANCE\Data\northwnd.ldf')
GO
-- データベースの整合性をチェックする
USE master
GO
DBCC CHECKDB(Northwind)
GO
-- これで直らない場合は適宜 CHECKDB のオプションを増やしていくか、BCP でデータだけサルベージする
-- データベース ステータスをを緊急からオンラインに戻す
UPDATE master..sysdatabases SET status = 16 WHERE name = 'Northwind'
GO
-- システム テーブルを直接更新できるようにした設定を戻す
sp_configure 'allow updates',0
GO
RECONFIGURE WITH OVERRIDE
GO
-- もう一度データベースの整合性をチェックする
USE master
GO
DBCC CHECKDB(Northwind)
GO
-- データベースのプロパティが変わってないかチェックする
>>964 ありがとうございます。
やってみます。
DBCCでの構文エラーが出てしまいます。
もう少しSQLについても調べてみます。
SQLの質問なんですが、SQL Serverなのでこちらに質問させてください。
SQL Server 2000
(入力)
XX08-001-0AB
XX07-087-7BB
XX07-401-7BB
XX07-500-10CC
(欲しい出力)
XX08-001
XX07-087
XX07-401
XX07-500
二つ目のハイフン以降を切り落としたものが欲しいのですが、
SQLだけで処理できますか?
SELECT LEFT(項目,8) とか?
すいません、例が悪かったです。
それだったら確かに簡単ですよね。
(入力)
XX08-1-0AB
xx07-87-7BB
XX07-500-10CC
(出力)
XX08-1
xx07-87
XX07-500
です。お願いします。
これでいけるのでは?
substr(項目, 0, instr(項目, '-', -1, 1))
'instr' は 関数名 として認識されません。
エラー出ました↑
SQL Server2000 にはinstr無いんですね。
代わりにcharindexを使って解決できました。
substring(項目, 0, charindex( '-', 項目, charindex( '-', 項目) +1))
同じ関数がネストして、なんか不格好なのですが・・・
>>971 ストアドファンクション使えばいいと思うよ。
2000でインデックスチューニングウイザードを行おうとしたら
ワークロードが必要といわれました。
SQLプロファイラで何かすればいいとどこかに書いてあったのですが
ワークロードはどうやって作ればいいのでしょうか?
>>973 役に立たないウィザードに頼らず、
自分でインデックス張れ。
ゆとりか?
>>973 どんな使い方をするかシナリオがないとどうチューニングしていいかわからないだろ。
そのシナリオがワークロード。
内容はそれなりの分量になるからまずBooks Onlineを読もう。
SQLServerでの文字列ソート順序と.NETでの文字列ソート順序が異なるようなのですが、一致させるためにはどの部分をいじればいいんでしょうか・・・教えてエロイ人(´・ω・`)
照合順序でググって美奈代
978 :
976:2008/03/31(月) 23:13:40 ID:???
Windows照合順序とかJapanese_90あたりがくさそうですが、よくわからず・・・
明日また調べてみるです。
979 :
NAME IS NULL:2008/04/01(火) 20:36:52 ID:VVV3Eqei
>>911 超遅レスですがありがとうございました。
そこはインデックスしか指定できないと思ってました。
Windows2000Server Standard + SQLServer2000 Standard(SP4)で動いている
システムがあるのですが、サーバマシンの挙動がおかしくなっているので、
マシンのリプレースを考えています。
SQLServer2000をそのまま使った場合、Windows2003Serverは32Bit版と
64Bit版(WOW64上で動かす)とではどちらが安定性や速度的に優位でしょうか?
今日、ビューのDDLでサブクエリにWITH(NOLOCK)とかWITH(ROWLOCK,UPDLOCK)
などをつけてるのを発見した。ビューのSELECT文にこんなのつけて何の意味がある
のかさっぱりわからない。ぐぐってもよくわからない。SQL Server 2000です。
982 :
NAME IS NULL:2008/04/02(水) 19:39:46 ID:7rgZDuiK
983 :
NAME IS NULL:2008/04/02(水) 19:41:04 ID:7rgZDuiK
↑すいません、SQLSERVER2005です。
>>981 Books onlineは検索したのか?
985 :
NAME IS NULL:2008/04/02(水) 21:20:15 ID:lPTIXeR8
>>985 NOLOCKとかROWLOCKとかはCastじゃなくてテーブルヒント。
BooksOnlineをNOLOCKで検索してFROM句とロックのヒントという項目を読め
PerlからSQL Serverにつなぎたいのですが、お勧めの
モジュール等ありましたらご教示ください。
お勧めといっても、選択肢は
1.Win32::OLEを使ってADOアクセス。
2.DBD::ADOドライバを使ってDBIアクセス。
3.DBD::ODBCドライバを使ってDBIアクセス。
の3つしかない。
1.はコード量が多くて汚くなるけど、自由度は一番高いんじゃないかな。
ActivePerlなら標準でついてくるというメリットもある。
2.はすっきりと書けるけど、バインド処理に不具合(回避可能)あり。
3.はODBCというだけで敬遠して使ったことないけど案外いいかも。
ちょっとしたSELECT程度なら、すぐに始められる1.でいいと思うよ。
989 :
NAME IS NULL:2008/04/03(木) 18:47:58 ID:bavQZfEk
>>986 ありがとうございました。解決いたしました。
結局、最後までBOOKS ONLINEに書かれていることは理解できませんでしたがw
>>988 非常に有益な情報、有難うございました。
本当に参考になりました。
個人的にはDBIがなれていて好きなので(Postgres等で
使用経験あり)、DBD::ODBCを使用してみようかと思って
おります。
有難うございました。