Estou muito confuso com as Instâncias do SQL Server Express / com o que estou realmente me conectando?

2

Estou executando o SQL Express 2008 na minha máquina de desenvolvimento com uma instância.

Para algum desenvolvimento, usei a string AttachDB Connection. Eu realmente não consigo lembrar o motivo exato, mas eles não são montados da maneira normal. Eu acho que queria viver editar alguns dados e depois de muito tempo, descobri como se conectar do estúdio de gerenciamento ... Eu usei \.\pipe\A2108B22-19AA-41\tsql\query

No entanto, estou tentando aprender um pouco mais sobre o gerenciamento do MS SQL e queria saber como isso funciona tecnicamente e como ele é separado da instância principal (conectável via .\SQLExpress )?

Além disso, lembro-me de ter lido em algum lugar, mas posso estar errado, que este é um recurso do SQL Express e não o principal produto do SQL Server. Está correto ou errado?

A razão para a última parte da questão é que eu estava me perguntando se isso é uma espécie de "porta dos fundos" na hospedagem do SQL, ou se é possível desativá-lo. Estou hospedando alguns sites para as pessoas e eu emiti um usuário / passe e um banco de dados com um limite de tamanho para as pessoas. Antes de eu passar horas testando / mucking ao redor, eu só queria saber se alguém teve alguma idéia para isso?

    
por William Hilsum 09.10.2011 / 16:04

1 resposta

2

Se você estiver usando uma string de conexão com a seguinte aparência:

AttachDBFilename=|DataDirectory|MyDB.mdf;User Instance=true' 

você está usando um recurso do SQL Express conhecido como "Instanciação de usuário".

Esse recurso foi introduzido no SQL Server Express 2005 e forneceu a capacidade de os desenvolvedores executarem uma instância do SQL Server com seu próprio login (não administrador).

Ainda há uma instância com o nome .\SQLExpress em execução, ou seja, aquela criada no momento da instalação. No entanto, quando você se conecta a um banco de dados usando o recurso de instância de usuário AttachDBFilename , uma instância do novo SQL Express é girada para manipular o acesso ao banco de dados AttachDBFilename , essa "instância de usuário" é executada em suas janelas conta de logon.

A comunicação com essa instância acontece em um canal nomeado (como você descobriu).

Há um artigo informativo sobre o Instanciamento de usuários da Microsoft aqui:

User Instances for Non-Administrators (MSDN)

Embora este recurso ainda esteja disponível no SQL Server 2008 R2 Express, parece que ele está sendo substituído ou possivelmente removido em breve e é aconselhável não usá-lo:

This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

A instanciação do usuário também é incompatível com os sites em execução na conta ApplicationPoolIdentity no IIS7 e no IIS7.5. Para mais informações, consulte este artigo do MS Knowledgebase:

Problems with SQL Server Express user instancing and ASP.net Web Application Projects

Web applications built with Visual Studio 2005, Visual Studio 2008, or Visual Studio 2010 and that rely on user instancing with either SQL Server Express 2005 or SQL Server Express 2008 do not work with the new application pool identity. These products were developed and tested against application pools running with the older NETWORK SERVICE account.

Se você quiser apenas hospedar seu banco de dados na instância normal .\SQLExpress e ter acesso a ele via TCP / IP como um SQL Server regular, então você precisa fazer algumas coisas:

  1. Habilite o TCP / IP para o SQL Express. A instalação padrão só permite pipes nomeados. Você pode fazer isso usando o SQL Server Configuration Manager:

  2. AinstalaçãopadrãodoSQLExpressusaacontaNETWORKSERVICEcomoacontadeserviço.Talvezsejanecessárioconcederpermissõesdemodificaçãoparaessacontanapastaquecontémoarquivo.mdf.

  3. Anexeoarquivo.mdfnasuapastaApp_Dataàinstância.\SQLExpress.

  4. Alteresuastringdeconexãoparaumastringdeconexãoregular,porexemplo

    <addname="SupportSystem" 
         connectionString="Database=MyDatabaseName;Data Source=172.16.3.44\SQLEXPRESS;User ID=dbuser;Password=dbpassword;Initial Catalog=MyDatabaseName;" 
         providerName="System.Data.SqlClient"/>
    
por 10.10.2011 / 02:37