Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

nokPT

[Resolvido] Definir o caminho da base de dados SQL

Mensagens Recomendadas

nokPT

Pretendo criar uma base de dados num servidor da rede, até aqui tudo bem (acho, amanhã há backups depois testo melhor, localmente está a funcionar bem).

O problema é o seguinte, por causa dos backups, não quero criar a base de dados no path de default, quero escolher onde vai gravar. Localmente é muito simples é só escolher um FolderBrowserDialog, ele mostra as directorias todas do meu disco, e aponto o caminho para SelectedPath, simples.

O problema é fazer o mesmo no servidor, se fizer só me mostra as pastas partilhadas (se tiver) como no Explorer.

Eu tenho a ideia e quase a certeza que é possível fazer o que pretendo, acho que já fiz (ou vi) em algum lado, através do SQL Server Managment Studio fazer isso a partir de outro computador e é possível dizer ao SQL Server onde vai criar a base de dados localmente, mas é complicado dar uma path "às escuras".

Eu já tentei com o SQL Server Managment Studio do Meu PC fazer isso, mas o Meu é SQL Server Express 2008 e o do servidor é SQL Server 2005, e dá me erro ao tentar ligar (consigo ligar com o access).


Ricardo Timóteo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Não tenho a certeza de que o SQL Server suporte base de dados fora da máquina local, mas estou a falar assim "de cabeça a guiar-me pelo bom senso"...

Drives partilhadas desaconselho o uso, pois não raras vezes o Windows perde a ligação às mesmas de tal forma que é necessário alguém entrar na máquina, abrir o Explorer e e aceder às drives mapeadas, uma-a-uma, de forma a ganhar a ligação. Já tive um servidor assim e era "um pincel", volta-e-meia lá havia alguém que tinha de fazer isso.

Podes é experimentar usar paths UNC, se houver garantia de que o servidor onde estão os ficheiros da base de dados estiver sempre a funcionar creio que será a melhor solução.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nokPT

Não tenho a certeza de que o SQL Server suporte base de dados fora da máquina local, ...

Se calhar expliquei-me mal, não pretendo guardar a base de dados fora do servidor. Pretendo de fora do servidor, entrar lá dentro e dizer onde quero que o SQL Server guarde a base de dados.


Ricardo Timóteo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Para isso usas o SQL Server Managment Studio, se bem que de certo há comandos T-SQL para fazer isso a partir de uma consola.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nokPT

Pois eu tinha a ideia que o SQL Server Managmente Studio permitia fazer isso, mas no meu caso não dá.

A ideia é, fiz um programa em vb.net, e o que pretendo é que durante a instalação (ou depois de instalado), o próprio programa trate de tudo:

* Registe a Base de dados, num servidor à escolha do cliente

* Cria a base de dados, numa directoria à escolha do cliente (problema dos backups)

* etc...

Até aqui tudo bem, eu consigo fazer isto, só que o cliente tem que meter a directoria à mão, e o que eu pretendia era que aparecesse como no FolderBrowserDialog as directorias disponíveis no servidor para o utilizador escolher, esta parte é que não estou a conseguir....


Ricardo Timóteo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Pela tua descrição acho que não estás a fazer a coisa como deve ser, mas corrige-me se estiver errado.

Durante o processo de instalação deves é pedir o endereço, porto e credenciais para te ligares ao SQL Server.

Uma vez ligado ao SQL Server corres o script de criação da base de dados, com as tabelas, views, sps, etc. e guardas essa informação na configuração da tua aplicação.

O script de criação da base de dados não necessita de especificar onde vão ficar guardados os ficheiros nem onde vão ser guardados os backups, etc., isso tem a ver com a gestão da BD, são tarefas do DBA.

No entanto se quizeres, ou for mesmo necessário, podes pedir essa informação ao mesmo tempo que pedes a informação de ligação ao SQL Server e adaptas o teu script de criação da BD para receber/usar esses parâmetros.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

É uma relação parva, mas quando acedes a uma página através de um browser, não tens de indicar os URL de todas as imagenzinhas e elementos que constituem o site. Basta-te dar o endereço da página.

Em SQL Server, não tens de te preocupar com a localização do ficheiro ou ficheiros que são no fundo a base de dados (everything is-a-file). Tens sim, de te preocupar com a localização do servidor, da instância, que gere n bases de dados.

O ambiente alvo terá de ter ao alcance da rede (quer local, quer mundial) a instância SQL que vai gerir os dados. Depois de ligar é uma questão de despejar scripts (como o M6 te explicou), caso a base de dados não exista.

Isto está construído assim para permitir que uma tareia de clientes se liguem à mesma instância.

Se fossem ficheiros de localização pré-estipulada, não podias garantir que todos lhe conseguiam chegar.

Se a tua aplicação não está construída para operar com múltiplos utilizadores, se não precisa de uma base de dados central, deverias pensar numa solução onde a base de dados é portátil (como SQLLite) e levá-la encostada ao executável.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nokPT

...

Uma vez ligado ao SQL Server corres o script de criação da base de dados, com as tabelas, views, sps, etc. e guardas essa informação na configuração da tua aplicação.

O script de criação da base de dados não necessita de especificar onde vão ficar guardados os ficheiros nem onde vão ser guardados os backups, etc., isso tem a ver com a gestão da BD, são tarefas do DBA.

...

Eu estou a fazer isto tudo,

* Procuro por Servidores SQL na rede (tenho pelo menos 3)

* O Utilizador escolhe 1 (o que mais lhe der jeito)

* Escolhe o caminho para a guardar a base de dados (escreve numa textbox)

* Executo o script de criar Base de Dados, Criar Tabelas, etc...

Até aqui tudo bem...

...

Em SQL Server, não tens de te preocupar com a localização do ficheiro ou ficheiros que são no fundo a base de dados (everything is-a-file). Tens sim, de te preocupar com a localização do servidor, da instância, que gere n bases de dados.

...

O meu problema da localização dos ficheiros da base de dados, prende-se com rotinas de backups, estas rotinas estou a correr para pastas partilhadas específicas e não para o disco todo,

o caminho de default das bases de dados do SLQ Server é qualquer coisa como: C:\Programas\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA, não é propriamente user-friendly, eu pessoalmente preferia que o utilizador a instalar escolhesse um caminho que lhe dê mais jeito.

...

Se fossem ficheiros de localização pré-estipulada, não podias garantir que todos lhe conseguiam chegar.

...

Percebes disto muito mais que eu, mas não me parece muito certa esta afirmação, acho (mas posso estar completamente errado) que nós ligamos-nos a uma instância SQL e está é que se liga à base de dados, ou seja, quem liga ao SQL Server "vê" a base de dados, todos os utilizadores que se ligam (com sucesso).

...

Se a tua aplicação não está construída para operar com múltiplos utilizadores, se não precisa de uma base de dados central, deverias pensar numa solução onde a base de dados é portátil (como SQLLite) e levá-la encostada ao executável.

Efectivamente, neste momento será para mono-utilizador (mas não queria ficar limitado) e podia instalar no computador do utilizador que a vai usar, mas mais uma vez teria problemas com os backups, só se executam backups dos dados que estão no servidor...

Posso estar a ver ou a pensar mal o que pretendo fazer, pode até nem ser possível ou nem ser a melhor coisa.

Já pensei em criar Dois programas, um que só vai registar e criar a base de dados no servidor (seria usado localmente no servidor) e o outro (computador do utilizador) que lhe liga e faz o resto, mas parece-me mais um remendo (neste caso).


Ricardo Timóteo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Mas estás a quere fazer backups por cópia dos ficheiros da BD do SQL Server?

Se sim, esquece. Isso não é a forma correcta de fazer a coisa. A forma correcta de fazer a coisa é agendar um JOB para fazer o backup. Isso é responsabilidade do DBA, é ele, e não o utilizador que está a instalar a aplicação que saber onde, como e quando os backups são feitos. Mesmo assim, se quiseres fazer isso, basta usares a mesma estratégia de criação da BD: tens uns script que te cria um JOB que faz backup para um determinado directório numa dada periodicidade.

Se vais pedir o caminho para onde os backups devem ser feitos, então coloca apenas uma caixa de texto, sem file dialog, porque o file dialog não está no contexto correcto (está a correr na máquina de instalação e não no servidor). Se o utilizador não souber escrever qual o caminho, então parece-me que mesmo com a file dialog só ia fazer burrada.

Repara que a instalação de uma aplicação desse tipo é necessária que a mesma seja feita por alguém que tem conhecimentos técnicos, não é a mesma coisa que fazer download do MSN e fazer "seguinte" várias vezes no instalador. Se quem vai instalar isso não tem conhecimentos técnicos, então é bom que não seja ele a instalar dado que a probabilidade de fazer burrada por não saber o que está a fazer é bastante alta.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Acrescento ao que o M6 indicou que a cópia directa dos ficheiros da BD em MS SQL, ou noutro motor qualquer, não produz um backup recuperável. Além de que é bem possível que não consigas fazer a cópia dos ficheiros por estarem a ser utilizados, se queres guardar esses ficheiros tens de executar um detach antes de lhes tentares mexer, se não fizeres um detach não tens qualquer garantia de que os ficheiros que copias possam sequer ser lidos de volta.

Copiar os ficheiros que guardam os dados não é a melhor forma de fazer o backup.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.