SQL Server/SQL Server Tip

쉐어포인트의 SQL Server 접속 문제

SungWookKang 2015. 7. 22. 10:46
반응형

쉐어포인트의 SQL Server 접속 문제

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012, 2014

 

SQL Server 2014 버전에서 SharePoint 서버가 접속하지 못하는 문제가 발생하였다. (결론적으로 버전의 문제는 아니다.) 어떤 사례인지 다음 포스트를 통해 알아 보자.

 

이번 포스트는 CSS SQL Server Engineer 팀 블로그에 게시된 내용으로 필자가 읽고 이해한 내용을 정리 하였으며 번역의 오류나 기술적 오류가 있음을 미리 알려둔다. 자세한 내용은 원문을 참고하길 바란다.

 

SQL Server 2014 CTP 버전에서 쉐어포인트 2013을 구성할 때 연결 문제가 발생 하였다. 발생한 에러는 데이터베이스를 생성하려고 할 때 발생 하였다.

Exception: System.ArgumentException: myserver,50000 is an invalid or loopback address. Specify a valid server address.
at Microsoft.SharePoint.Administration.SPServer.ValidateAddress(String address)
at Microsoft.SharePoint.Administration.SPServer..ctor(String address, SPFarm farm, Guid id)
at Microsoft.SharePoint.Administration.SPConfigurationDatabase.RegisterDefaultDatabaseServices(SqlConnectionStringBuilder connectionString)
at Microsoft.SharePoint.Administration.SPConfigurationDatabase.Provision(SqlConnectionStringBuilder connectionString)
at Microsoft.SharePoint.Administration.SPFarm.Create(SqlConnectionStringBuilder configurationDatabase, SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword, SecureString masterPassphrase)
at Microsoft.SharePoint.Administration.SPFarm.Create(SqlConnectionStringBuilder configurationDatabase, SqlConnectionStringBuilder administrationContentDatabase, String farmUser, SecureString farmPassword, SecureString masterPassphrase)
at Microsoft.SharePoint.PostSetupConfiguration.ConfigurationDatabaseTask.CreateOrConnectConfigDb()
at Microsoft.SharePoint.PostSetupConfiguration.ConfigurationDatabaseTask.Run()
at Microsoft.SharePoint.PostSetupConfiguration.TaskThread.ExecuteTask()

 

이 문제는 예전에도 충돌이 있었으며 SQL 별칭을 만들어 문제를 해결하였다. 그러나 이번엔 작동하지 않았다.

 

이 문제에 대해서 몇 가지 레퍼런스 코멘트에서는 SQL Server의 기본 포트인 1433을 사용하지 않도록 지시하고 있었다. 일부 쉐어포인트 문서에서는 SQL 포트를 변경하는 방법과 별칭을 만드는 방법을 보여 주었다. 하지만 사실적인 문제에 대한 이유는 찾을 수 없었다.

 

이 문제는 SQL Server 2014와는 전혀 상관이 없었으며 모든 SQL Server 버전에서 발생 할 수 있다. 이 이슈는 쉐어포인트에서 볼 수 있다. 어떠한 서버 이름이라도 유효하도록 DNS에 추가해야 한다. 기본포트(1433)을 사용하지 말고 별칭을 만들어야 한다. 별칭을 만들 때 DNS에 존재하지 않는 이름이어야 한다. 그렇지 않으면 동일한 오류가 발생 한다.

 

처음 오류 보고는 다음과 같았다. 다음 오류는 쉐어포인트 오류이며 SQL Server 오류가 아니다.

Exception: System.ArgumentException: myserver,50000 is an invalid or loopback address. Specify a valid server address.
at Microsoft.SharePoint.Administration.SPServer.ValidateAddress(String address)

 

SPServer.ValidateAddress 가 호출 된 경우 Argument Exception이 발생 하였다. justDecompile(http://www.telerik.com/products/decompiler.aspx)라는 닷넷 도구를 사용하여 문제를 확인 한다.

Microsoft.SharePoint 어셈블리에서 Administration 네임스페이스를 확인 할 수 있다..

 

여기에서 SPServer객체와 유효한 주소 메서드를 요청한다.

 

 

internal static void ValidateAddress(string address)
{
Uri uri;
if (address == null)
{

throw new ArgumentNullException("address");

}

UriHostNameType uriHostNameType = Uri.CheckHostName(address); <-- This is what gets us into trouble
if (uriHostNameType == UriHostNameType.Unknown)
{
object[] objArray = new object[] { address };
throw new ArgumentException(SPResource.GetString("InvalidServerAddress", objArray)); <-- The exception will be thrown here
}

uri = (uriHostNameType != UriHostNameType.IPv6 ||
address.Length <= 0 ||
address[0] == '[' ||
address[address.Length - 1] == ']' ?
new Uri(string.Concat("http://", address)) : new Uri(string.Concat("http://[", address, "]")));
if (uri.IsLoopback)
{

object[] objArray1 = new object[] { address };
throw new ArgumentException(SPResource.GetString("InvalidServerAddress", objArray1));
}
}

 

 

Uri.CheckHostName 메서드에서 유효한 DNS이름이 있는지 확인한다.

 

Uri.CheckHostName Methiod :

http://msdn.microsoft.com/en-us/library/system.uri.checkhostname.aspx

 

 

전달하려는 문자열이 DNS에 없는 경우 실패 한다.

 

 

[참고자료]

http://msdn.microsoft.com/en-us/library/system.uri.checkhostname.aspx

 

 

2013-10-08 / 강성욱 / http://sqlmvp.kr

 

 

반응형