2017-08-28 3 views
7

Je tente de restaurer un fichier de base de données de sauvegarde à l'aide de WiX, et la base de données est créée mais aucune des tables et des données n'est restaurée. il semble que ce soit seulement en créant la base de données et en ne faisant rien d'autre. Je ne sais pas si cela est lié à WiX ou a quelque chose à voir avec l'utilisation de MSSQL. voici le XML WiX:WiX: DB Restore ne restaure pas les tables et les enregistrements

 <Component Id="sql_backup_restore" Guid="8C95F258-7AB7-4A3A-A0CD-438FC61D45CC"> 
     <CreateFolder Directory="javaaaanew_dir"/> 
     <sql:SqlDatabase Id="aaanew3_db" Server="[MSSQLSERVER]" Database="master" ConfirmOverwrite="yes" ContinueOnError="yes" DropOnReinstall="no" DropOnInstall="no" DropOnUninstall="no" CreateOnInstall="yes" CreateOnReinstall="no" CreateOnUninstall="no"> 
      <!-- restore blankaaa database --> 
      <sql:SqlString Id="attach_db" ExecuteOnInstall ="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="yes" Sequence="1" SQL="RESTORE DATABASE blankaaa FROM DISK = '[blankaaaBAK]' WITH RECOVERY;" /> 
      <!-- rename blankaaa to aaanew3 --> 
      <sql:SqlString Id="alter_db_name" ExecuteOnInstall ="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="yes" Sequence="2" SQL="USE master;GO;ALTER DATABASE blankaaa Modify Name = 'aaanew3' GO;" /> <!-- should fail here if preexisting database? --> 
      <!-- change aaanew3 dbowner to 'sa' --> 
      <sql:SqlString Id="alter_db_owner" ExecuteOnInstall ="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="yes" Sequence="3" SQL="ALTER AUTHORIZATION ON DATABASE::aaanew3 TO sa;" /> 
      <!-- add user 'sa' to database security? --> 
      <sql:SqlString Id="alter_db_sa" ExecuteOnInstall ="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="yes" Sequence="4" SQL="USE [aaanew3];GO;CREATE USER [sa] FOR LOGIN [sa];GO;" /> 
      <!-- add user mapping for 'sa' on aaanew3 with schema 'dbo' --> 
      <sql:SqlString Id="alter_db_schema" ExecuteOnInstall ="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="yes" Sequence="5" SQL="USE [aaanew3];GO;ALTER USER [sa] WITH DEFAULT_SCHEMA=[dbo];GO;" /> 
     </sql:SqlDatabase> 
     </Component> 

j'ai aussi essayé « AVEC RÉCUPÉRATION » et en utilisant la séquence d'échappement autour des crochets:

<sql:SqlString Id="attach_db" ExecuteOnInstall ="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="yes" Sequence="1" SQL="RESTORE DATABASE blankaaa FROM DISK = '[\[]blankaaaBAK[\]]' WITH RECOVERY;" /> 

la bonne façon de faire semble misérablement pas clair dans la documentation.

Répondre

6

plutôt que d'essayer de se référer au nom de Wix du fichier de base de données, je l'ai utilisé les éléments suivants:

SQL="RESTORE DATABASE blankaaa FROM DISK = '[INSTALLFOLDER]javaaaanew\blankaaa.bak' WITH RECOVERY"