Problema para aumentar discos MBR de 2TB en máquinas virtuales Windows

Hay dos tipos de disco, MBR y GPT. Ambos se usan en equipos para almacenamiento.

MBR, Master Boot Record, utiliza la tabla de particiones BIOS estándar y admite hasta 2 TB por partición única en el sistema operativo Windows. Sólo admite hasta 4 particiones primarias. Si desea crear más particiones en MBR, debe cambiar una partición primaria en una partición extendida, de modo que pueda crear más unidades lógicas en la partición extendida.

GPT, el disco de la tabla de particiones GUID, utiliza EFI, su volumen es más grande que el disco MBR y rompe la limitación de 2 TB de espacio en disco y 4 particiones primarias. Windows solo puede arrancar desde discos GPT en sus versiones de 64 bits desde Vista en adelante. Los sistemas de 32 bits, aunque no pueden arrancar desde estos discos, sí que son capaces de leer y escribir en ellos sin problemas.

Convertir disco de MBR a GPT y viceversa con pérdida de datos:

  • Inicio, “cmd”, y botón derecho seleccionar “Ejecutar como administrador”, escribir “diskpart”
  • “List disk” e intro, veremos los discos que tenemos y cuales son GPT ya que están marcados con asterisco en la columna GPT
  • “select disk 1”, si el disco que queremos convertir es el 1. Si volvemos a hacer “list disk” comprobaremos que el disco seleccionado con un asterisco es sobre el que queremos trabajar.
  • “convert gpt” o “convert mbr”, en caso de que no funcione habría que hacer antes “clean”

Convertir disco de MBR a GPT y viceversa con pérdida de datos, interfaz Windows:

  • Entrar en el administrador de equipos
  • Seleccionar el disco que queremos convertir y eliminar el volumen
  • Seleccionar el disco y “Convertir en disco GPT”

Convertir disco de MBR a GPT y viceversa sin pérdida de datos en w7 y w10:

  • Mediante herramientas como el Mini Tool Partition Wizard Free, seleccionando «Convert MBR Disk to GPT Disk» sobre el disco a convertir y posteriormente «Apply»

Convertir disco de MBR a GPT y viceversa sin pérdida de datos en w2008, w2012, w2012 R2 y w2016 en máquinas virtuales:

La herramienta Mini Tool Partition Wizard Free sólo está disponible para w7 y w10 así que se haría lo siguiente:

  • Apagar Maquina que tiene el disco que queremos aumentar
  • Quitar el disco de dicha máquina de 2TB sin eliminar ficheros desde vcenter o sistema de virtualización que usemos
  • Conectar el disco que hemos desconectado a otra máquina w7 o w10 en la que instalaremos la herramienta MiniToolPartition Wizard
  • Abrir aplicación MiniToolPartition Wizard y convertir el disco que hemos añadido, que no se olvide aplicar cambios
  • Quitar el disco de la segunda máquina de 2TB sin eliminar ficheros
  • Añadir disco a la máquina original y encender
  • Ya se puede aumentar el tamaño del disco a 3TB porque ya es GPT

Obtener todos los serial number en UCS-Manager

Problema:

En nuestro UCS manager, necesitamos obtener todos los numeros de serie de los componentes registrados en el UCS-Manager, pero informe xml que no envia por defecto no nos vale y no queremos parsear el DOM, ya que queremos obtener de manera ordenada los serial number de los fabric, chassis, iloms…

SoluciÓN

Nos conectamos mediante ssh al ucs-manager

#Obtenemos el inventario de los fabric, expansiones, modulos, ventiladores y PSU's
UCS-TEST# sh Fabric-interconnect inventory expand" 

#Obtenemos el inventario de los chasis, IOM, PSUS's y servidores
UCS-TEST# sh chassis inventory expand"   Chassis, IOM, PSU's and Servers

#Obtenemos el inventario de los servidores (modulos de memoria, cpu's...)
UCS-TEST# sh server inventory expand"

Netapp: Habilitar opciones de volumen NFS para montar en windows

Para poder montar un volumen de Netapp con el protocolo NFS en maquinas windows, es necesario habilitar una opcion del volumen generado en Netapp. Esto esta disponible en las versiones 8.3 en adelante (en las versiones anteriores lo desconocemos).

Mostramos las opciones NFS del volumen que queremos montar en windows.

CLUSTER::> nfs server show -vserver SVM

                            Vserver: SVM
                 General NFS Access: true
                             NFS v3: enabled
                           NFS v4.0: disabled
                       UDP Protocol: enabled
                       TCP Protocol: enabled
               Default Windows User: -
                NFSv4.0 ACL Support: disabled
    NFSv4.0 Read Delegation Support: disabled
   NFSv4.0 Write Delegation Support: disabled
            NFSv4 ID Mapping Domain: defaultv4iddomain.com
NFSv4 Grace Timeout Value (in secs): 45
Preserves and Modifies NFSv4 ACL (and NTFS File Permissions in Unified Security Style): enabled
      NFSv4.1 Minor Version Support: disabled
                      Rquota Enable: disabled
       NFSv4.1 Parallel NFS Support: enabled
                NFSv4.1 ACL Support: disabled
               NFS vStorage Support: disabled
NFSv4 Support for Numeric Owner IDs: enabled
              Default Windows Group: -
    NFSv4.1 Read Delegation Support: disabled
   NFSv4.1 Write Delegation Support: disabled
                NFS Mount Root Only: enabled
                      NFS Root Only: disabled
Permitted Kerberos Encryption Types: des, des3, aes-128, aes-256
                  Showmount Enabled: disabled
Set the Protocol Used for Name Services Lookups for Exports: udp
        NFSv3 MS-DOS Client Support: disabled

Observamos que la ultima opción, esta deshabilitada, la cual nos permite montar los volumenes en maquinas windows.

Se habilita con el siguiente comando:

nfs server modify -vserver SVM  -v3-ms-dos-client enable

Una vez habilitado, ya se pueden montar volumenes en sistemas operativos windows.

Como mover un índice a otro tablespace

En alguna ocasión, necesitamos reorganizar los índices de nuestra base de datos y los queremos mover a otro tablespace.

Para ello, lo haremos con la siguiente sentencia:

alter index <index-name> rebuild tablespace <new-tablespace>;

Nota: podemos ver los índices que tenemos en nuestra base de datos consultando la vista dba_indexes

Funcionamiento y configuración Autogrow y Shrink en volumenes de vserver en cluster Netapp

Para configurar autogrow y shrink en el volumen lo primero es activarlo:

volume autosize -vserver vserver_name vol_name -mode grow_shrink

También se puede activar a través de la web, entrando en la svm y editando el volumen:

Funcionamiento Grow y shrink
Funcionamiento Grow y shrink

Con este comando sacaremos toda la configuración de los parámetros de Autogrow y Shrink de los volúmenes:

cluster::>volume show –vserver svm –volume volumen1

El autogrow aumenta el tamaño del volumen en función de un porcentaje (opción “Autosize Grow Threshold Percentage”) que se cambia por comando, por defecto 95%.

Al igual que shrink también hace que se disminuya el volumen en función de un porcentaje que está al 50%( parámetro “Autosize Shrink Threshold Percentage”). Es posible que el volumen no se reduzca, aunque estemos al 42% de uso porque hay otro parámetro que es “Minimun Autosize” que indica a lo mínimo a lo que puedes reducir el volumen con shrink.

El valor “Minimun autosize” se resetea al tamaño de volumen cuando se hace un resize o cuando se habilita el autosize.

Para cambiar estos parámetros:

cluster::>volume autosize

Volumenes de cluster inaccesibles y controladora fuera del cluster de Netapp

Un indicio que se ha salido una controladora de un cluster de Netapp, es que los volúmenes de esa controladora no puedes verlos a través del GUI si esa controladora tiene el Epsilon . La solución para poder seguir administrando los volúmenes aunque estén fuera de cluster es cambiar el Epsilon de nodo. Los pasos son los siguientes:

Cluster show (muestra los nodos del cluster, si hay alguno fuera del cluster lo indica al final de la visualización)

set -privilege advanced
cluster show -epsilon * (muestra todos los nodos del cluster e indica cual tiene el epsilon)
Cluster modify -node node1 -epsilon false (el nodo que tenia el epsilon se lo quitamos)
cluster modify -node node3 -epsilon true (asignamos al nodo3 epsilon)

Después de realizar este cambio ya podemos administrar los volúmenes que se encontraban en el nodo que está fuera del cluster

Consultar el espacio disponible en los tablespaces

A menudo, los DBAs necesitan monitorizar el espacio de los tablespaces. Aunque ya hay productos, como el Cloud Control donde pueden programarse estas alertas, siempre podemos consultar el espacio accediendo a las vistas dedicadas a ello que tiene nuestra base de datos.

Esta consulta serviría para bases de datos «nonpluggable» de oracle 12c

SELECT 1 seq, b.tablespace_name, nvl(x.fs,0)/y.ap*100 pf, b.file_name file_name,
b.bytes/&&b_div a_byt, NVL((b.bytes-SUM(f.bytes))/&&b_div,b.bytes/&&b_div) t_byt,
NVL(SUM(f.bytes)/&&b_div,0) f_byt, NVL(SUM(f.bytes)/b.bytes*100,0) pct_free
FROM dba_free_space f, dba_data_files b
,(SELECT y.tablespace_name, SUM(y.bytes) fs
FROM dba_free_space y GROUP BY y.tablespace_name) x
,(SELECT x.tablespace_name, SUM(x.bytes) ap
FROM dba_data_files x GROUP BY x.tablespace_name) y
WHERE f.file_id(+) = b.file_id
AND x.tablespace_name(+) = y.tablespace_name
and y.tablespace_name = b.tablespace_name
AND f.tablespace_name(+) = b.tablespace_name
GROUP BY b.tablespace_name, nvl(x.fs,0)/y.ap*100, b.file_name, b.bytes
UNION
SELECT 2 seq, tablespace_name,
j.bf/k.bb*100 pf, b.name file_name, b.bytes/&&b_div a_byt,
a.bytes_used/&&b_div t_byt, a.bytes_free/&&b_div f_byt,
a.bytes_free/b.bytes*100 pct_free
FROM v$temp_space_header a, v$tempfile b
,(SELECT SUM(bytes_free) bf FROM v$temp_space_header) j
,(SELECT SUM(bytes) bb FROM v$tempfile) k
WHERE a.file_id = b.file#
ORDER BY 1,2,4,3;

Problema de actualización ODA X6-2-HA desde 12.1.2.11.0 a 12.2.1.2.0 «It should be relinked with RDS protocol»

Problema:

Al actualizar el ODA (oracle database appliance) X6-2-HA desde la versión 12.1.2.11.0 a la 12.2.1.0 obtenemos el siguiente error

[root@test-node1 ~]# oakcli update -patch 12.2.1.2.0 --server 

***************************************************************** 
The grid software on this system is linked with UDP/IP protocol. 
It should be relinked with RDS protocol 

For more details, please refer to the 12.2.1.2.0 release notes 
and README. 
***************************************************************** 

Exiting...

Solución:

Para solucionar el problema, en primer lugar tenemos que parar todas las bases de datos, en ambos nodos del ODA. Una vez paradas recompilamos las librerías para que la comunicación entre los nodos, en vez de ser mediante protocolo TCP/UDP sea mediante RDS

[root@test-node1 ~]# su - oracle
[oracle@test-node1 ~]# cd /opt/scripts
[oracle@test-node1 ~]# ./stop_databases.sh
[oracle@test-node1 ~]# ./stop_listeners.sh

##Ahora en el nodo 2 paramos las bases datos y los listeners

[root@test-node2 ~]# su - oracle
[oracle@test-node2 ~]# cd /opt/scripts
[oracle@test-node2 ~]# ./stop_databases.sh
[oracle@test-node2 ~]# ./stop_listeners.sh

##Vamos de nuevo al nodo 1

[oracle@test-node1 ~]#  cd $ORACLE_HOME/rdbms/lib 
[oracle@test-node1 ~]#  make -f ins_rdbms.mk ipc_rds 

##Hacemos los miso en el nodo 2

[oracle@test-node2 ~]#  cd $ORACLE_HOME/rdbms/lib 
[oracle@test-node2 ~]#  make -f ins_rdbms.mk ipc_rds 

Con esto ya podríamos proceder a la actualización de nuestro Oracle Database Appliance

Tenemos una nueva actualizacion sobre está entrada

Creando y administrando sinónimos en Oracle

Un sinónimo es el mecanismo que tiene oracle para darle un nombre alternativo (alias) a un objecto.

De esta forma, si existen varios usuarios en base de datos con objetos en sus esquemas, podremos acceder al objeto de otro esquema sin necesidad de hacer referencia al propietario.

Por ejemplo:

El USUARIO1 quiere acceder a una tabla EMP del USUARIO2 (asumimos que tiene permisos para hacer select sobre la tabla de ese usuario). Si no existe sinónimo, lo tendrá que hacer de la siguiente forma:

select * from usuario2.emp;

Para crear un sinónimo, el usuario que lo haga tiene que tener permiso para crear sinónimos (CREATE SYNONYM system privilege). Este permiso lo puede otorgar un usuario administrador. Si el usuario tiene ese privilegio, podría crear el sinónimo de la siguiente manera:  

create synonym emp for usuario2.emp;

Continuar leyendo «Creando y administrando sinónimos en Oracle»

Registro de Creación de Usuarios en el Directorio Activo

Cuando el Directorio Activo es administrado por un grupo de personas, y necesitamos saber quien ha realizado o realiza alguna tarea concreta, este script nos ayuda a mantener un registro de quien/quienes crean usuarios en el Directorio Activo de nuestro dominio.

Consideraciones para la ejecución del script:

  1. Habilitar auditoria en los controladores de dominio
  2.  El evento que registra la creación de usuarios es el 4720 de la parte de seguridad del visor de eventos.
  3. Ejecutar el script en los controladores de dominio si no se tiene habilitado WMI en dichos DC.
  4. El script registra todos los usuarios que se han creado en el dia anterior.
  5. El script registra el objeto usuario que se ha creado, la fecha en la que se ha creado y el objeto que crea dicha cuenta de usuario.

Script de Powershell:

param( [switch]$LastLogonOnly,[switch]$OuOnly)
############## Find EventID 4720 with user's requesting Kerberos TGT, skipping Exchange Health Mailbox request and extracting Users/Client names,IP Addresses ####

Set-ExecutionPolicy Unrestricted -Force

#Create directorys if not exists
New-Item -ItemType Directory -Force -Path "C:\scripts" | Out-Null

New-Item -ItemType Directory -Force -Path "C:\scripts\usuariosCreados" | Out-Null

Remove-Item "C:\scripts\usuariosCreados\usuariosCreados_$((Get-Date).AddDays(-1).ToString('dd-MM-yyyy')).csv" -Force -ErrorAction SilentlyContinue

$Domain = (Get-WmiObject Win32_Computersystem).domain

$read_log={
Param ($OuOnly,$Domain) ## Define parameter to pass maxevent to scripblock
$EventInfo=Get-WinEvent -FilterHashTable @{LogName="Security"; ID=4720} | where {$_.Message -notmatch "SM_" } | where { $_.Message -notmatch "\$" } |
select Message, TimeCreated , MachineName

$EventInfo | foreach {
############# Find the User account in AD and if not found, throw and exception ###########
$Full_User_Property=0
Try ## Need Try statement to test and surpress error
{
$Full_User_Property = (Get-AdUser $_.usuario -Properties *)
$_."Localizacion" = $Full_User_Property.CanonicalName.TrimStart($Domain).SubString(1)
}
catch
{ } ## The $_."User Location" is not passed to catch statement thus needing another below statement to set value"

Return $_
}
}

########### Job starts to query replica domain controllers #############
$result=@()
$RemoteJob=@()

#Importa modulo de AD
Import-Module ActiveDirectory
$date= ((Get-Date).AddDays(-1))
$dateString = $date.ToLongDateString()

## Make array of remote jobs

$DomainControllers = (Get-ADDomainController -Filter { isGlobalCatalog -eq $true -or isGlobalCatalog -eq $false}).Name

############### Start the Local Job and Remote Job to find the event id ################
$LocalJobExists=0
If ($DomainControllers -contains $(hostname)) ## Check if the computer running the script is Domain Controller itself
{
$LocalJob = Start-Job -scriptblock $read_log -ArgumentList $OuOnly,$Domain;$LocalJobExists=1 ## If so, start job to query local domain controller
}

$DomainControllers | where {$_ -ne $(hostname)} | foreach {
## Start remote jobs on each other domain controllers
$RemoteJob+= Invoke-Command -ComputerName $_ -ScriptBlock $read_log -ArgumentList $OuOnly,$Domain -AsJob -ErrorAction SilentlyContinue
}

If ($LocalJobExists)
{
$result = $LocalJob | Wait-Job | Receive-Job; Remove-Job $LocalJob ## If the computer running the script is not a domain controller(may be RSAT installed), then all jobs will be remote jobs

}

$resultDomainController=@()
$RemoteJob | foreach {
$resultDomainController= $resultDomainController + $_ | Wait-Job -ErrorAction SilentlyContinue -Force | Receive-Job -ErrorAction SilentlyContinue;
Remove-Job $_ -ErrorAction SilentlyContinue -Force }
## Wait and Receive remote jobs on each remote DCs and add to Local job result

forEach ($a in $result){
if ($a.TimeCreated.ToLongDateString() -eq $dateString) {
#Manipulate manually message
$message = $a.message
$message | Out-File -FilePath "C:\scripts\message.txt"
$admin = Select-String C:\scripts\message.txt -pattern "Nombre de cuenta:"
$nameAdmin = $admin[0].Line.Split(":")
$user = Select-String C:\scripts\message.txt -pattern "Nombre principal de usuario:"
$nameUser = $user.Line.Split(":")
Remove-Item C:\scripts\message.txt -Force -ErrorAction SilentlyContinue

If ($LastLogonOnly)
{
$(
[PSCustomObject]@{UsuarioCreado=$nameUser[1].Trim();Administrador=$nameAdmin[1].Trim();FechayHora=$a.TimeCreated.ToShortDateString() +","+ $a.TimeCreated.ToShortTimeString();NombreMaquina=$a.MachineName}
) | Export-Csv "C:\scripts\usuariosCreados\usuariosCreados_$((Get-Date).AddDays(-1).ToString('dd-MM-yyyy')).csv" -NoTypeInformation -Append
}
else
{
$(
[PSCustomObject]@{UsuarioCreado=$nameUser[1].Trim();Administrador=$nameAdmin[1].Trim();FechayHora=$a.TimeCreated.ToShortDateString() +","+ $a.TimeCreated.ToShortTimeString();NombreMaquina=$a.MachineName}
) | Export-Csv "C:\scripts\usuariosCreados\usuariosCreados_$((Get-Date).AddDays(-1).ToString('dd-MM-yyyy')).csv" -NoTypeInformation -Append

}
}
}

forEach ($a in $resultDomainController){
if ($a.TimeCreated.ToLongDateString() -eq $dateString) {
#Manipulate manually message
$message = $a.message
$message | Out-File -FilePath "C:\scripts\message.txt"
$admin = Select-String C:\scripts\message.txt -pattern "Nombre de cuenta:"
$nameAdmin = $admin[0].Line.Split(":")
$user = Select-String C:\scripts\message.txt -pattern "Nombre principal de usuario:"
$nameUser = $user.Line.Split(":")
Remove-Item C:\scripts\message.txt -Force -ErrorAction SilentlyContinue

If ($LastLogonOnly)
{
$(
[PSCustomObject]@{UsuarioCreado=$nameUser[1].Trim();Administrador=$nameAdmin[1].Trim();FechayHora=$a.TimeCreated.ToShortDateString() +","+ $a.TimeCreated.ToShortTimeString();NombreMaquina=$a.MachineName}
) | Export-Csv "C:\scripts\usuariosCreados\usuariosCreados_$((Get-Date).AddDays(-1).ToString('dd-MM-yyyy')).csv" -NoTypeInformation -Append
}
else
{
$(
[PSCustomObject]@{UsuarioCreado=$nameUser[1].Trim();Administrador=$nameAdmin[1].Trim();FechayHora=$a.TimeCreated.ToShortDateString() +","+ $a.TimeCreated.ToShortTimeString();NombreMaquina=$a.MachineName}
) | Export-Csv "C:\scripts\usuariosCreados\usuariosCreados_$((Get-Date).AddDays(-1).ToString('dd-MM-yyyy')).csv" -NoTypeInformation -Append

}
}
}