Mostrando entradas con la etiqueta Bases de datos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Bases de datos. Mostrar todas las entradas

domingo, 10 de abril de 2016

[Corregido] Error al crear Ordenes de compra, Facturas, Presupuestos y Ordenes de venta luego de migración en VTiger

Luego de una migración en vTiger, uno espera no tener ningun problema. Aún así, nos piden que hagamos backup para estar preparados para nuestros inmerecidos y muy probables problemas de migración.

Listo. Backup de código y base de datos creados. Y comenzamos la migración de vTiger.

Una vez terminados, nos hemos topado con algunos mensajes de advertencia de pequeñas ejecuciones en la base de datos que no se pudieron completar satisfactoriamente, y aunque reintentamos la migración siguen saliendo. Optamos por no prestarle atención y correr a ejecutar nuestra nueva versión de vTiger.

Aunque ya activamos el "log" y "trace" para validar el error, nos encontramos con que es imposible crear una nueva Orden de Compra, Factura, Presupuesto u Orden de compra, y siempre nos aparece el mensaje de:

{"success":false,"error":{"code":"result is not an object","message":"result is not an object"}}

...o en español:

{"success":false,"error":{"code":"El registro al que pretende acceder no existe","message":"El registro al que pretende acceder no existe"}}

No hay nada que temer... pueden consultar durante 2 días, tal como yo lo hice en todos los foros, y seguir cada paso y no encontrar ninguna solución en el universo indexado de Internet... o simplemente vayan directamente en la base de datos y hagan los siguientes dos cambios:

1) En la estructura de la tabla "vtiger_users"

En la estructura de la tabla, asegurarse que existe el campo "is_owner", y debe ser "varchar(5).

2) En los registros la tabla "vtiger_field"

Revisar los registros de los 4 módulos que nos están generando problemas, con las siguientes consultas:

Para Facturas:
SELECT * FROM vtiger_field WHERE tablename = 'vtiger_invoice' ORDER BY columnname

Para Ordenes de venta
SELECT * FROM vtiger_field WHERE tablename = 'vtiger_salesorder' ORDER BY columnname

Para Presupuestos:
SELECT * FROM vtiger_field WHERE tablename = 'vtiger_quotes' ORDER BY columnname

Para Ordens de compra:
SELECT * FROM vtiger_field WHERE tablename = 'vtiger_purchaseorder' ORDER BY columnname

La solución es, simplemente, eliminar el registro duplicado que aparece en cada consulta, y dejar uno de ellos (por ejemplo, he dejado el primero):


Y listo. vTiger vuelve a ser tan eficiente como antes.

Requiere ayuda en su nuevo CRM?  Podemos ayudarle en Solutecia sas.

jueves, 9 de abril de 2015

Cómo acceder a Bases de datos en SharePoint 2010

Si necesitamos acceder a la base de datos de SharePoint 2010, para trabajar sobre ella en nuestro Webpart o el desarrollo que estamos haciendo en nuestro proyecto de Visual Studio, podemos averiguar su ubicación de la siguiente manera:

1) Abrimos el Administrador Central de SharePoint 2010
 2) Ingresamos por el Administrador de Aplicaciones y en el grupo de Bases de Datos, ingresamos por  el "Administrador de Contenido de Bases de Datos"

3) Esto nos muestra el listado de las bases de datos que hay actualmente en SharePoint 2010. Seleccionamos la base de datos a la cual queremos conectarnos.


 4) En la siguiente página nos va a mostrar los datos que necesitamos para ingresar a la BD de SharePoint 2010. Tomamos nota de ellos, que en seguida los utilizaremos.


5) Vamos a Visual Studio 2010, o a nuestro administrador de base de datos de SQL Server. buscamos la opción que nos permita "Agregar Conexión"


6) Ingresamos los datos que nos suministró SharePoint, para pdernos conectar a su base de datos y pulsamos el botón de "Probar conexión".


7) Si todo ha marchado bien hasta aquí, entonces ya tendremos acceso a la base de datos de SharePoint y podremos observar su estructura, contenido y trabajar sobre ella directamente.



Sharepoint viene con el nombre de la base de datos ya predefinida, pero se puede modificar manualmente.

La siguiente es la lista de las bases de datos utilizadas en SharePoint 2010, en cada una de sus versiones.

Bases de Datos para SharePoint Foundation 2010


Configuración (SharePoint_Config) - Contiene los datos sobre las Bases de Datos utilizadas, información sobre Internet Information Services (IIS), Aplicaciones Web, Soluciones de confianza, paquetes de WebParts, plantillas de sitios y las configuraciones de Granjas y Aplicaciones Web (como las cuotas a utilizar y los tipos de archivos bloqueados por ejemplo)

Central Administration Content (SharePoint_AdminContent) - Conserva todo el contenido del sitio de la Administración Central incluyendo documentos o archivos, Listas, propiedades de WebParts, nombres de cuentas y sus derechos para la Colección de Sitios de la Administración Central. Si PowerPivot está instalado, esta Base de Datos contiene las hojas de cálculo de Excel y los datos de PowerPivot utilizados en su Management Dashboard

Bases de Datos de Contenido (WSS_Content) - Contienen todo la información de las Colecciones de Sitios, incluyendo documentos y archivos en Bibliotecas, elementos de Listas, propiedades de WebParts, logs de Auditoria, Soluciones de SandBox, cuentas de usuarios y sus derechos. Si WebApps está instalado, la Base de Datos contiene el cache de WebApps; únicamente un cache es creado por Aplicación Web, si hay diferentes Colecciones de Sitios guardadas en diferentes Bases de Datos de Contenido, todas utilizan el mismo cache

Base de Datos de Usage and Health Data Collection (WSS_UsageApplication) - Mantiene las estadísticas de uso y salud del sistema. Los datos son guardados temporalmente y pueden ser usados para reportes y diagnostico

Base de Datos de Business Data Connectivity (Bdc_Service_DB) - Guarda los Tipos de Contenido externos y sus objetos para la Conectividad de Datos de Negocios

Base de Datos de Application Registry (Application_Registry_server_DB) - Contiene información de compatibilidad para el sistema de Catalogo de Datos Profesionales de SharePoint 2007

Base de Datos de Subscription Settings (SubscriptionSettings) - Conserva las Características y configuraciones para clientes hosteados

Bases de Datos de SharePoint Server 2010 Standard Edition


Utiliza las Bases de Datos mencionadas anteriormente más:

Base de Datos de Secure Store (Secure_Store_Service_DB) - Guarda el mapeo de credenciales, nombres y claves de las cuentas

Base de Datos de State (StateService) - Mantiene información temporal sobre el estado de InfoPath Forms Services, la WebPart de Chart y los Servicios de Visio

Base de Datos de Web Analytics Staging (WebAnalyticsServiceApplication_StagingDB) - Contiene datos sin organizar de metadatos para el servicio de Análisis de SharePoint

Base de Datos de Web Analytics Reporting (WebAnalyticsServiceApplication_ReportingDB) - Contiene las tablas para reportes agregados, factos agregados por grupos y sitios y la información de diagnóstico para la aplicación de Web Analytics Service

Base de Datos de Search service application Administration (Search_Service_Application_DB) - Mantiene la Lista de Control de Acceso (ACL) y best bets para el rastreador de búsqueda

Base de Datos de Search service application Crawl (Search_Service_Application_CrawlStoreDB) - Contiene los datos del rastreador y su historia

Base de Datos de Search service application Property (Search_Service_Application_PropertyStoreDB) - Contiene la información asociada a los datos del rastreador incluyendo sus propiedades, historia y filas de rastreador

Base de Datos de User Profile service application Profile (User Profile Service Application_ProfileDB) - Mantiene los datos asociados a usuarios, red social, membrecías y listas de distribución

Base de Datos de User Profile service application Synchronization (User Profile Service Application_SyncDB) - Contiene la información de los usarios cuando la Base de Datos de Perfiles es sincronizada con el Directorio Activo

Base de Datos de User Profile service application Social Tagging (User Profile Service Application_SocialDB) - Contiene las etiquetas y notas creadas por usuarios conjuntamente con sus respectivos URLs

Base de Datos de Managed Metadata (Managed Metadata Service) - Contiene la información de los metadatas manejados y los Tipos de Contenido sindicados

Base de Datos de Word Automation Services (WordAutomationServices) - Guarda la información sobre conversiones de documentos pendientes y completados

SharePoint Server 2010 Enterprise Edition


Utiliza todas las Bases de Datos mencionadas anteriormente más:

Base de Datos de PerformancePoint service (PerformancePoint Service Application) - Guarda los objetos temporales, valores de filtros y comentarios de usuarios

FAST Search Server para SharePoint 2010


Utiliza todas las Bases de Datos anteriores más:

Base de Datos de Search Administration (FASTSearchAdminDataBase) - Guarda los datos relativa a la administración de FAST Search Server 2010 para SharePoint, incluyendo la configuración de grupos, palabras clave, sinónimos, documentos, promoción y democión, extractor de términos, inclusiones y exclusiones, exclusiones de control de ortografía, best bets, visual best bets y metadata del esquema de búsqueda.


martes, 24 de febrero de 2015

Cómo ejecutar una Instrucción SQL desde un archivo .BAT en ciclos

A veces necesitamos ejecutar un script en SQL en nuestra base de datos de SQL Server, pero sin hacer uso del Agente (a veces por motivos de seguridad), sin un Servicio de Windows (para disminuir consumo de procesamiento), sin construir una aplicación de consola y que además se autoejecute cada determinado tiempo, de manera automática.

Bueno... con semejante requerimiento solo nos queda hacer uso de un archivo .BAT (Batch).

Los archivos .BAT son un archivo de texto que solamente ejecuta comandos de manera primaria en el DOS (Disk Operating System) y en él se puede invocar la ejecución de otras aplicaciones.

Para el caso que necesitamos en este ejemplo, escribiremos la instrucción que necesitamos ejecutar en nuestra base de datos en un archivo .sql y lo guardamos en una ruta del disco duro fácil de acceder. En un editor de textos plano, como el notepad, guardando después el archivo con el nombre de nuestra elección sin olvidar la extensión .sql.

Nota: Es preferible que podamos acceder a la BD de SQLServer desde la misma máquina donde vamos a poner el archivo .sql y el archivo .bat

Ejemplo del archivo .sql:
Update seguridad_lic SET licencia_status = 1 where cliente_pago = 'OK';

Como se puede ver es una instrucción SQL que puede ser interpretada por SQL Server de manera fácil.  Este archivo lo guardamos con el nombre instruccion.sql (puedes ponerle el nombre que quieras pero con esa extensión) y ahora construimos el archivo ejecutar.bat

Ejemplo del archivo ejecutar.bat:
@echo off

OSQL -U (username) -P (password) -S (Direccion IP del servidor con el puerto, si no hay un valor por defecto) -i C:\instruccion.sql -o c:\instruccion.txt

Y ahora lo que nos hace falta es que se ejecute repetidamente. Para esto podemos hacer 3 tipos de alternativas:
  1. Ejecución infinita en un ciclo interminable (muy poco recomendable).
  2. Ejecutarlo un determinado número de veces (mejor, pero tiene una vida útil limitada)
  3. Incluirlo en el registro de Windows, para que se ejecute cada determinado tiempo o periódicamente (más recomendable)

1. Ejecución infinita en un ciclo interminable

Para esto simplemente usamos un puntero y lo invocamos internamente, de manera que hace un ciclo infinito.  Abrimos el archivo (NO con Doble Clic), Botón derecho y abrirlo con el bloc de notas (por si acaso):

@echo off
 

:repetiresto
 

OSQL -U (username) -P (password) -S (Direccion IP del servidor con el puerto, si no hay un valor por defecto) -i C:\instruccion.sql -o c:\instruccion.txt

Goto repetiresto

Guardamos de nuevo el archivo y listo.
Advertencia:  La única manera de detener este archivo es eliminando el proceso por el Adminitrador de Tareas.

2. Ejecutarlo un determinado número de veces

De nuevo, abrimos el archivo para editarlo y hacemos el siguiente ajuste:

@echo off

set Repetir=1
goto
repetiresto
:repetiresto
set /a Repetir=Repetir+ 1

OSQL -U (username) -P (password) -S (Direccion IP del servidor con el puerto, si no hay un valor por defecto) -i C:\instruccion.sql -o c:\instruccion.txt

if %Repetir% == 5 (goto fin) else (goto
repetiresto)
:fin


En este ejmplo lo pusimos a que se repitiera 5 veces.

3. Incluirlo en el registro de Windows

Al hacer esto, se iniciará cuando iniciemos el PC, por lo tanto, quedará dependerá de que la máquina esté activa.

No hace falta modificar el archivo ejecutar.bat que ya tenenos escrito desde el comienzo.  Solamente hay que crear uno nuevo para hacer el registro en Windows y debe ser así:
@echo off
AT 17:00 @echo off&&start c:/ejecutar.bat
REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v sysin2 /t REG_SZ /d "c:/ejecutar.bat"


Espero que les ayude en sus procesos de ejecución de base de datos periódicos.

Un saludo,
@ivan_londono

jueves, 25 de septiembre de 2014

Crear archivos descargables en CVS con PHP

CSV (valores separados por comas) es el formato más ampliamente soportado para la transferencia de datos tabulares entre aplicaciones. La capacidad de exportar datos en formato CSV es una característica útil para muchos programas, y se está convirtiendo cada vez más común en las aplicaciones web. Esta vez explicaré cómo usar PHP para crear archivos CSV, y cómo asegurarse de que el navegador del visitante ofrece para descargar el archivo en lugar de mostrarla.

1. El código


En el siguiente código se supone que los datos que se exportan provienen de una base de datos MySQL, pero puede ser fácilmente modificado para que funcione con otras fuentes de datos, y por lo tanto sirve como un modelo general:

// Encabezados que determinan la descarga del archivo y el nombre del archivo
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=datos_descargados.csv');

// Un punto para referir la descarga
$output = fopen('php://output', 'w');

// Los encabezados del archivo
fputcsv($output, array('Column 1', 'Column 2', 'Column 3'));

// Los datos
mysql_connect('localhost', 'username', 'password');
mysql_select_db('database');
$rows = mysql_query('SELECT field1,field2,field3 FROM table');

// loop en los registros, descargandolos
while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row);

La cadena 'datos_descargados.csv' en la línea 3 es el nombre que el navegador le sugerirá para el archivo descargado. El literal de matriz en la línea 9 contiene los títulos de las columnas; esta línea se debe omitir por completo si usted no desea incluir encabezados de columna. Las cadenas en líneas de 12 a 14 deben cambiar a los parámetros de conexión correspondientes y cadena de consulta de la base de datos. En una aplicación real de los parámetros de conexión de base de datos deben ser definidos como constantes en un archivo de configuración independiente.

2. ¿Cómo funciona?


El código tiene que decirle al navegador que se está produciendo un archivo CSV y que el archivo debe ser ofrecido para su descarga, en lugar de mostrarlo en el navegador. Línea 2 produce un encabezado HTTP decirle al navegador que el tipo MIME del contenido es text / csv, el tipo oficial MIME para los archivos CSV.

Línea 3 produce un encabezado 'Content-Disposition'. El encabezado Content-Disposition se define en el RFC 2183 y fue diseñado para ser utilizado en los correos electrónicos, pero también fue adoptado por los navegadores web. En navegadores web el valor 'apego' indica al navegador que ofrecerá el archivo para su descarga con el nombre sugerido - el archivo podría de otro modo se mostrará en la ventana del navegador como si fuera texto normal.

PHP 5.1 introdujo la función fputcsv, que da salida a una serie de datos a un puntero de archivo como valores separados por comas. Debido fputcsv sólo puede escribir en el archivo punteros, la línea 6 se abre la secuencia de salida como si fuera un archivo. Línea 9 entonces emite títulos de las columnas, mientras que la línea 17 bucles más de las filas de datos y les da salida.

jueves, 14 de agosto de 2014

No se puede insertar el valor NULL en la columna 'cualquiera', tabla 'bd.esquema.tabla'. La columna no admite valores NULL. Error de INSERT. Se terminó la instrucción.


Volvemos a las migraciones entre servidores... éste es a veces un problema que se nos presenta cuando ya hemos hecho casi de todo y creíamos que nuestra base de datos quedó bien respaldada y bien montada.

...pues no. No quedó bien respaldada y mucho menos bien montada. Y nos damos totazos contra la pared porque ya no hay marcha atrás y no tenemos acceso al servidor original. ¿Qué hacer?

Primero que todo alejemos al cliente un ratico a que se tome un café para que no nos respire en el cuello y nos remangamos la camisa... esto es lo que hay que hacer:

Entendiendo el problema


Sucede que al respaldar la base de datos de nuestro proyecto, no incluimos sus propiedades extendidas, y al montarla, se perdieron los índices, claves principales y autonuméricos.

Esto puede ser un grave problema si no tienes a la mano un manual de la base de datos (o una formidable memoria), para recordar cuáles campos hay que volver a colocar los índices, claves principales y autonuméricos.

Solucionando poco a poco


La buena noticia, es que hay solución.  La mala, es que es tediosa.  Hay que volver a asignarle los índices y autonuméricos a nuestras tablas de manera manual.

1) Valida que en el nuevo servidor si puedas hacer cambios en la base de datos. ¿Por qué? Es posible que te aparezca un mensaje al momento de guardar un índice que dice literalmente "No se permite guardar. Los cambios que ha realizado requieren que se quiten y vuelvan a crear las siguientes tablas. Quizá ha realizado cambios en una tabla que no se puede volver a crear o ha habilitado la opción Impedir guardar cambios que requieran volver a crear tablas".

El SQL Server Management Studio el viene con la opción "Impedir guardar cambios que requieran volver a crear tablas" habilitada de manera predeterminada, si olvida colocarle un campo, lo nombra mal o deja mal el tipo de dato esto evita que guarde las modificaciones.  Para cambiar esto, simplemente ingresa en el SQL Server Management Studio por Herramientas -> Opciones y en la ventana busca al lado izquierdo del árbol la opción de "Diseñadores" deshabilita esta opción. Así como se ve en la imagen de ejemplo:

2) Acceder a las columnas en las tablas para modificarlas.

Entrar en el diseño de cada una de las tablas para modificarles sus propiedades.  Esto lo haces simplemente con el botón derecho sobre cada tabla y pulsando la opción de "Diseño".


3) Asignar los índices principales en las columnas de las tablas.
Segun cada tipo de dato en tus tablas:

  • Uniqueidentifier. 1) Seleccionar la columna del Indice principal. 2) Pulsar el botón de "Establecer clave principal". 3) En la propiedad de "Valor o enlace predeterminado" ponerle el valor de "NEWID()". 4) Guardar. De esta manera, queda lista la columna con llave principal y auto asignación de un nuevo valor:
 
  • Int, Bigint. Aplica para los tipos de datos enteros y es muy similar al anterior. 1) Seleccionar la columna del Indice principal. 2) Pulsar el botón de "Establecer clave principal". 3) En la propiedad de "Especificación de Identidad" en el campo de (Identidad) ponerle el valor de "SI". 4) Guardar.

Como decía anteriormente, puede que no todo esté perdido, pero el no haber guardado bien un respaldo de base de datos, nos puede poner en un trabajo un poco más largo.

martes, 29 de julio de 2014

System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.

En una reciente migración de un servidor, nos topamos con este mensaje de error, cuando nuestra aplicación de ASP.NET intentaba conectar con el servidor de base de datos de Oracle.

El mensaje cuando lanzaba cualquier consulta era el mismo:

System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.


Existen dos posibilidades para este error.

Recordemos que estamos en una nueva máquina y que estamos tratando de acceder a la BD de Oracle desde nuestra aplicación de ASP.NET.

Las causas pueden ser dos muy diferentes:
  1. No se ha instalado el Microsoft OLE DB provider for Oracle.
  2. La carpeta de la instalación de Oracle no tiene permiso para el usuario de ASP.NET

Si se trata del primer caso, lo más seguro es que luego hay que atender también el segundo caso.

1. Instalar Microsoft OLE DB provider for Oracle.  


Los enlaces de descarga se pueden encontrar en:
http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html

Es necesario conocer muy bien la máquina y el sistema operativo que se tiene en el servidor para seleccionar el enlace adecuado.

 2. Dar permisos administrativos a la carpeta de Oracle


El procedimiento es sencillo:

  • Dar permisos sobre la carpeta de Oracle a los usuarios “Authenticated Users” y “ASP.net”
  • Loguearse a Windows con credenciales administrativas.
  • Ir a la carpeta raíz de Oracle que generalmente se encuentra en: C:\Oracle.
  • Ir a las propiedades de la carpeta y seleccionar la pestaña “Seguridad”.
  • Click on “Authenticated Users” item in the “Name” list.
  • Agregar los usuarios “Authenticated Users” y “ASP.net” y asignarles permisos de “Full Control”.
  • Dar clic en el botón “Avanzado”, se eligen los usuarios mencionados anteriormente y se seleccionar las opciones “Permitir que los permisos heredables del primario se propaguen a este objeto y a todos los objetos secundarios. Incluirlos junto con las entradas indicadas aquí de forma explícita” y “Reemplazar las entradas de permisos en todos los objetos secundarios con aquellas entradas incluidas aquí y que sean relativas a los objetos secundarios”.
  • Dar clic en OK y reiniciar el equipo para asegurarse de que los cambios surtan efecto.

NOTA IMPORTANTE


"Reiniciar la máquina."

Aquí no hay experiencia que valga... o se reinicia la máquina o todo lo mencionado en este artículo puede quedar en el papel con que vamos a limpiar los vídrios.

martes, 1 de octubre de 2013

Consultar datos en una tabla que no están en otra

Por lo general cuando tenemos relaciones entre dos tablas en cualquier consulta tradicional, queremos saber por ejemplo cuáles son los datos que faltan en alguna tabla.

Me explico.  Por ejemplo queremos sabes cuáles son los eventos que no están en el historial de actividades.

La consulta será entonces:

SELECT tbl_eventos.id  
from 
tbl_eventos left join tbl_historial_actividades
on tbl_eventos.id=tbl_historial_actividades.evento_id
where 
tbl_historial_actividades.evento_id is null

Esta sencilla y extremadamente útil consulta, nos puede salvar el día.

Funciona en cualquier tipo de base de datos transaccional: MySQL, SQL Server, Oracle, Postgress, y muchas otras más.

martes, 18 de diciembre de 2012

Migrar datos y estructuras de SQL Server a MySQL

Recientemente nos encontramos en una disyuntiva dentro de la empresa, en la que nos tocó tomar un giro en la arquitectura de unos de nuestros proyectos principales, que implicaba migrar nuestra plataforma de SQL Server 2005 a MySQL.

Y la primer pregunta que nos surgió fue: "Es posible migrar toda nuestra plataforma e información de SQL Server a MySQL?"... yo ya estaba preparado mentalmente para pasar varias noches con pantuflas peluditas, escuchar rock, y litros de café frente a mi PC haciendo la transición casi manual.

En medio de la lluvia de ideas y de búsquedas me topé con esta herramienta, que realmente me dejó perplejo por su facilidad y gran desarrollo en su interfáz de usuario.

http://www.mysql.com/downloads/workbench/

Es una aplicación desarrollada por los mismos magos de MySQL y pensada para todos aquellos que venimos de otras plataformas de administración de bases de datos.

martes, 19 de junio de 2012

Documentando la base de datos

Algunas veces nos encontramos con la necesidad de informar, suministrar, o divulgar la estructura de la base de datos a otras personas. Eso implica poder mostrar el diccionario de datos o la entidad relación de la misma. El otro asunto es que se quiera ver en un formato universal para otros, incluso si no tienen el motor de la base de datos.

Hace poco me encontré con este tema y debía documentar una base de datos para poder ver su entidad relación y diccionario de datos en un diseño de HTML que fuera posible ser visto desde un navegador web.

Durante muchas horas busqué herramientas para lograr esto, incluso estaba considerando hacer una propia, hasta que me encontré una aplicación que por fín cumplía con mis expectativas: DBDesc.

La mecánica es muy sencilla, el aplicativo se conecta a la base de datos y genera un informe en HTML, PDF, RTF o DOC con toda la información de la base de datos, uno puede seleccionar el tipo de plantilla de salida y el tipo de apariencia del informe.  Por si fuera poco, dentro de las configuraciones se puede determinar que tipo de información es la que se necesita en el documento exportado.

Los motores de bases de datos que soporta son:
  • SQL Server 2000, 2005, 2008, 2008 R2
  • Microsoft Desktop Engine 2000 (MSDE) and SQL Server 2005/2008 Express editions
  • MySQL 5.0
  • Oracle 9 and above
  • Microsoft Access 97 and above
  • Firebird
Algunos de los informes generados:
Y adicional, puede generar un mapa de relaciones entre las tablas de la base de datos:




 

sábado, 12 de mayo de 2012

Bases de datos: Usar Identidad o no?

A primera vista, parece que no hay nada especial para considerar antes de usar la propiedad de columna IDENTITY, el mecanismo de la numeración automática de SQL Server. Pero sobre todo en entornos de gran tamaño puede ser vital, primero hay que comprender algunas de las funciones de Identity y algunas de sus limitaciones. En algunos casos, es posible que prefiera utilizar su propio mecanismo de numeración automática. para ayudarnos a decidir sobre el mejor sistema, voy a proporcionar algunos datos sobre la identidad, discutir algunas de sus limitaciones, y mostrar dos alternativas.

Fundamentos de la IDENTIDAD

Aquí hay algunas cosas que usted debe saber sobre la propiedad IDENTITY:
  • Es posible utilizar IDENTIDAD no sólo con los números enteros, pero también con cualquier tipo de datos numéricos que tiene una escala de 0. Esta es una buena cosa, especialmente cuando se necesita para apoyar a los números más grandes que la cantidad de datos que puede contener. El valor entero (INT) tiene una capacidad de 2,147,483,647 registros, y el valor de gran entero (BIGINT) tiene una capacidad de 9,223,372,036,854,775,807 registros.
  • IDENTIDAD, combinado con una restricción PRIMARY KEY o UNIQUE, le permite proporcionar un identificador único de la fila de manera sencilla, sin la necesidad de supervisarlo. SQL Server hace el trabajo por sí solo.
  • A diferencia de la función de secuencia de Oracle, SQL Server no proporciona un mecanismo de secuenciación independiente. En cambio, la secuencia proporcionada por la propiedad IDENTITY se aplica a una sola tabla. Cuando usted necesita un mecanismo de secuenciación que genera números para su uso en las tablas, como diferentes, por ejemplo, con teclas que no deben superponerse a través de tablas, querrá elegir una alternativa a la identidad. Esto es una metodología muy dada en los usuarios de Oracle.
  • La propiedad IDENTITY y la columna a la que está asociado son inseparables, lo que significa que no se puede agregar o quitar de identidad de una columna durante la existencia de los datos. Se puede cambiar esta configuración ya con datos, pero el cambio puede ser muy lento, sobre todo con tablas grandes. Por ejemplo, para dar identidad a una columna existente, puede crear una tabla nueva, copiar los datos de la tabla original, eliminar la tabla original, y luego dar la nueva tabla el mismo nombre. También se puede utilizar un proceso similar para retirar de identidad de una columna existente. En ambos casos, estas actividades requieren que la tabla esté fuera de servicio, tiempo que puede ser muy largo para las tablas grandes o con muchos registros.
  • Cuando se utiliza una instrucción INSERT en una tabla que tiene una columna IDENTITY, el valor de identidad aumenta si el INSERT tiene éxito o fracasa, incluso si se produce un error en una clave principal o CHECK violación de restricción. Si una transacción se revierte, ya sea implícita o explícitamente, el valor de la identidad en esa columna no se revierte, por lo que podría terminar con las lagunas en la secuencia, incluso cuando usted no va a eliminar todas las filas. Esto puede ser un problema cuando se está creando secuencias que no pueden contener espacios, tales como los números de factura.
  • No se puede actualizar vistas particionadas que se basan en tablas que tienen una columna IDENTITY.
  • La sentencia TRUNCATE TABLE restablece la propiedad de IDENTIDAD en la tabla a manipular. Para conservar el contador de identidad, utilice DELETE en lugar de TRUNCATE TABLE, pero tenga en cuenta que DELETE es mucho más lento porque se registra por completo.
El asunto es que una tabla puede existir con y sin IDENTITY, y en ambos casos se puede almacenar registro, editarlos, borrar y actualizar. Pero realmente es el perfil del proyecto el que determina su uso o no.

En qué escenarios es recomendable o no el uso de IDENTITY en una columna.

Es recomendable usar IDENTITY cuando:
  • Nuestra cantidad de registros no dependa de la capacidad del tipo de campo. Es decir, si el proyecto no implica hacer uso de todos y cada uno de los números generados en la secuencia y podemos ser holgados en su contenido.
  • Se manejan proyectos modulares en constante cambio y crecimiento. Esto facilita el entorno de desarrollo y permite la confianza de tener políticas claras con respecto al manejo de la base de datos.
  • Pueden haber cargas transaccionales de consultas complejas.
  • El rendimiento del software se vea afectado.
  • Se requiera de mayor escalabilidad.
No es recomendable usar IDENTITY cuando:
  • El valor del IDENTITY es crítico: numeración de facturas, secuencias de inventarios, comprobantes de pago.
  • La carga transaccional es muy intensa y concurrente desde diferentes escenarios para las operaciones de INSERT y DELETE.
  • No hay control absoluto de la base de datos.

¿Cómo se configura en SQL Server?

Para modificarlo, ingresamos la definición de la tabla y seleccionamos el campo numérico que queremos cambiarle la propiedad:

Por instrucciones de SQL, hay que tener en cuenta que debe hacerlo al momento de crear la tabla:

CREATE TABLE nombredemitabla
    (
    IdPersona int NOT NULL IDENTITY (1, 1)
    )  ON [PRIMARY]
GO

Sin IDENTITY:

CREATE TABLE nombredemitabla
    (
    IdPersona int NOT NULL
    )  ON [PRIMARY]
GO


lunes, 7 de mayo de 2012

Restaurando un archivo .bkf o .bak a una base de datos SQL Server

Esto es tal vez más para mi, pero puede servirle a otros que les haya dado dificultad hacer esta tarea cuando le mandan un archivo .bak o .bkf desde otro servidor y es necesario que lo restauremos en nuestro propio servidor de SQL Server (200, 2005, 2008, 2010 o 2012).  Lo que voy a ilustrar aquí es para 2008, pero es muy equivalente para las otras versiones.

Algunos con entornos de desarrollo, o con simplemente SQL Server Express, necesitan instalar una herramienta visual para administrar sus bases de datos, esta herramienta se denomina "Administrador de tareas de SQL Server", "Microsoft SQL Server Management Studio" o simplemente "SSMSE" (para la versión Express).

Estos etornos gráficos de administración los pueden descargar gratuitamente de Microsoft, y no garantizo la durabilidad de estos enlaces en el tiempo (Microsoft regularmente cambia estas), por lo tanto también pongo la manera en que hice la consulta en Google para llegar a ellos.

Para SQL Server 2005:
Google: "sql server management studio express 2005"
URL: http://www.microsoft.com/downloads/es-es/details.aspx?familyid=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796

Para SQL Server 2008:
Google: "sql server management studio express 2008"
URL: http://www.microsoft.com/downloads/es-es/details.aspx?FamilyID=08e52ac2-1d62-45f6-9a4a-4b76a8564a2b

Advierto que durante la instalación, se tiene la impresión de que va a instalar de nuevo el servidor de la SQL Server, pero tranquilos, las bases de datos que tengamos en nuestro servidor no se verán afectadas.

Luego en nuestro PC, ingresamos por Inicio -> Todos los programas -> Microsoft SQL Server 2008 y veremos una nueva aplicación que se llama "SQL Server Management Studio"

Ingresamos, nos autenticamos con nuestro servidor y una vez que veamos nuestro listado de bases de datos, buscamos la base de datos que vamos a restaurar con el archivo que nos mandaron o trajimos de otro servidor. Le damos con el botón derecho y seleccionamos las opciones de la imagen:

 En la siguiente ventana seleccionamos que debe ser desde un "dispositivo" la restauración:

Seleccionamos el archivo .bak o .bkf del respaldo y lo agregamos

Una vez cargado el archivo, el sistema detecta los aspectos de la BD a restaurar, pero aquí es donde viene la parte importante. Hay que seleccionar la base de datos que se va a restaurar y luego ir a "Opciones".
En las configuraciones de las opciones, viene siempre por defecto sin ninguna seleción, y además viene con la ruta de los archivos de datos (.mdf) y de registro (.ldf) tal cual como estaban en el servidor de origen.  Si lo dejamos así, entonces no se restaurará y posiblemente no encuentre la ruta donde acomodar los archivos de datos y de registro.  Es por ello que es necesario que le indiquemos que "Sobre escriba la actual base de datos" y además le indicamos donde queremos que queden los archivos de datos y registro en nuestra propia máquina.

Pulsamos "Aceptar" y Voilà!
Nuestra restauración de archivo de respaldo ha terminado y tenemos en nuestra base de datos, todas las tablas y sus respectivos datos, tal cual como estaban al momento en que se realizó el backup o respaldo del servidor.

7 razones para no usar Laravel en tu proyecto de PHP

En más de 40 años de experiencia como programador y director de proyectos de programación, he aprendido que cada requerimiento tiene mejores...