SQLserver 突然ダイヤグラムが使えなくなった。

ダイヤグラムをひらこうとすると、下記のエラーがでてリレーションが組めません。
さらに、既に組んでいたリレーションも見ることができません。

データベース プリシパルとして実行できません。プリシパル”dbo”が存在しないか、この種類のプリシパルで権限を信用できないか、ユーザーに権限がありません。(Microsoft SQL server、エラー:15517)

どうしたらいいものか!?費やす時間5時間。

クエリで下記のコマンドを実行して回避した。

exec sp_changedbowner ‘sa’

このコマンドの説明は、データベース所有者 (dbo) が不明なユーザーとして表示されている場合は、ユーザー データベースで次のコードを実行します。とのこと。

なおったのでよかった。

SQLserver データ型 簡易分類

●char
固定長の半角文字列を格納。
(数字ですが)JAN コードや、空港コードなど。

●nchar
固定長の全角文字列を格納。
いい例が思いつきませんが、例えば会社の部署全てに漢字 2 文字の略称(営管、開1、等)を付与している場合。

●varchar
可変長の半角文字列を格納。
英語の商品名や、ローマ字の氏名など。

●nvarchar
可変長の全角文字列を格納。
日本語の商品名や漢字の氏名、日本語でのメモなど、日本語環境では使用頻度が高いと思われます。

名称は、以下のような規則になっています。
char/nchar ⇒ 固定長
varchar/nvarchar ⇒ 可変長
n付 ⇒ Unicode 対応(全角文字がある場合に推奨)
n無 ⇒ ASCII 対応(半角英数字記号)

SQLserver 特定のIPだけの接続に制限する。

SQLserverには、その機能はないので、Windowsのファイヤーウォールを使う。

サーバーのローカルコンピューターのセキュリティ>>受信の規制にて、SQLserverのポート開放

1433
1434

とされているかと思います。※されてなければ接続はできない。

その設定のプロパティから、スコープ>>これらのIPアドレス

このエリアに固定IPを追加すれば、それ以外は接続できなくなる。

また、IPの範囲指定もできるので、192.168.1.2~192.168.1.50とでもやれば、
その範囲のIPだけが接続することができる。

VPNなどもあるなら、VPNの方は、固定IPにて接続、社内は範囲指定にすれば使い勝手がいいのではないでしょうか。

VPN経由でSQLserverに接続できない。ファイヤーウォール

ローカル内では接続できるが、VPN経由だと接続できない。
しかし、なぜか、パブリックのファイヤーウォールを切ると接続できる。
ファイヤーウォールをOFFのままでは心配なので調べた。

答えは簡単だった。

ネットワーク共有センター>>共有の詳細設定の変更

ここで、パブリックフォルダの共有>>共有を有効にして・・・という項目にチェックボックスを変更するだけ。

つまり、パブリックではサーバー側のファイヤーウォールが身を隠している設定になっていたというわけです。

SQL Server に接続できなくなった場合の確認

数日SQLサーバーに接続しない日が続いたのち、ローカルに構築したSQLサーバーにつながらなくなってしまいました

その時の確認箇所について

「SQL Server 2017 構築マネージャー」から SQL Serverの状態を「開始」を押して「実行中」状態にする

SQLserver アクセスからのインポートエラー

アクセステーブルのインポートに

Microsoft SQL Server Migration Assistant for Access

なるソフトをマイクロソフトが出してくれたようだ。しかし、そのまま使えるようにはなっていない。

まず、インポートエラー

インデックス はい(重複あり)

インデックス はい(重複なし)

この重複ありにしないとデータが競合してインポートエラーを起こしていた。

どこをいじっても変更できない。

 

SQLserverのテーブルの対象テーブル内にインデックスという項目があり、その中に、data_id¥WPW(一意,非クラスター化)なるものがあり、それごと削除したら解決した。

SQLserver 日付の書式が変更できない。

アクセスのリンクテーブルの書式が変更できない。

SQLserver側にて、データ形式を見ると、

datetime2(7)になっている。

それをdatetimeに変更してもアクセス側がかわらない。

2017-01-01 00:00:00

困った。

結論は、リンクを貼りなおせば治った。2017/01/01

SQLserver 自動採番をリセット

アクセスへのリンクテーブルでデータをコピーすると採番された番号がずれた。なので、再度やり直すとその後から採番になってしまう。採番のリセットがしたい。

 

SQLserverのクエリで、下記を書いて実行すれば簡単に採番のリセットができた。

 

DBCC CHECKIDENT (data_id, RESEED, 0);

data_idはテーブル名

MSSMSが接続できない

表題とおり。

まず、ポート開放。1433TCP 1434UDP そして、プログラムのポート開放をしないとつながらなかった。ファイアーウォールでブロックされていた。

 

それから、認証モードを混合にしなければダメ。

そうしないと外部から接続できない。

セキュリティ認証モードを変更するには

  1. SQL Server Management Studio オブジェクト エクスプローラーで、サーバーを右クリックし、 [プロパティ]をクリックします。
  2. [セキュリティ] ページの [サーバー認証]で、新しいサーバーの認証モードを選択し、 [OK]をクリックします。
  3. SQL Server Management Studio の再起動が必要であることを示す のダイアログ ボックスで、 [OK] SQL Serverをクリックします。
  4. オブジェクト エクスプローラーでサーバーを右クリックし、 [再起動]をクリックします。 SQL Server エージェントも再起動する必要があります (実行されている場合)。

sa ログインを有効にするには

  1. オブジェクト エクスプローラーで、 [セキュリティ]、[ログイン] の順に展開し、 [sa]を右クリックして [プロパティ]をクリックします。
  2. [全般] ページで、ログインのパスワード作成と確認が必要になる場合があります。
  3. [状態] ページで、 [ログイン] の [有効]をクリックし、 [OK]をクリックします。

SQLserver MSSM ダイヤグラムが突然開けない。

メッセージ 15517
データベース プリンシパルとして実行できません。プリンシパル “dbo” が存在しないか、この種類のプリンシパルで権限を借用できないか、ユーザーに権限がありません。

突然、ダイヤグラムを開こうとしたらエラーがでて変更ができない。
データベースの所有者を確認する必要があるとか。

移行先でデータベースを復元(リストア)した後は、データベースの所有者が設定されていることを確認しておくようにします。移行元で、データベースの所有者が Active Directory ドメインのユーザーになっていて、移行先でも同じドメインに参加している場合であれば、そのユーザーが引き続きデータベースの所有者に設定されるのですが、異なるドメインや、ワークグループ環境へ復元した場合や、Windows のローカル ユーザーが所有者になっている場合は、復元後にデータベースの所有者が「空」に設定されてしまいます。

データベースからの右クリック>>プロパティ>>ファイル>>所有者

ここに、所有者を選択していれれば、回避できる。
いろいろとあるものだ。

参考ページ:http://www.sqlquality.com/ex2014/UpgradeTo2014_ex/Text/Step05-09.html