jueves, 26 de febrero de 2009

Tutorial de powershell para SQL Server 2008

network monitoring

En mi artículo anterior, mostré algunos ejemplos básicos de powershell.

Powershell es la nueva y poderosa línea de comandos de microsoft para manipular SQL Server y muchas otras tecnologías de Microsoft.

Al final de este artículo el lector podrá:




Si usted no conoce el powershell, le recomiendo ver mi artículo inicial:

http://elpaladintecnologico.blogspot.com/2009/02/que-es-powershell-ejemplos-basicos-para.html

Ahora voy a tocar el tema de powershell para SQL Server. El requisito es tener instalado SQL Server.
http://elpaladintecnologico.blogspot.com/2009/02/instalando-microsoft-sql-server-2008.html

Es un requisito para entender este artículo, experiencia en SQL Server. Personas que usaron el sqlcmd o el osql van a entender más fácilmente todo lo que voy a explicar. Pero esencialmente lo que necesito es gente que ya tenga sql server instalado y algo de experiencia en SQL Server Management studio.

Voy a hacer una introducción al powershell en sql server. Voy a mostrar ejemplos practicos de cómo ejecutar líneas de comandos, ejecutar scripts, guardar resultados de powershell en un archivo de texto y manejo de variables.
Los que ya manejan SQL Server con línea de comandos utilizando cmd siempre me preguntan: Yo tengo scripts que automáticamente hacen mis tareas.

Para que necesito powershell ?.
SQLCMD permite automatizar varias tareas, pero no es tan potente ni tiene tanta interacción con Windows como powershell. Powershell integra todos los componentes de Windows en un entorno de programación. Es decir, de ahora en adelante, los administradores de sistemas podrán administrar su base de datos, su servidor de correo, su servidor web y su sistema operativo con powershell.

La gente que programa en SQLCMD va a comenzar a migrar sus scripts a powershell. Como veremos a continuación powershell llama al SQLCMD internamente.

A quienes les sirve powershell ?.
A todos los administradores de sistemas que quieran automatizar tareas administrativas mediante scripts.
Bueno, mucha charla poca práctica.

Navegar a diferendes objetos de la base de datos usando línea de comandos (powershell)

Primero vamos a navegar en SQL Server.
Entre el management studio, seleccione el servidor y apreté el botón derecho del mouse y seleccione iniciar powershell.

Ahora coloque el comando get-psdrives:

PS SQLSERVER:\SQL\DANVIRT\DEFAULT> get-psdrive

Como puede ver, el comando muestra registros, los diferentes drives del sistema. Es decir, usted puede manipular desde aquí tanto a sql server, como al disco c como al registro. TODO SE PUEDE MANIPULAR EN POWERSHELL.

Ahora naveguemos dentro del servidor:
En mi ejemplo estoy en: PS SQLSERVER:\SQL\DANVIRT\DEFAULT> PS significa powershell
SQLSERVER significa que estoy en el drive de SQLServer (si, SQLSERVER es un drive ¡!).
DANVIRT es el nombre de mi servidor
DEFAULT es el nombre de mi instancia (en este caso es la instancia por defecto).

Usted puede moverse al drive c con el siguiente comando: PS SQLSERVER:\SQL\DANVIRT\DEFAULT> c:

Para volver a sqlserver ponga sqlserver: PS C:\Documents and Settings\Administrador> sqlserver:

Para ver los objetos dentro de SQL server ponemos ls o dir
Existen vaaaaaarios objetos. En este caso voy a ver las bases de datos PS C:\Documents and Settings\Administrador>cd databases Lo triste es que mkdir base1 no crea una nueva base de datos.

Para crear una base de datos llamada daniel1 en powershell:
PS SQLSERVER:\SQL\DANVIRT\DEFAULT\Databases> Invoke-Sqlcmd -Query "Create database daniel1;"
Para crear una base de datos llamada daniel2 en powershell utilizando parámetros.
Esto requiere 2 pasos:

Paso 1. Crear una variable con el nombre de la base de datos (en este caso daniel2) $database ="daniel2"

Paso 2. Crear la base de datos usando el parámetro $database Invoke-Sqlcmd -Query "Create database $database;"

Existen muuuuuuuuuuuchas formas para comunicarse con la base de datos desde powershell.
Pero esta es la más sencilla que conozco.

Para hacer una consulta en powershell.

Para esto nos vamos a

1. Crear una tabla en database1 llamada Estudiante con columnas

Nombre,Nota

/*Crea una tabla llamada estudiante*/

create table estudiante
(
nombre varchar(12),
nota int
)


/*inserta datos*/


Insert into estudiante values ('Jonas',58)


Insert into estudiante values ('Juan',36)


Insert into estudiante values ('Johny',49)

Para hacer una consulta a una tabla en powershell :

Invoke-Sqlcmd -Query "select * from estudiante;"


Usar variables en powershell

A muchos les gustan esas variables que reciben input de usuario en powershell.

Es decir, el usuario especifica el valor de la variable.

En este ejemplo voy a crear una base de datos llamada daniel3.

Este valor puede ser cualquier otro ya que el usuario lo especifica. Esto requiere 2 pasos:

Paso 1.

Crear una variable con mensaje de input:

PS SQLSERVER:\SQL\DANVIRT\DEFAULT\Databases> $a = read-host "Escriba el nombre de la Base de datos"


Esto crea en la variable la posibilidad de escribir mediante teclado el valor de la variable.

Paso 2 Una vez que se haya especificado el valor de a, el resto es lo mismo:

PS SQLSERVER:\SQL\DANVIRT\DEFAULT\Databases> Invoke-Sqlcmd -Query "Create database $a;"


Espero que les sirvan estos ejemplos. Cualquier duda, escriban a este blog.

People who read this post also read :



8 comentarios:

  1. Hola esta bien interesante tu post, no se si puedes poner un ejemplo de como crear usuarios y darle permisos y restricciones. Gracias

    ResponderEliminar
  2. Este es el comando para crear un login llamado juan con contraseña juan123 en T-SQL.
    Luego creas al usuario juan en la Base de datos adventureworks.

    CREATE LOGIN juan
    WITH PASSWORD = 'juan123';
    USE AdventureWorks;
    CREATE USER juan FOR LOGIN juan;
    GO

    Para asignar permisos a un usuario, hay que usar el grant, revoke:

    Revoke

    Grant

    ResponderEliminar
  3. Grcias por la pronta respuesta, peroe stqav viendo una forma de crear usuarios con store procedure pero al momento de que pongo sp_adduser automaticamente me crea un squema y no se por que pasa eso si me pudieras ayudar te agradeceria mucho estoy tratando de crear usuarios con sp. GRacias

    ResponderEliminar
  4. Si, por defecto crea un esquema, estádocumentado. No te recomiendo usar sp_adduser, esta obsoleto y te traerá problemas en el futuro, usa create user, es mejor:

    sobre sp_adduser


    sp_adduser se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. En su lugar, use CREATE USER.

    Notas
    sp_adduser también creará un esquema con el nombre del usuario.

    ResponderEliminar
  5. Hola, Gracias por el post.
    Ya cree una entrada en el mio que remite a los dos tuyos, de forma que muchas mas personas y amigos puedan leerlo.
    http://deisbel.blogspot.com/2011/07/powershell-que-es.html

    ResponderEliminar
  6. Mostrar las particiones de SSAS con la última fecha de procesamiento y
    guardar en un archivo.

    ls | select name, lastprocessed,size,estimate
    drows, estimatedsize | where {$_.LastProcessed -gt $DateToCompare} | Out-File d
    :\results.txt

    ResponderEliminar
  7. Creación de función en powershell con parámetros e uso de if, elsif, else

    Function showpartitions ($cube)
    {
    IF ($cube -eq "i")
    {
    cd \
    cd sqlas'\Partitions
    ls | select name, estimatedsize | where {$_.estimatedsize -lt 100000}
    }
    ELSEIF ($cube -eq "v")
    {
    cd \
    cd sqlas\..\Partitions
    ls | select name, estimatedsize | where {$_.estimatedsize -lt 100000}
    }

    ResponderEliminar
  8. Para invocar in paquete SSIS desde powershell si el servicio MOLAP esta abajo:


    $servicestatus=get-service | select status,name |Where-Object {$_.Name -like "*MSSQLServerOLAP*"}
    if($servicestatus.status -eq "Stopped"){
    dtexec /f "c:\MensajeServicio.dtsx"

    }

    ResponderEliminar