Cómo: Cambiar la ubicación de la base de datos temporal en SQL Server CE

Exención de responsabilidades de contenido KB retirado

Este artículo se refiere a productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Resumen

Microsoft SQL Server 2000 Windows CE Edition versión 1.1 (SQL Server CE) crea una base de datos temporal que utiliza para almacenar datos temporales como:

  • Datos provisionales creados durante una transacción antes de que finalice la transacción, incluidos los datos de replicación.


    - o -

  • Conjuntos de resultados temporales creados durante una consulta.

Varios usuarios de SQL Server CE tienen grandes bases de datos que crean grandes volúmenes de datos temporales durante la sincronización. Grandes bases de datos que la aplicación de SQL Server CE a causa de espacio de almacenamiento insuficiente en el dispositivo de almacenamiento predeterminado para el archivo de base de datos principal y el archivo de base de datos temporal.

La base de datos temporal crece cada vez que se produce una operación de ordenación. No está limitada a una operación de ordenación, pero incluye:

  • Creación de índices
  • Ordenar por
  • Agrupar por
SQL Server CE implícitamente contiene instrucciones de lenguaje de manipulación de datos (DML) en una transacción; por lo tanto, las instrucciones DML grandes (actualizaciones o eliminaciones) también producirá un error. Uso de una transacción explícita también hace una base de datos crezca.

Puede eliminar una base de datos temporal cada vez que el sistema operativo permite una eliminación. Si un archivo está abierto en SQL Server CE y SQL Server CE está utilizando el archivo, el sistema operativo no permite una eliminación.

De forma predeterminada, el sistema operativo crea archivos de base de datos temporal en la carpeta Temp en el dispositivo Windows CE. Después de quitar correctamente el motor de SQL Server CE, SQL Server CE elimina automáticamente el archivo temporal. Sin embargo, una finalización anormal de una aplicación SQL Server CE puede dejar archivos en la carpeta Temp . Si los archivos permanecen en la carpeta Temp , debe realizar una limpieza periódica de los archivos temporales.

Incluso si mueve el archivo de base de datos (.sdf) de usuario a una tarjeta flash (para almacenar grandes bases de datos), se crean los archivos de base de datos temporal en la carpeta Temp . Esta creación de archivos temporales que ocasiona problemas a los clientes que almacenan grandes bases de datos y realizan consultas intensivas con las operaciones de ordenación.

Cuando se inicia el motor de Server CE, crea una base de datos temporal. La primera operación de base de datos que hace que el motor de SQL Server CE iniciar debe incluir la ubicación de la base de datos temporal.

Este artículo describe cómo puede cambiar la ubicación temporal de la base de datos de SQL Server CE.

Antes de cambiar la ubicación de tempdb en el código, debe aplicar la revisión que se menciona en el siguiente artículo de Microsoft Knowledge Base:

CORREGIR 305349 : propiedad de SSCE: Temp File Directory le permite cambiar la ubicación temporal de la base de datos de SQL Server CE

Cómo especificar una ubicación de Tempdb con objetos de datos ActiveX de Microsoft Windows CE (ADOCE)

Las cadenas de conexión que contienen una lista de valores de propiedad separados por punto y coma de controlan las operaciones de ADOCE. Puede especificar una ubicación temporal de la base de datos agregando la subcadena siguiente al final de la cadena de conexión:

";SSCE:Temp File Directory = temp_database_dir" 
La ubicación de la ruta de acceso de la base de datos temporal dentro de la cadena de conexión no es importante, siempre y cuando se separe correctamente cada valor de la propiedad con punto y coma.

Para ADOCE, debe incluir la ubicación de la base de datos temporal para el método Connection.Open .

También puede especificar la ubicación de la base de datos temporal en el origen de conectar cadena para el método Engine.CompactDatabase .

Cómo especificar una ubicación de Tempdb para datos remotos acceso y replicación

Acceso a datos remoto (RDA) y las operaciones de replicación son controladas por las cadenas de conexión que contienen una lista de valores de propiedad separados por punto y coma. Puede especificar la ubicación de la base de datos temporal agregando la subcadena siguiente al final de la cadena de conexión:

";SSCE:Temp File Directory = temp_database_dir" 
La ubicación de la ruta de acceso de la base de datos temporal dentro de la cadena de conexión no es importante, siempre y cuando cada valor de propiedad está correctamente separado por punto y coma.

Para RDA, debe incluir la ubicación de la base de datos temporal para todos los métodos que utilicen una propiedad OLEDBConnectionString . Esto incluye:

  • El método RDA_Object.Pull .
  • El método RDA_Object.Push .
  • El método RDA_Object.SubmitSQL .
El siguiente fragmento de código parcial muestra cómo utilizar la propiedad OLEDBConnectionString en RDA:

' Declare the SQL Server CE ActiveX Control RDA Object Control.Dim ceRDA As SSCE.RemoteDataAccess

' Create the RDA Object
Set ceRDA = CreateObject("SSCE.RemoteDataAccess.1.0")

' Set RDA properties
ceRDA .InternetURL = "http://www.northwindtraders.com/sqlce/sscesa10.dll"
ceRDA .InternetLogin = "MyInternetLogin"
ceRDA .InternetPassword = "MyInternetPassword"
ceRDA .LocalConnectionString = "Data Source=\NorthwindRDA.sdf;SSCE:Temp File Directory =\"

' Push the tracked SQL Server CE table changes back to the SQL Server table
ceRDA .Push "Customers", "Provider=sqloledb;Data Source=SampleServer;Initial Catalog=Northwind;user id=SampleUser;password=SamplePassword"
Para la replicación, debe incluir la ubicación de la base de datos temporal para todos los métodos que utilizan la propiedad SubscriberConnectionString . Esto incluye:

  • El método REPL_Object.Initialize .
  • El método REPL_Object.AddSubscription .
  • El método REPL_Object.Run .
  • El método REPL_Object.ReinitializeSubscription .
  • El método REPL_Object.DropSubscription .
El siguiente fragmento de código parcial muestra cómo utilizar la propiedad SubscriberConnectionString en la replicación:

' Declare the Replication Object.Dim ceRepl As SSCE.Replication

' Create the Replication Object
Set ceRepl = CreateObject("SSCE.Replication.1.0")

' Set Internet properties
ceRepl.InternetURL = "http://www.northwindtraders.com/sqlce/sscesa10.dll"
ceRepl.InternetLogin = "MyInternetLogin"
ceRepl.InternetPassword = "MyInternetPassword"

' Set Publisher properties
ceRepl.Publisher = "SamplePublisher"
ceRepl.PublisherDatabase = "Nwind_SQLCEReplDemo"
ceRepl.Publication = "SQLCEReplDemo"
ceRepl.PublisherSecurityMode = DB_AUTHENTICATION
ceRepl.PublisherLogin = "MySqlPublisherLogin"
ceRepl.PublisherPassword = "MySqlPublisherPassword"

' Set Subscriber properties
ceRepl.SubscriberConnectionString = "data source=\NorthwindRepl.sdf;SSCE:Temp File Directory =\"
ceRepl.Subscriber = "SQLCE Sub #1"

' Create the new anonymous subscription
ceRepl.AddSubscription CREATE_DATABASE

Cómo especificar una ubicación de Tempdb para operaciones de OLEDB

Operaciones de OLEDB que acepte propiedades en preparación para cargar el motor de SQL Server CE son:

  • IDBDataSourceAdmin::CreateDataSource
  • IDBProperties::SetProperties
Debe pasar la ubicación de la base de datos temporal para IDBDataSourceAdmin::CreateDataSource o IDBProperties:: SetProperties como un elemento de las propiedades de conexión, de la misma manera que se pasa la ubicación de la base de datos normal.

Es el nombre de propiedad: DBPROP_SSCE_TEMPFILE_DIRECTORY

Es la descripción de la propiedad: "SSCE: Temp File Directory"

La propiedad OLEDB establecida para el directorio tempfile es: DBPROP_SSCE_DBINIT

Es el valor de la propiedad: una cadena que puede contener cualquier especificación de ruta de acceso válida.

Validación y control de errores

La aplicación cliente comprueba la ubicación de la base de datos temporal cuando la aplicación pasa la ubicación en el sistema operativo. SQL Server CE no intenta comprobar previamente la cadena. Si proporciona una ruta de acceso UNC, el éxito de la ruta de acceso UNC depende del sistema operativo. Si el sistema operativo puede controlar rutas de acceso UNC y el directorio de destino está disponible, SQL Server CE es correcta en la creación de los archivos temporales en la ubicación especificada.

Si el nombre del directorio no es válido o si el nombre de archivo no es válido o el directorio no se puede abrir para escritura, se produce un error en SQL Server CE con este mensaje de error:

SSCE_M_INVALIDTEMPPATH 25090 "no es válida para este dispositivo de la ubicación de la carpeta de archivo temporal que ha especificado"
Si la ubicación de la base de datos temporal no es válida, SQL Server CE no intenta escribir la base de datos temporal en la ubicación predeterminada. Los clientes de SQL Server CE que desea que la operación de conmutación por error automática debe atrapar el nuevo valor devuelven en sus propios y vuelva a intentar la operación de SQL Server CE sin la opción de base de datos temporal en su cadena de conexión.

Limitaciones de especificar una ubicación de Tempdb

Hay una base de datos temporal por instancia del motor de SQL Server CE. Por lo tanto, una única copia de la base de datos temporal es común para todas las conexiones a la misma instancia del motor de SQL Server CE.

Puede especificar la ubicación de la base de datos temporal sólo una vez cuando se inicia SQL Server CE. Después de una instancia se está ejecutando y ya tiene una tempdb, SQL Server CE pasa por alto cualquier intento para elegir otra ubicación de la base de datos temporal.

Debe utilizar la misma ubicación de la base de datos temporal para cada operación en la aplicación que puede activar el motor de base de datos para cargar, incluso operaciones donde es seguro que el motor ya está cargado el sistema de escritura de la aplicación. Uso de la misma ubicación de la base de datos temporal le protege de resultados inesperados de reestructuración subsiguiente de la aplicación y de los cambios en el funcionamiento interno de SQL Server CE. No debe crear aplicaciones que dependen de los efectos secundarios de la forma en que se cargan bases de datos temporales. Microsoft reserva el derecho a cambiar incidental operación de este tipo en el futuro del motor y para las instancias cuando puede haber más de una instancia del motor de versiones de SQL Server CE, tanto para uso individual y no es responsable de mantener la compatibilidad con el comportamiento actual.

Propiedades

Id. de artículo: 317032 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios