Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Ο sql server 2005 δινει την δυνατοτητα να δημιουργήσουμε scriptakia για την δημιουργια μιας βάσης , το backup κ.τ.λ.....

 

Στο laptop οταν εκτελώ το scriptaki createDatabaseScript.sql αποθηκευει επιτυχως την db μου στο default folder C:\Program Files\Microsoft SQL Server\MSSQL.3\MSSQL\myDatabase.mdf

 

ομως οταν προσπαθησω να κανω το ιδιο σε αλλο Pc οπου εχει διαφορετικο Default path

ΔΕΝ εκτελειται και βγαζει errors που ειναι λογικο...( υποψιαζομαι τουλαχιστον οτι αυτο φταιει )

 

Με ποιο τροπο θα μπορω το scriptaki Που φτιαχνω στο δικο μου pc να λειτουργει σε διαφορετικα pcs ή τουχαλιστον αν εχετε να μου προτεινετε καποιο τροπο ετσι ωστε ενα προγραμματακι να μπορει να δημιουργει την βαση σε διαφορετικα pcs εκτος απο αυτον τον τροπο....

 

Γενικα τα softwares που χρησιμοποιουν βασεις δεδομενων κατα την εγκατασταση με ποιο τροπο "δημιουργουν" την βαση που θα χρησιμοποιησουν;

Δημοσ.

Ο sql server 2005 δινει την δυνατοτητα να δημιουργήσουμε scriptakia για την δημιουργια μιας βάσης , το backup κ.τ.λ.....

 

Στο laptop οταν εκτελώ το scriptaki createDatabaseScript.sql αποθηκευει επιτυχως την db μου στο default folder C:\Program Files\Microsoft SQL Server\MSSQL.3\MSSQL\myDatabase.mdf

 

ομως οταν προσπαθησω να κανω το ιδιο σε αλλο Pc οπου εχει διαφορετικο Default path

ΔΕΝ εκτελειται και βγαζει errors που ειναι λογικο...( υποψιαζομαι τουλαχιστον οτι αυτο φταιει )

 

Με ποιο τροπο θα μπορω το scriptaki Που φτιαχνω στο δικο μου pc να λειτουργει σε διαφορετικα pcs ή τουχαλιστον αν εχετε να μου προτεινετε καποιο τροπο ετσι ωστε ενα προγραμματακι να μπορει να δημιουργει την βαση σε διαφορετικα pcs εκτος απο αυτον τον τροπο....

 

Γενικα τα softwares που χρησιμοποιουν βασεις δεδομενων κατα την εγκατασταση με ποιο τροπο "δημιουργουν" την βαση που θα χρησιμοποιησουν;

 

Αναφέρεσαι σε path Microsoft SQL Server\ οπότε υποθέτω οτι παίζεις sql server ...

 

Αν κατάλαβα καλά βάσει των όσων λες, αυτό που θες να κάνεις λέγεται Clustering. Δηλαδή ο κατακερματισμός της βάσης σε διάφορα συστήματα.

 

ΕΔΩ Θα βρείς ένα τρόπο να φτιάξεις cluster.

Δημοσ.

Τι εννοεις με το "κατακερματισμος" δεν μπορώ να καταλαβω...Απλα θελω κατα την μεταφορα του προγραμματος μου something.exe και την εγκατασταση του σε αλλο pc να δημιουργει αυτοματα και την sql database Που θα χρησιμοποιησει οταν εκκινήσει την πρωτη φορα.Η βαση μου ειναι φτιαγμενη με sql server 2005 και μεσω των scripts προσπαθω να βρω καποια λύση.

Δημοσ.

Φυσικά...

ομως τα paths διαφέρουν...Μου φαίνετε τοσο γελοιο απο πλευράς του sql server 2005 να εχει αλλα paths στο ενα pc και αλλα στο αλλο...Μιλάμε για καθαρή εγκατασταση του sqrver χωρις να εχω πειράξει το παραμικρό :)

Δημοσ. (επεξεργασμένο)

>
CREATE DATABASE [DatabaseNAME] ON  PRIMARY 
( NAME = N'DatabaseNAME', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DatabaseNAME.mdf' , SIZE = 83072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON 
( NAME = N'DatabaseNAME', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DatabaseNAME.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

Υπάρχει κάτι παρόμοιο με αυτό ^ στο script σου έτσι δεν είναι;

 

Απλά σβήσε τα path.

 

Άσε μονο το

>CREATE DATABASE [DatabaseNAME] 

 

___

Πάντως κάτι κου κάνω και με βολεύει αρκετά για να μεταφέρω βάσεις στον ms sql server είναι το εξής.

 

Κάνω τη βάση που θέλω να μεταφέρω, backup.

 

Παίρνω το αρχείο του backup και το πάω στον sql server που θέλω να μεταφέρω τη βάση και το κάνω restore.

 

Το κάνω restore αφού πρώτα έχω φτιάξει (manual) μια βάση με το ίδιο όνομα. Δε χρειάζεται τίποτα άλλο. Απλά ανοίγω μια νέα βάση (στην περίπτωση που δεν υπάρχει ήδη δηλαδή) και μόλις ανοιχτεί κάνω restore από το backup που έχω.

 

Και γράφονται όλα. Και data και δεδομένα.

 

Τώρα, αν δε θες όλα τα αλλα εκτος από τα δεδομένα ναι, η λύση είναι με το generate script.

Επεξ/σία από moukoublen
Δημοσ.

Πραγματι γνωρίζω τον τρόπο αυτο που προτείνεις αλλα:

 

Θα πρέπει ήδη να έχω δημιουργήσει μια κενή βάση.Ο παραπάνω κώδικας σου οταν τον τρεχω στο sql server σαν query ΔΕΝ εκτελείται και βγάζει μνμ σφάλματος.Το ίδιο συμβαίνει οταν σβήνω και τα paths.To σωστο scriptaki που δημιουργείτε απο τον sql server για την δημιουργία μιας νέας βάσης είναι το παρακάτω:

 

>
CREATE DATABASE [myDB] ON  PRIMARY 
( NAME = N'myDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.3\MSSQL\Backup\myDB.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB )
LOG ON 
( NAME = N'myDB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.3\MSSQL\Backup\myDB_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'myDB', @new_cmptlevel=90
GO
ALTER DATABASE [myDB] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [myDB] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [myDB] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [myDB] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [myDB] SET ARITHABORT OFF 
GO
ALTER DATABASE [myDB] SET AUTO_CLOSE OFF 
GO
ALTER DATABASE [myDB] SET AUTO_CREATE_STATISTICS ON 
GO
ALTER DATABASE [myDB] SET AUTO_SHRINK OFF 
GO
ALTER DATABASE [myDB] SET AUTO_UPDATE_STATISTICS ON 
GO
ALTER DATABASE [myDB] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO
ALTER DATABASE [myDB] SET CURSOR_DEFAULT  GLOBAL 
GO
ALTER DATABASE [myDB] SET CONCAT_NULL_YIELDS_NULL OFF 
GO
ALTER DATABASE [myDB] SET NUMERIC_ROUNDABORT OFF 
GO
ALTER DATABASE [myDB] SET QUOTED_IDENTIFIER OFF 
GO
ALTER DATABASE [myDB] SET RECURSIVE_TRIGGERS OFF 
GO
ALTER DATABASE [myDB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO
ALTER DATABASE [myDB] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO
ALTER DATABASE [myDB] SET PARAMETERIZATION SIMPLE 
GO
ALTER DATABASE [myDB] SET  READ_WRITE 
GO
ALTER DATABASE [myDB] SET RECOVERY SIMPLE 
GO
ALTER DATABASE [myDB] SET  MULTI_USER 
GO
ALTER DATABASE [myDB] SET PAGE_VERIFY CHECKSUM  
GO
USE [myDB]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [myDB] MODIFY FILEGROUP [PRIMARY] DEFAULT
GO

 

ομως δυστηχως και εδώ θα πρέπει να υπάρχει το path...

 

Επίσης αρκεί να κάνω restore το αρχείο μου myBackup.BAK ( εστω αν ήδη εχει δημιουργηθει μια κενη βάση ) ;;

Tα αρχεία .mdf και .ldf δεν χρειάζονται;;

Δημοσ.

Ο παραπάνω κώδικας σου οταν τον τρεχω στο sql server σαν query ΔΕΝ εκτελείται και βγάζει μνμ σφάλματος.

Δικό μου λάθος. Βγάλε και το ON PRIMARY

(το διόρθωσα και στο post μου)

 

 

Επίσης απ ότι βλέπω από το script σου, η παλιά η βάση έχει

 

το αρχείο βάσης στο path C:\Program Files\Microsoft SQL Server\MSSQL.3\MSSQL\Backup\

 

και το transaction log στο path C:\Program Files\Microsoft SQL Server\MSSQL.3\MSSQL\newKiriakosBackupFolder\

 

 

ίσως στο pc του αλλου sql server να μην υπάρχουν αυτά τα directories και αυτό να δημιουργεί το πρόβλημα.

(που παρεμπιπτόντως δεν καταλαβαίνω γιατί δημιουργήθηκαν τα directories 'Backup' και 'newKiriakosBackupFolder'. Εννοώ δηλαδή γιατί κατά την δημιουργία της βάσης επέλεξες custom directories και μάλιστα με αυτές τις ονομασίες)

 

το αρχείο .mdf είναι το αρχείο τις βάσης και αυτό γίνεται restore όταν κανεις restore.

 

Το αρχείο .ldf είναι το transaction log και το κανεις backup ξεχωριστά (αν χρειάζεσαι πράγματι να το κανεις).

 

Τα ίδια τα αρχεία αυτά δε τα πειράζεις και δε τα μετακινείς ποτε μα ποτέ.

Δημοσ.

:) λάθος δικό μου το path...Το είχα αλλάξει χειροκίνητα κάνοντας διπλο κλικ και properties πανω στον server.Το εφτιαξα τελικά και πρέπει απο default βρίσκονται στο ίδιο path δηλαδη στο

>C:\Program Files\Microsoft SQL Server\MSSQL.3\MSSQL\Backup\sd.mdf

 

Πράγματι ΔΕΝ υπαρχει αυτο το path στα αλλα pcs αλλα για παραδειγμα υπαρχει το:

 

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\sd.mdf

 

Τι μπορω να κάνω;Είναι σοβαρο το πρόβλημα και δεν μπορώ να καταλάβω γιατι το κάνει αυτο o sql server...

 

Επίσης σχετικά με το .mdf που ανέφερες οταν επιλέγω μια Db δεξι κλίκ -> tasks -> backup αποθηκεύει την βάση μου με .BAK κατάληξη και οχι .mdf...Αρα το .BAK θα κάνω restore ετσι δεν είναι;

Δημοσ.

Δες τρέχει;; Πολύ περίεργο μου ακούγεται.

 

Δοκίμασε αλλη μια φορά.

Αυτή τη φορά σου αντιγράφω όλο τον κώδικα σου με τις αλλαγές που πρέπει.

Δοκίμασε τον όπως είναι.

 

 

>
CREATE DATABASE [myDB]
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'myDB', @new_cmptlevel=90
GO
ALTER DATABASE [myDB] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [myDB] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [myDB] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [myDB] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [myDB] SET ARITHABORT OFF 
GO
ALTER DATABASE [myDB] SET AUTO_CLOSE OFF 
GO
ALTER DATABASE [myDB] SET AUTO_CREATE_STATISTICS ON 
GO
ALTER DATABASE [myDB] SET AUTO_SHRINK OFF 
GO
ALTER DATABASE [myDB] SET AUTO_UPDATE_STATISTICS ON 
GO
ALTER DATABASE [myDB] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO
ALTER DATABASE [myDB] SET CURSOR_DEFAULT  GLOBAL 
GO
ALTER DATABASE [myDB] SET CONCAT_NULL_YIELDS_NULL OFF 
GO
ALTER DATABASE [myDB] SET NUMERIC_ROUNDABORT OFF 
GO
ALTER DATABASE [myDB] SET QUOTED_IDENTIFIER OFF 
GO
ALTER DATABASE [myDB] SET RECURSIVE_TRIGGERS OFF 
GO
ALTER DATABASE [myDB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO
ALTER DATABASE [myDB] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO
ALTER DATABASE [myDB] SET PARAMETERIZATION SIMPLE 
GO
ALTER DATABASE [myDB] SET  READ_WRITE 
GO
ALTER DATABASE [myDB] SET RECOVERY SIMPLE 
GO
ALTER DATABASE [myDB] SET  MULTI_USER 
GO
ALTER DATABASE [myDB] SET PAGE_VERIFY CHECKSUM  
GO
USE [myDB]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [myDB] MODIFY FILEGROUP [PRIMARY] DEFAULT
GO

 

 

Αν δε τρέξει αντέγραψε το λάθος που σου βγάζει.

 

γενικότερα τα path στα οποια θα δημιουργηθούν τα αρχεία να τα καθορίζεις εσύ μονο αν έχεις απόλυτα συγκεκριμένο λόγο και ξέρεις γιατί το κανεις.

 

Διαφορετικά άσε τον sql server να χρησιμοποιήσει τα default του.

 

Οσο για το backup, ναι το αρχείο .bak κάνεις restore.

Δημοσ.

Αν και οι δύο βάσεις είναι SQL Server 2005, γιατί, δεν κάνεις Detach τη βάση σου, κάνε copy το mdf & ldf, στο δεύτερο σύστημα, και κάνε πάλι Attach τη βάση. Εξορισμού τα MDF & LDF είναι στο ίδιο directory. Αν δεν έχεις πειράζει το configuration του δεύτερου server, θα πρέπει να σου παίξει κανονικά.

 

Ο κανονικός και ασφαλής τρόπος είναι αυτός που σου περιγράφει βέβαια ο moukoublen, (backup τη βάση σε *.bak αρχείο και restore σε νέα, με ενεργοποιημένο το property, "override existing database"). Αλλά σε extreme καταστάσεις αφού δεν μπορείς να παίξεις με backup/restore, δες το detach/attach ...

Δημοσ.

Ολα οκ...Τρεχει κανονικα.Δικο μου το λάθος..

Τωρα φαίνετε πως βρήκα καποια λύση περνώντας μεταβλητές μέσα στο myScript.sql απο εδώ

 

Η σκέψη μου είναι:

 

1.Στο δικό μου Pc επιλέγω την βάση μου και δεξί κλίκ

tasks -> generate script -> επιλέγω το "Scripts all object in the database" -> next -> "Βρίσκω το Script Database Create Και το κάνω true Και γενικά κάνω true οτι αλλο θέλω να συμπεριληφθεί στο mySqlScript.sql

και next -> επιλέγω το "Script to New Query Window" και next και finish!

 

2.Αφου λοιπόν δημιουργήσαμε το script για την δημιουργία της βάσης μας ΚΑΙ των πινάκων ( δύο σε ενα :) )

εμφανίζεται αμέσως μπροστά μας ολοκληρος ο κώδικας.Οι αλλαγές που πρέπει να γίνουν στο κώδικα αφορούν τα

paths και ΜΟΝΟΝ αυτά ( διοτι το .exe αρχείο θα ψάξει να βρεί απο το connection string το όνομα της βάσης που του έχουμε δώσει εξαρχής και ετσι δεν πρέπει να αλλάξει ουτε στο script!!! ) αρα λοιπόν θα πρέπει να αλλάξω

τα paths οπου αποθηκεύονται το .mdf και το _log.ldf καθώς διαφέρουν απο pc σε pc.

Αν για παράδειγμα στο δικό μου pc αποθηκεύονται στο:

 

c:\Program Files\Microsoft SQL Server\MSSQL.3\MSSQL\DATA\*****.mdf

και

c:\Program Files\Microsoft SQL Server\MSSQL.3\MSSQL\DATA\*****_log.ldf

 

μπορεί στο αλλο Pc να αποθηκεύονται στο:

 

c:\Program Files\Microsoft SQL Server\MSSQL\MSSQL\DATA\*****.mdf

και

c:\Program Files\Microsoft SQL Server\MSSQL\MSSQL\DATA\*****_log.ldf

 

Σύμφωνα με αυτό βλέπω πως μπορούμε να περάσουμε μεταβλητές σε .sql αρχεία τα οποία εκτελουνται απο batch files.

 

Αρα για να αλλάξουμε το path για τα .mdf και .ldf files αρκεί στο batch file να δώσω:

 

sqlcmd -v varMDF="c:\Program Files\Microsoft SQL Server\MSSQL\MSSQL\DATA\*****.mdf" varLDF="c:\Program Files\Microsoft SQL Server\MSSQL\MSSQL\DATA\*****.mdf" -i C:\createDBscript.sql

 

οπότε θα αλλάξω και τα αντίστοιχα στον κώδικα καθώς εχω δημιουργήσει τις μεταβλητες που θα περαστουν ως:

 

USE [master]

GO

IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'myDB')

BEGIN

CREATE DATABASE [myDB] ON PRIMARY

( NAME = N'myDB', FILENAME = N'$(varMDF)' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )

LOG ON

( NAME = N'myDB_log', FILENAME = N'$(varLDF)' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

COLLATE Greek_CI_AS

END

 

GO

EXEC dbo.sp_dbcmptlevel @dbname=N'myDB', @new_cmptlevel=90

GO

.

.

.

.

.

 

3.Αφου λοιπόν ολοκληρωθεί και αυτό μένει να αποθηκεύσουμε το script μας στο path που έχουμε δώσει στο batch αρχείο μας δηλαδή στο C:\createDBscript.sql επιλέγοντας το save και δίνοντας το όνομα createDBscript.sql.

 

4.Aφου γίνουν ολα αυτα στο δικο μας Pc μεταφερουμε τα αρχεία στο C:\ του αλλου pc-ioυ :) και τρέχουμε το myBAT.bat file...

Αν λοιπον κατα την εκτέλεση οι μεταβλητές "περασαν" σωστα απο το .bat αρχείο στο createDBscript.sql ( δηλαδή εχει επιλεχθεί το κατάλληλο path )

τότε λογικά θα πρέπει να δημιουργηθεί η βάση και να φαίνετε στο sql server κάνοντας ενα refresh.

 

( τωρα σε περίπτωση που θέλουμε να περναμε εμεις τα paths χειροκίνητα που είναι και ο πίο σωστος τρόπος τοτε σε ενα EditBox1 θα δώσω το Path για τα

.mdf files και σε ενα EditBox2 θα δώσω το Path για τα .ldf files.Τα paths αυτα με την χρήση ενος Memo1 component θα "περνούν" ( με μία fputs στο .bat αρχείο ) και με μία system(C:\myBAT.bat); εκτελούμε το batch file )

 

Αν ΔΕΝ τρεξει τοτε σωστα τοτε αρχίζουμε τα καντίλια πίνουμε καμια γουλια καφε ανάβουμε ενα τσιγάρο και βαζουμε ενα τραγουδακι για διάλειμα 5-10 λεπτών!!!! :)

 

( νομίζω πως σωστα το σκέφτηκα τι λες;;; )

 

Τελικά σωστά το σκέφτηκα...Το δοκίμασα στο δικό μου Pc και τρέχει κανονικα!!!!ΟΟΟΟΛΛΛΛΕΕΕΕΕ!!!!

Δημοσ. (επεξεργασμένο)

Για SQL Server 2005 δεν μπορώ να πω κάτι, αλλά (για την ιστορία πάντα -αφού βρήκες λύση) όσον αφορά την εγκατάσταση ACCESS MDB, προσωπικά προτιμώ την εγκατάσταση τους (deployment) από τα resource ενσωματωμένα στο εκτελέσιμο του προγράμματος.

Επεξ/σία από Directx

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...