Guest User

Untitled

a guest
Mar 24th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.71 KB | None | 0 0
  1. import argparse
  2. import datetime
  3. import os
  4. import socket
  5. import cx_Oracle
  6.  
  7. import paramiko
  8. from colorama import Fore
  9. from colorama import Style
  10.  
  11.  
  12. class DatabaseBuilder:
  13. create_template = '''dbca -silent -createDatabase \
  14. -templateName General_Purpose.dbc \
  15. -gdbname {0} -sid {0} -responseFile NO_VALUE \
  16. -characterSet AL32UTF8 \
  17. -sysPassword {1} \
  18. -systemPassword {1} \
  19. -createAsContainerDatabase true \
  20. -numberOfPDBs 1 \
  21. -pdbName {2} \
  22. -pdbAdminPassword {1} \
  23. -databaseType MULTIPURPOSE \
  24. -totalMemory {3} \
  25. -memoryMgmtType AUTO_SGA \
  26. -recoveryAreaDestination {7}
  27. -storageType FS \
  28. -useOMF true \
  29. -datafileDestination "{4}" \
  30. -redoLogFileSize {5} \
  31. -emConfiguration NONE \
  32. {6} \
  33. -ignorePreReqs \
  34. '''
  35.  
  36. delete_template = '''dbca -silent -deleteDatabase \
  37. -sourceDB {0} \
  38. -sysDBAUserName sys \
  39. -sysDBAPassword {1}'''
  40.  
  41. @staticmethod
  42. def print_comments(text):
  43. print(Fore.RED + text + Style.RESET_ALL)
  44.  
  45. @staticmethod
  46. def print_command(text):
  47. print(Fore.BLUE + text + Style.RESET_ALL)
  48.  
  49. def run_command(self, command, envron_variables=None):
  50. self.print_command(command)
  51. ssh = paramiko.SSHClient()
  52. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  53. ssh.connect(self.hostname, 22, username=self.remote_user, password=self.remote_password, )
  54. stdin, stdout, stderr = ssh.exec_command(command, environment=envron_variables)
  55. print ("".join(stdout.readlines()))
  56. ssh.close()
  57.  
  58. def run_dba_command(self, command):
  59. try:
  60. connection = cx_Oracle.connect(mode=cx_Oracle.SYSDBA)
  61. cursor = connection.cursor()
  62. cursor.execute(command)
  63. cursor.close()
  64. connection.close()
  65. except cx_Oracle.DatabaseError as exc:
  66. error, = exc.args
  67. print('Failed to execute : {}'.format(command))
  68. print("Oracle-Error-Code:", error.code)
  69. print("Oracle-Error-Message:", error.message)
  70.  
  71. def create_database(self, hostname, os_user, os_password, oracle_sid, oracle_base, sys_password, pdb_name, sga_size, location, redo_size, dont_create_listener):
  72. self.hostname = hostname
  73. self.remote_user = os_user
  74. self.remote_password = os_password
  75.  
  76. start = datetime.datetime.now()
  77. self.print_comments('Creating database')
  78. create_listener = '-createListener LISTENER:1521'
  79. if dont_create_listener:
  80. create_listener = ''
  81.  
  82. command = self.create_template.format(oracle_sid, sys_password, pdb_name, sga_size, location, redo_size, create_listener, os.path.join(oracle_base, 'fast_recovery_area'))
  83. self.run_command(command)
  84. if not dont_create_listener:
  85. self.print_comments("Starting listener")
  86. self.run_command('lsnrctl start')
  87. self.run_dba_command("alter system set db_create_file_dest = '{}'".format(location))
  88. end = datetime.datetime.now()
  89. self.print_comments('Completed creation of database in {}'.format(end - start))
  90.  
  91. def delete_database(self, hostname, os_user, os_password, oracle_sid, sys_password):
  92. self.hostname = hostname
  93. self.remote_user = os_user
  94. self.remote_password = os_password
  95.  
  96. start = datetime.datetime.now()
  97. self.print_comments('Deleting database {}'.format(oracle_sid))
  98. command = self.delete_template.format(oracle_sid, sys_password)
  99. self.run_command(command)
  100. end = datetime.datetime.now()
  101. self.print_comments('Deleted database {} in {}'.format(oracle_sid, end - start))
  102.  
  103.  
  104.  
  105.  
  106. if __name__ == '__main__':
  107. oracle_sid, oracle_base = None, None
  108. try:
  109. oracle_sid = os.environ['ORACLE_SID']
  110. except:
  111. oracle_sid = 'orcl'
  112.  
  113. try:
  114. oracle_base = os.environ['ORACLE_BASE']
  115. except:
  116. oracle_base = '/u01/app/oracle'
  117.  
  118. local_hostname = socket.gethostname()
  119.  
  120. parser = argparse.ArgumentParser(description='Create database...')
  121. parser.add_argument('-s', '--server', help='server to create database on', required=False, default=local_hostname)
  122. parser.add_argument('-ou', '--os_user', help='os user to create the database on', required=False, default='oracle')
  123. parser.add_argument('-op', '--os_password', help='os user to create the database on', required=False, default='oracle')
  124. parser.add_argument('-o', '--ora_sid', help='sid and global name of database (will be the same)', required=False, default=oracle_sid)
  125. parser.add_argument('-b', '--ora_base', help='oracle base location', required=False, default=oracle_base)
  126. parser.add_argument('-p', '--sys_password', help='sys password', required=False, default='welcome1')
  127. parser.add_argument('-n', '--pdb_name', help='PDB name', required=False, default='soe')
  128. parser.add_argument('-m', '--sga_size', help='memory to be allocated to database', required=False, default=1024)
  129. parser.add_argument('-l', '--location', help='location of data files', required=False, default=os.path.join(oracle_base, 'oradata'))
  130. parser.add_argument('-r', '--redo_size', help='redo log size', required=False, default=200)
  131. parser.add_argument('-nl', '--dont_create_listener', help='dont create a listener', action='store_true', required=False, default=False)
  132. parser.add_argument('-operation', '--operation', help='operation to perform', choices=['create', 'delete'], default='create', required=False)
  133.  
  134. args = parser.parse_args()
  135.  
  136. db = DatabaseBuilder()
  137.  
  138. if args.operation == 'create':
  139. db.create_database(args.server, args.os_user, args.os_password, args.ora_sid, args.ora_base, args.sys_password, args.pdb_name, args.sga_size, args.location, args.redo_size, args.dont_create_listener)
  140. else:
  141. db.delete_database(args.server, args.os_user, args.os_password, args.ora_sid, args.sys_password)
Add Comment
Please, Sign In to add comment