//-----------------------------------------------------------------------------
        // dbRestore
        //-----------------------------------------------------------------------------
        /// <summary>
        /// Restores a previously backed up database. The <paramref name="sBackupPath"/> parameter
        /// and the <paramref name="restoreClient"/> parameter are mutually exclusive.  If the
        /// <paramref name="restoreClient"/> parameter is null, then the backup data will be read from
        /// <paramref name="sBackupPath"/>.  If <paramref name="restoreClient"/> is non-null,
        ///  <paramref name="sBackupPath"/> is ignored.
        /// </summary>
        /// <param name="sDbPath">
        /// The name of the control file of the database to restore.
        /// </param>
        /// <param name="sDataDir">
        /// The data file directory.  For more information see <see cref="dbCreate"/>.
        /// </param>
        /// <param name="sRflDir">
        /// The roll-forward log file directory.  For more information see <see cref="dbCreate"/>.
        /// </param>
        /// <param name="sBackupPath">
        /// The path to the backup files.  This may be null.  If
        /// non-null, it specifies the directory where the backup files which are
        /// to be restored are found.  If null, the <paramref name="restoreClient"/> parameter must be
        /// non-null.
        /// </param>
        /// <param name="sPassword">
        /// Password for the backup.  If non-null, the database key in
        /// the backup was wrapped in a password instead of the local NICI storage
        /// key.  This allows the database to be restored to a different machine if
        /// desired.  If null, the database can only be restored to the same machine
        /// where it originally existed.
        /// </param>
        /// <param name="restoreClient">
        /// An object implementing the <see cref="RestoreClient"/> interface.  This may be null.  If
        /// non-null, it is an object that knows how to get the backup data.
        /// </param>
        /// <param name="restoreStatus">
        /// An object implementing <see cref="RestoreStatus"/> interface.  This may be null.  If
        /// non-null, it is a callback object whose methods will be called to report
        /// restore progress.
        /// </param>
        public void dbRestore(
			string			sDbPath,
			string			sDataDir,
			string			sRflDir,
			string			sBackupPath,
			string			sPassword,
			RestoreClient	restoreClient,
			RestoreStatus	restoreStatus)
        {
            RCODE							rc;
            RestoreClientDelegate	restoreClientDelegate = null;
            RestoreClientCallback	fnRestoreClient = null;
            RestoreStatusDelegate	restoreStatusDelegate = null;
            RestoreStatusCallback	fnRestoreStatus = null;

            if (restoreClient != null)
            {
                restoreClientDelegate = new RestoreClientDelegate( restoreClient);
                fnRestoreClient = new RestoreClientCallback( restoreClientDelegate.funcRestoreClient);
            }
            if (restoreStatus != null)
            {
                restoreStatusDelegate = new RestoreStatusDelegate( restoreStatus);
                fnRestoreStatus = new RestoreStatusCallback( restoreStatusDelegate.funcRestoreStatus);
            }

            if ((rc = xflaim_DbSystem_dbRestore( m_pDbSystem, sDbPath, sDataDir, sRflDir, sBackupPath,
                sPassword, fnRestoreClient, fnRestoreStatus)) != 0)
            {
                throw new XFlaimException( rc);
            }
        }
        private static extern RCODE xflaim_DbSystem_dbRestore(
			IntPtr						pDbSystem,
			[MarshalAs(UnmanagedType.LPStr), In]
			string						pszDbFileName,
			[MarshalAs(UnmanagedType.LPStr), In]
			string 						pszDataDir,
			[MarshalAs(UnmanagedType.LPStr), In]
			string 						pszRflDir,
			[MarshalAs(UnmanagedType.LPStr), In]
			string 						pszBackupPath,
			[MarshalAs(UnmanagedType.LPStr), In]
			string 						pszPassword,
			RestoreClientCallback	fnRestoreClient,
			RestoreStatusCallback	fnRestoreStatus);