Bisher habe ich Single Instance Datenbanken immer mit Skripten erstellt, die auf den vom DBCA (Database Configuration Assistent) beim letzten Schritt generierbaren SQL-Skripten basierten. Und das finde ich auch weiterhin gut so. Viele benutzen einfach die GUI des DBCA.
Ein Vorteil von Skripten unter Linux ist die Unabhängigkeit von einem vorhandenen X-Server auf Seiten des Client-PCs. Bei unseren Kunden steht so etwas nämlich nicht immer zur Verfügung, also bleibe ich den Skripten treu. Ich persönlich verwende als X-Server immer Xming, ein frei verfügbares Produkt zur Installation unter Windows. Und bei einer Windows Installation spielt das Thema natürlich keine Rolle, da hier das Arbeiten mit grafischen Oberflächen zum Standard gehört.
Als Alternative zu den bisherigen Skripten wollte ich aber nun auch einmal die Erstellung von Datenbanken mittels der DBCA Silent Methode testen.
Was benötigt man dafür?
Da ich keine Seed-Datenbank von Oracle als Vorgabe benutze, sondern eine ganz neue DB erstellen will, verwende ich das Template New_Database.dbt, ohne dass ich daran Änderungen vornehme.
Mein Response-File o19ct.rsp sieht zu Beginn so aus:
gdbName=o19ct
sid=o19ct
databaseConfigType=SINGLE
policyManaged=false
createAsContainerDatabase=false
templateName=/u01/app/oracle/product/19.0.0.0/dbhome_1/assistants/dbca/templates/New_Database.dbt
sysPassword=ChangeMe#99
systemPassword=ChangeMe#99
emConfiguration=NONE
runCVUChecks=false
dvConfiguration=false
olsConfiguration=false
storageType=FS
datafileDestination=/u02/oradata/{DB_UNIQUE_NAME}
recoveryAreaDestination=/u02/app/oracle/fast_recovery_area
recoveryAreaSize=10000
characterSet=AL32UTF8
nationalCharacterSet=AL16UTF16
registerWithDirService=false
variables=ORACLE_BASE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1,ORACLE_BASE=/u01/app/oracle,ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
initParams=sga_target=1300MB,db_block_size=8KB,processes=1000,pga_aggregate_target=500MB,open_cursors=500,audit_trail=db,control_management_pack_access=NONE
sampleSchema=false
databaseType=MULTIPURPOSE
memoryMgmtType=AUTO_SGA
enableArchive=false
dbOptions=JSERVER:false,ORACLE_TEXT:false,IMEDIA:false,CWMLITE:false,SPATIAL:false,OMS:false,APEX:false,DV:false
useOMF=false
Wobei diese Parameter auch mittels Kommandozeilen-Parameter übergeben werden können.
Ich will nun
erstellen.
Der dazu notwendige Aufruf lautet (ausgeführt als Benutzer oracle mit gesetzter Oracle Umgebung in der Shell):
dbca -silent -createDatabase -responseFile $PWD/o19ct.rsp
Hier die entsprechende Ausgabe des DBCA-Aufrufs:
$ dbca -silent -createDatabase -responseFile $PWD/o19ct.rsp
Prepare for db operation
10% complete
Registering database with Oracle Restart
14% complete
Creating and starting Oracle instance
17% complete
18% complete
24% complete
Creating database files
25% complete
33% complete
Creating data dictionary views
36% complete
42% complete
43% complete
44% complete
45% complete
51% complete
54% complete
56% complete
62% complete
Completing Database Creation
68% complete
70% complete
71% complete
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
/u01/app/oracle/cfgtoollogs/dbca/o19ct.
Database Information:
Global Database Name:o19ct
System Identifier(SID):o19ct
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/o19ct/o19ct.log" for further details.
Die damit erstellte Datenbank sieht nun folgendermaßen aus:
# DBA_REGISTRY
COMP_NAME VERSION STATUS
---------------------------------------- --------------- -----------
Oracle Database Catalog Views 19.0.0.0.0 VALID
Oracle Database Packages and Types 19.0.0.0.0 VALID
Oracle Real Application Clusters 19.0.0.0.0 OPTION OFF
Oracle XML Database 19.0.0.0.0 VALID
Oracle Workspace Manager 19.0.0.0.0 VALID
5 rows selected.
# NLS_DATABASE_PARAMETERS
PARAMETER VALUE
---------------------------------------- ----------------------------------------
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET AL32UTF8
2 rows selected.
# V$PARAMETER (non default values)
NAME VALUE
------------------------------ --------------------------------------------------
audit_file_dest /u01/app/oracle/admin/o19ct/adump
audit_trail DB
compatible 19.0.0
control_management_pack_access NONE
db_block_size 8192
db_name o19ct
db_recovery_file_dest /u02/app/oracle/fast_recovery_area
db_recovery_file_dest_size 10485760000
diagnostic_dest /u01/app/oracle
dispatchers (PROTOCOL=TCP) (SERVICE=o19ctXDB)
local_listener LISTENER_O19CT
nls_language AMERICAN
nls_territory AMERICA
open_cursors 500
pga_aggregate_target 524288000
processes 1000
remote_login_passwordfile EXCLUSIVE
sga_target 1375731712
undo_tablespace UNDOTBS1
# DBA_DATA_FILES
TABLESPACE_NAME FILE_NAME
-------------------- ----------------------------------
SYSAUX /u02/oradata/O19CT/sysaux01.dbf
SYSTEM /u02/oradata/O19CT/system01.dbf
UNDOTBS1 /u02/oradata/O19CT/undotbs01.dbf
USERS /u02/oradata/O19CT/users01.dbf
TEMP /u02/oradata/O19CT/temp01.dbf
# V$LOGFILE
GROUP# MEMBER
------ --------------------------------
1 /u02/oradata/O19CT/redo01.log
2 /u02/oradata/O19CT/redo02.log
3 /u02/oradata/O19CT/redo03.log
# V$CONTROLFILE
NAME
---------------------------------------------------------------------------
/u02/oradata/O19CT/controlfile/o1_mf_jm6kvbww_.ctl
/u02/app/oracle/fast_recovery_area/O19CT/controlfile/o1_mf_jm6kvc03_.ctl
# DBA_REGISTRY_SQLPATCH
ACTION STATUS DESCRIPTION TARGET_VERSION
------ ------- ----------------------------------------------------- -------------
APPLY SUCCESS OJVM RELEASE UPDATE: 19.12.0.0.210720 (32876380) 19.1.0.0.0
APPLY SUCCESS Database Release Update : 19.12.0.0.210720 (32904851) 19.12.0.0.0
Sieht doch eigentlich schon ganz gut aus.
Wobei das mit dem nur einer Redolog-Datei pro Redolog-Gruppe noch nicht ideal ist. Aber das lässt sich ja einfach lösen, indem man mittels SQL-Kommandos den Gruppen ein weiteres Mitglied zuweist, oder aber man passt das Response-File etwas an:
initParams=sga_target=1300MB,db_block_size=8192BYTES,processes=1000,pga_aggregate_target=500MB,open_cursors=500,audit_trail=db,control_management_pack_access=NONE,db_create_online_log_dest_1=/u02/oradata,db_create_online_log_dest_2=/u02/oradata
Oder
man ändert den DBCA Aufruf entsprechend:
dbca -silent -createDatabase -responseFile $PWD/o19ct.rsp -initParams db_create_online_log_dest_1=/u02/oradata,db_create_online_log_dest_2=/u02/oradata
Hinweis:
Übergabeparameter überschreiben oder ergänzen die Werte in der Response-Datei, welche wiederum die Werte im Template überschreiben.
Was ändert sich dadurch in der Datenbank:
CONTROL /u02/oradata/O19CT/controlfile/o1_mf_jm74fz6r_.ctl,
/u02/oradata/O19CT/controlfile/o1_mf_jm74fz8r_.ctl
REDO 1:/u02/oradata/O19CT/onlinelog/o1_mf_1_jm74fzdh_.log
REDO 1:/u02/oradata/O19CT/onlinelog/o1_mf_1_jm74fzjs_.log
REDO 2:/u02/oradata/O19CT/onlinelog/o1_mf_2_jm74g061_.log
REDO 2:/u02/oradata/O19CT/onlinelog/o1_mf_2_jm74g1d6_.log
REDO 3:/u02/oradata/O19CT/onlinelog/o1_mf_3_jm74g2qq_.log
REDO 3:/u02/oradata/O19CT/onlinelog/o1_mf_3_jm74g4c1_.log
Die Control- und Redolog-Dateien werden nun plötzlich mit OMF Dateinamen erstellt, aber man hat zumindest nun pro Redolog-Gruppe je zwei Member. Die Datendateien werden weiterhin unverändert mit non-OMF Namen erstellt.
Wem das nicht gefällt kann natürlich auch das Template direkt ändern. Dazu einfach im Abschnitt RedoLogGroupAttributes eine weiteres Member eintragen:
<member ordinal="0" memberName="redo01a.log" filepath="..."/>
<member ordinal="1" memberName="redo01b.log" filepath="..."/>
Was ändert sich dadurch in der Datenbank:
CONTROL /u02/oradata/O19CT/control01.ctl,
/u02/app/oracle/fast_recovery_area/O19CT/control02.ctl
REDO 1:/u02/oradata/O19CT/redo01a.log
REDO 1:/u02/oradata/O19CT/redo01b.log
REDO 2:/u02/oradata/O19CT/redo02a.log
REDO 2:/u02/oradata/O19CT/redo02b.log
REDO 3:/u02/oradata/O19CT/redo03a.log
REDO 3:/u02/oradata/O19CT/redo03b.log
Jetzt sieht es fast noch etwas besser aus.
Mittels der DBCA Übergabeparameter kann ich natürlich noch andere in der Response-Datei als Standard definierten Werte überschreiben. Im Folgenden ein paar einfache Beispiele:
a) Installation von Java JServer in der Datenbank
dbca -silent -createDatabase -responseFile $PWD/o19ct.rsp -dbOptions JSERVER:true
# DBA_REGISTRY
COMP_NAME VERSION STATUS
---------------------------------------- --------------- --------------------
Oracle Database Catalog Views 19.0.0.0.0 VALID
Oracle Database Packages and Types 19.0.0.0.0 VALID
Oracle Real Application Clusters 19.0.0.0.0 OPTION OFF
JServer JAVA Virtual Machine 19.0.0.0.0 VALID
Oracle XDK 19.0.0.0.0 VALID
Oracle Database Java Packages 19.0.0.0.0 VALID
Oracle XML Database 19.0.0.0.0 VALID
Oracle Workspace Manager 19.0.0.0.0 VALID
b) Datenbank mit Zeichensatz WE8MSWIN1252, anderer Blockgröße und anderen SGA-/PGA-Parametern
dbca -silent -createDatabase -responseFile $PWD/o19ct.rsp -initParams db_block_size=16KB,sga_target=12000MB,pga_aggregate_target=6000MB -characterSet WE8MSWIN1252
# NLS_DATABASE_PARAMETERS
PARAMETER VALUE
---------------------------------------- ----------------------------------------
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET WE8MSWIN1252
# V$PARAMETER
NAME VALUE
------------------------------ --------------------------------------------------
db_block_size 16384
pga_aggregate_target 6291456000
sga_target 12582912000
Die Nutzung der DBCA SILENT Methode ist eine sehr einfache und wirklich praktikable Alternative zur Nutzung der vom DBCA generierten SQL-Skripte und wird deshalb auch von mir in Zukunft genutzt werden. Mit einem kleinen Script als Wrapper bietet es mir dann auch noch die Flexibilität, die ich bisher von unseren Create-DB Scripten gewohnt bin.
Aber unabhängig von der Art wie eine Oracle Datenbank erstellt wird, sollten im Anschluss daran immer noch Anpassungen an den Initialisierungsparametern, den Profilen und Accounts sowie an den SQLNET- und/oder Listener-Parametern durchgeführt werden.
In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den
Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.