2017年12月26日火曜日

SQL Server Management Studio 変更の保存が許可されていません。 行った変更には、次のテーブルを削除して再作成することが必要になります。 再作成できないテーブルに変更を行ったか、テーブルの再作成を必要とする変更を保存できないようにするオプションが有効になっています。


エラーメッセージ
SQL Server Management Studio 変更の保存が許可されていません。 行った変更には、次のテーブルを削除して再作成することが必要になります。 再作成できないテーブルに変更を行ったか、テーブルの再作成を必要とする変更を保存できないようにするオプションが有効になっています。



対応
「ツール」→「オプション」→「デザイナ」の「テーブルの再作成を必要とする変更を保存できないようにする」のチェックをはずす。



2017年12月23日土曜日

ファイル 'F:\System Volume Information\WPSettings.dat' の権限設定を更新できませんでした。ファイルの権限設定は 'D:P(A;OICI;FA;;;BA)(A;OICI;FA;;;SY)(A;OICI;FA;;;CO)(A;OICI;FA;;;S-1-5-80-3880718306-3832830129-1677859214-2598158968-1052248003)' に設定されることになっていました。

1)エラー

タイトル: Microsoft SQL Server 2016 セットアップ
------------------------------

次のエラーが発生しました:

ファイル 'F:\System Volume Information\WPSettings.dat' の権限設定を更新できませんでした。ファイルの権限設定は 'D:P(A;OICI;FA;;;BA)(A;OICI;FA;;;SY)(A;OICI;FA;;;CO)(A;OICI;FA;;;S-1-5-80-3880718306-3832830129-1677859214-2598158968-1052248003)' に設定されることになっていました。

[再試行] をクリックしてやり直すか、[キャンセル] をクリックしてこの操作を取り消し、セットアップを続行してください。

ヘルプを表示するには http://go.microsoft.com/fwlink?LinkID=20476&ProdName=Microsoft%20SQL%20Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=13.0.4001.0&EvtType=0x88792597%25400xBB814387 をクリック

------------------------------
BUTTONS:

再試行(&R)
キャンセル
------------------------------



2)対応方法

Fドライブ直下にしているのは、Auzreのテンポラリドライブを使っているためです。

tempbは一旦デフォルトの設定で作ってから移動します。

D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data

--tempdb
ALTER DATABASE tempdb MODIFY FILE ( NAME = tempdev , FILENAME = 'F:\tempdb.mdf' )
ALTER DATABASE tempdb MODIFY FILE ( NAME = temp2 , FILENAME = 'F:\tempdb_mssql_2.ndf' )
ALTER DATABASE tempdb MODIFY FILE ( NAME = temp3 , FILENAME = 'F:\tempdb_mssql_3.ndf' )
ALTER DATABASE tempdb MODIFY FILE ( NAME = temp4 , FILENAME = 'F:\tempdb_mssql_4.ndf' )
ALTER DATABASE tempdb MODIFY FILE ( NAME = temp5 , FILENAME = 'F:\tempdb_mssql_5.ndf' )
ALTER DATABASE tempdb MODIFY FILE ( NAME = temp6 , FILENAME = 'F:\tempdb_mssql_6.ndf' )
ALTER DATABASE tempdb MODIFY FILE ( NAME = temp7 , FILENAME = 'F:\tempdb_mssql_7.ndf' )
ALTER DATABASE tempdb MODIFY FILE ( NAME = temp8 , FILENAME = 'F:\tempdb_mssql_8.ndf' )
ALTER DATABASE tempdb MODIFY FILE ( NAME = templog , FILENAME = 'F:\templog.ldf' )


メンテナンスを行うため、 SQL Server のインスタンスを停止する。
ファイルを新しい場所に移動する。
SQL Server のインスタンスまたはサーバーを再起動します。
次のクエリを実行して、ファイルが変更されたことを確認します。

SELECT name, physical_name AS CurrentLocation, state_desc 
FROM sys.master_files
WHERE name = 'tempdev';

SELECT name, physical_name AS CurrentLocation, state_desc 
FROM sys.master_files
WHERE name = 'temp2';

SELECT name, physical_name AS CurrentLocation, state_desc 
FROM sys.master_files
WHERE name = 'temp3';

SELECT name, physical_name AS CurrentLocation, state_desc 
FROM sys.master_files
WHERE name = 'temp4';

SELECT name, physical_name AS CurrentLocation, state_desc 
FROM sys.master_files
WHERE name = 'temp5';

SELECT name, physical_name AS CurrentLocation, state_desc 
FROM sys.master_files
WHERE name = 'temp6';

SELECT name, physical_name AS CurrentLocation, state_desc 
FROM sys.master_files
WHERE name = 'temp7';

SELECT name, physical_name AS CurrentLocation, state_desc 
FROM sys.master_files
WHERE name = 'temp8';

SELECT name, physical_name AS CurrentLocation, state_desc 
FROM sys.master_files
WHERE name = 'templog';

System.NotSupportedException: 型 'System.Data.SqlClient.SqlClientFactory' のプロバイダー ファクトリのプロバイダー名を特定できません。ADO.NET プロバイダーがアプリケーション config にインストールまたは登録されていることを確認してください。

1)発生しているエラー

500 : InternalServerError
システムエラーが発生しました。管理者に連絡してください。
System.NotSupportedException: 型 'System.Data.SqlClient.SqlClientFactory' のプロバイダー ファクトリのプロバイダー名を特定できません。ADO.NET プロバイダーがアプリケーション config にインストールまたは登録されていることを確認してください。

事象としては、IISではデバック実行できるが、IIS Expressではデバック実行でエラーが発生する。
IIS Expressのほうがデバックしやすいので対応を行う。

2)対応 web.configに↓の一行を追加
<remove invariant="system.data.sqlite.ef6" />
を追加

Web.configのDbProviderFactoriesタグの全体
  <system.data>
    <DbProviderFactories>
  <remove invariant="System.Data.SQLite.EF6" />  <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
      <remove invariant="System.Data.SQLite" />
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    </DbProviderFactories>
  </system.data>

以上

2017年12月19日火曜日

Azureチームからのメール問い合わせについて、スタックオーバーフローを紹介しているところに感銘を受けた

ここ最近(4,5年)、OSSの取り組みなどオープンな企業になっていくマイクロソフトは素敵だなぁって思う。
昔は、仕事でマイクロソフト製品を扱うと独自でクローズドな感覚で仕事をしていると感じていました。しかし、今のマイクロソフトは、市場の感覚でマイクロソフト製品、サービス群を使えていて、それらを絡めて全体として良いソリューション、サービスが世の中に提供できるよになってきていると感じています。
エンジニアにとっても、市場にとってもバリューの高い企業に返り咲いたと改めて実感。

メールの抜粋
------------------------------------------------------------
For questions or feedback, please visit Stack Overflow or contact Azure support.
    
Thank you,

Your Azure Team    

------------------------------------------------------------


2017年12月16日土曜日

SQL Serverで既定のデータベースファイルの作成場所を変更する。


SQL Server Management Studioでデータベースサーバの「プロパティ」を選択する。











データベースの設定で既定の場所を修正する



↓修正

データベースサーバを再起動する



SQL Server Management Studioで以下のクエリを実行して検証する。
create database kiyotaka
go

D:\SQLDataにデータファイルが出来ていて、


D:\SQLLogにログファイルが出来ていることを確認しました。



環境:
Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64)
        Sep  5 2017 16:12:34
        Copyright (c) Microsoft Corporation
        Developer Edition (64-bit) on Windows 10 Enterprise 6.3 <X64> (Build 16299: ) (Hypervisor)

2017年12月14日木曜日

SQL Server 2016 insert文で存在しない項目を指定してもストアドプロシージャが成功する

検証用のクエリ
------------------------------------------------------------
create database test
go
use test
go

create table test(i int, n nvarchar(50));
create table test2(i int, n nvarchar(50));

create or alter procedure testsp as
begin
insert into test (i,aaaaaaaaa) select bbbbbbbbb, n from test2 inner join #wrk on #wrk.id = test2.i;
end
コマンドは正常に完了しました。
・・・えっ?!
testテーブルには、aaaaaaaaaなんで項目がないのにエラーになる。
これはストアドのビルドでエラーとして判断してもらいたいものです。

環境:
・Microsoft SQL Server 2016 (SP1-CU2) (KB4013106) - 13.0.4422.0 (X64)
・Microsoft SQL Server 2016 (SP1-CU6) (KB4037354) - 13.0.4457.0 (X64)

2017年12月7日木曜日

クイックフォーマットとフォーマットはどっちが性能がよいのか?を検証してみた。(SSD)

使用したDISK
SSD:crutial MX300 2TB Firmware M0CR050
RAIDボード:PERC H710 mini

クイックフォーマット時間:一瞬(2,3秒)
フォーマと時間:

CrystalDiskMark6.0.0x64の結果
1)クイックフォーマット
1-1.1GBで測定

1-2.2GBで測定
1-3.4GBで測定
1-4.8GBで測定

2)フォーマット
2-1.1GBで測定

2-2.2GBで測定
2-3.4GBで測定
2-4.8GBで測定




2017年12月5日火曜日

IISとIIS Expressの違いについて>Visual Studio+IIS+SQL Serverで開発する場合の組み合わせを検証して見ました。

Visual Studio+IIS+SQL Serverで開発する場合の組み合わせを検証して見ました。
参考に。
Visual Studio Web Server Database VSが一般ユーザの場合 VSが管理者の場合
2015 IIS SQL Server localDB ×エラー※3※4 ×※3⇒ただの警告だから無視する
※10⇒DBをlocalDBからSQLServerへ変更する
SQL Server ×※4
IIS Express SQL Server localDB
SQL Server
2017 IIS SQL Server localDB ×エラー※3※4 ×※3⇒ただの警告だから無視する
※7⇒DBをlocalDBからSQLServerへ変更する
SQL Server ×※4 ○※6⇒※6はコーディングのバグ、※7
IIS Express SQL Server localDB ○※1 ○※6
※6はコーディングのバグ
SQL Server ○※8

※8:SSMSでセッションを切ってあげると動作する。容赦ないセッションの削除バッチを使うといい。
?:本来は動作するはず

------------------------------------------------------------

※1:これは発生しても自然に治った。はて?
---------------------------
Microsoft Visual Studio
---------------------------
ID 22852 のプロセスは実行されていません。
---------------------------
OK   
---------------------------

Microsoft Visual Studio ID 22852 のプロセスは実行されていません。

※2
---------------------------
Microsoft Visual Studio
---------------------------
プログラム 'http://localhost:83/MvcModel/Admin/Home/Index' を開始できません。



リモート プロシージャ コールに失敗し、実行されませんでした。


---------------------------
OK   
---------------------------

※3
DBが SQL Server Express LocalDBだとIISと組み合わせて使用する警告が発生する

※4
---------------------------
Microsoft Visual Studio
---------------------------
Web サーバーでデバッグを開始できません。起動された URL に一致する Web サイトは IIS の一覧に含まれていません。

詳細については [ヘルプ] をクリックしてください。
---------------------------
OK   ヘルプ   
---------------------------

※5
---------------------------
Microsoft Visual Studio
---------------------------
Web サーバーでデバッグを開始できません。リモート サーバーがエラーを返しました: (403) 使用不可能

詳細については [ヘルプ] をクリックしてください。
---------------------------
OK   ヘルプ   
---------------------------

※6
HomeControllerが複数見つかるえらーが発生

※7
System.Data.SqlClient.SqlException が発生しました
  HResult=0x80131904
  Message=SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: SQL Network Interfaces, error: 50 - Local Database Runtime エラーが発生しました。LocalDB インスタンスを開始する際にエラーが発生しました: SQL Server プロセスを開始できませんでした。
)
  Source=.Net SqlClient Data Provider
  スタック トレース:
<例外のスタック トレースを評価できません>


※8

System.Data.SqlClient.SqlException が発生しました
  HResult=0x80131904
  Message=データベース "MvcModel" は現在使用中なので削除できません。
  Source=.Net SqlClient Data Provider
  スタック トレース:
<例外のスタック トレースを評価できません>


※9
ALTER TABLE [dbo].[Key2Table] ADD CONSTRAINT [PK_dbo.Key2Table] PRIMARY KEY ([Key1], [Key22])
System.Data.SqlClient.SqlException (0x80131904): オブジェクト名 'dbo.Key2Table' およびインデックス名 'PK_dbo.Key2Table' に重複したキーが見つかったので、CREATE UNIQUE INDEX ステートメントは終了しました。重複したキーの値は (1, 0) です。
制約またはインデックスを作成できませんでした。以前のエラーを調べてください。
ステートメントは終了されました。
   場所 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   場所 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   場所 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
   場所 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   場所 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   場所 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<NonQuery>b__0(DbCommand t, DbCommandInterceptionContext`1 c)
   場所 System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
   場所 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext)
   場所 System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext)
   場所 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable`1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable`1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection)
   場所 System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass30.<ExecuteStatements>b__2e()
   場所 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0()
   場所 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
   場所 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements, DbTransaction existingTransaction)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements)
   場所 System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable`1 operations, IEnumerable`1 systemOperations, Boolean downgrading, Boolean auto)
   場所 System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading)
   場所 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading)
   場所 System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   場所 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   場所 System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   場所 System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
   場所 System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   場所 System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   場所 System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   場所 System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   場所 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
   場所 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   場所 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   場所 System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   場所 System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   場所 System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   場所 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
ClientConnectionId:15235e99-b98f-4952-b7c6-3713e4f35bd3
Error Number: 1505、State: 1、Class: 16
オブジェクト名 'dbo.Key2Table' およびインデックス名 'PK_dbo.Key2Table' に重複したキーが見つかったので、CREATE UNIQUE INDEX ステートメントは終了しました。重複したキーの値は (1, 0) です。
制約またはインデックスを作成できませんでした。以前のエラーを調べてください。
ステートメントは終了されました。
PM> 

※10
SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: SQL Network Interfaces, error: 50 - Local Database Runtime エラーが発生しました。LocalDB インスタンスを開始する際にエラーが発生しました: SQL Server プロセスを開始できませんでした。)

2017年12月4日月曜日

sys.schemaのnameを使うと発生する謎の「メッセージ 8152、レベル 16、状態 2、行 8 文字列データまたはバイナリ データが切り捨てられます。」

/*
SQL Serverのバージョンによって動作が異なるのでメモをUP

異なるSQL Serverの一覧
SQL Server Version 互換レベル 現象の発生
------------------------------------------------------------
SQL Server 2012 SP3 2005~2012 問題なし
SQL Server 2016 SP1 CU2 2005~2016 エラーが発生
SQL Server 2016 SP1 CU6 2005~2016 エラーが発生

現象は、下記のクエリでエラーが発生する場合としない場合があります。
*/

begin tran
--drop table #tablelist
CREATE TABLE #tablelist (SchemaName VARCHAR (10));
SELECT max(len(s.[name])) FROM sys.schemas s JOIN sys.tables t ON s.schema_id=t.schema_id
--3
INSERT INTO #tablelist SELECT s.[name] FROM sys.schemas s JOIN sys.tables t ON s.schema_id=t.schema_id
/*
メッセージ 8152、レベル 16、状態 2、行 8
文字列データまたはバイナリ データが切り捨てられます。
ステートメントは終了されました。
そもそもinsert into selectで投入するデータの最大桁数は、3桁なのにエラーとなる。
これは、SQL Serverの欠陥と見ている。
*/
rollback tran

SELECT s.[name] FROM sys.schemas s
/*
dbo
guest
INFORMATION_SCHEMA
sys
db_owner
db_accessadmin
db_securityadmin
db_ddladmin
db_backupoperator
db_datareader
db_datawriter
db_denydatareader
db_denydatawriter

「INFORMATION_SCHEMA」があるために、#tablelistの桁が18桁必要のようです。
しかし、inner join(内部結合)でデータを持ってきていないので、本来はエラーとなるべきではない。
SQL Serverの不具合と見ています。
*/

2017年12月2日土曜日

SAP Crystal Reports Service Packを集めてみた