手工建立/刪除資料庫的步驟
今天和大家分享下資料庫的建立和刪除的步驟,裡面有很多細節需要大家考慮。建立資料庫不只是一個create database語句。刪除資料庫 drop database也不是隨時都能執行的。 --建立資料庫的步驟。 1.使用者,檔案系統,掛載點和網路的配置,核心引數配置 這個需要提前準備好。 2.ORACLE_HOME的安裝和PSU oracle_home的安裝,這個也可以靜默安裝,不過有條件還是圖形介面裝,也省事。 最好打上最新的psu。省去不少潛在的問題。 3.初始化引數的考慮 有4個必備的引數。 db_name undo_management=auto control_files sga_target 在這個基礎上,需要考慮到一些效能引數.隱含引數 在此貼一個示例,可以在這個基礎上進行修改。
*._db_block_numa=1 *._enable_NUMA_optimization=FALSE *._kghdsidx_count=1 *._ksmg_granule_size=16777216 *._optimizer_cost_based_transformation='OFF' *._optimizer_cost_model='IO' *._optimizer_skip_scan_enabled=FALSE *.aq_tm_processes=0 *.audit_file_dest='/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/oradmp/audit/' *.compatible='11.2.0.2' *.control_file_record_keep_time=30 *.control_files='/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/control/cntrl_1.dbf','/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/control/cntrl_2.dbf','/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/control/cntrl_3.dbf' *.core_dump_dest='/dbtestPT1/oracle/TEST/oradmp/cdump/' *.db_block_size=8192 *.db_cache_size=4096M *.db_domain='' *.db_file_multiblock_read_count=128 *.db_name='TEST' *.db_writer_processes=4 *.deferred_segment_creation=FALSE *.diagnostic_dest='/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/oradmp' *.java_pool_size=500M *.job_queue_processes=10 *.large_pool_size=500M *.log_archive_dest='/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/arc' *.log_archive_format='archTEST_%s_%t_%r.dbf' *.log_buffer=10485760 *.nls_length_semantics='BYTE' *.nls_territory='AMERICA' *.open_cursors=3000 *.optimizer_dynamic_sampling=0 *.optimizer_index_caching=90 *.optimizer_index_cost_adj=10 *.parallel_max_servers=64 *.pga_aggregate_target=2147483648 *.processes=5000 *.recyclebin='OFF' *.remote_login_passwordfile='EXCLUSIVE' *.resource_manager_plan='' *.sec_case_sensitive_logon=FALSE *.session_cached_cursors=150 *.session_max_open_files=20 *.sessions=1330 *.sga_max_size=8G *.sga_target=0 *.shared_pool_size=2147483648 *.transactions=1500 *.undo_management='AUTO' *.undo_retention=3600 *.undo_tablespace='UNDOTBS1'
4.建立資料庫 可以使用如下的指令碼來建立。 我這個因為環境限制,把檔案都爭取放在一個目錄下,好做測試。
connect / as SYSDBA set echo on set timing on spool create_db.log startup nomount pfile=/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/initTEST.ora create database TEST maxinstances 1 maxlogfiles 20 maxlogmembers 5 maxdatafiles 999 character set AL32UTF8 noarchivelog DATAFILE '/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/SYSTEM_001.dbf' SIZE 5000M SYSAUX DATAFILE '/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/SYSAUX_001.dbf' SIZE 5000M DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/TEMP_001.dbf' SIZE 5000M UNDO TABLESPACE UNDOTBS1 DATAFILE '/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/UNDOTBS_001.dbf' SIZE 5000M LOGFILE group 1 ('/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/redo_g1_m1.dbf', '/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/redo_g1_m2.dbf') SIZE 2048M, group 2 ('/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/redo_g2_m1.dbf', '/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/redo_g2_m2.dbf') SIZE 2048M, group 3 ('/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/redo_g3_m1.dbf', '/dbtestPT1/oracle/TEST/oratmp01/temp/temp_db/redo_g3_m2.dbf') SIZE 2048M ; spool off
建立的時候,可以觀察到,檔案的建立順序不是按照語句的順序來的。 基本是按照下面的順序建立的。
- control files
- redo log files
- system tablespace
- sysaux tablespace
- undo tablespace
- temp tablespace
建立的時候報瞭如下的錯誤。
create database TEST
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-01501: CREATE DATABASE failed
ORA-01519: error while processing file '?/rdbms/admin/dtxnspc.bsq' near line 5
ORA-00604: error occurred at recursive SQL level 1
ORA-30012: undo tablespace 'UNDOTBS1' does not exist or of wrong type
Process ID: 13885
Session ID: 3781 Serial number: 3
查找了半天才發現自己在initTEST.ora的undo_tablespace指定成了‘UNDOTBS',結果建立的時候就找不到了。 5.資料字典初始化 先說一下sys和system的預設密碼,sys的預設密碼是change_on_install,system的是manager sqlplus sys/change_on_install as sysdba SQL*Plus: Release 11.2.0.2.0 Production on Fri Mar 7 17:09:01 2014 Copyright (c) 1982, 2010, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> 指令碼如下。 前兩個sql指令碼是必須的, dbmspool.sql在安裝gc的時候也需要,平時也可以用。 catblock.sql是和鎖相關的指令碼可以檢視鎖的一些明細。 指令碼內容如下: connect / as SYSDBA set echo off spool create2.log @?/rdbms/admin/catalog.sql; @?/rdbms/admin/catproc.sql; @?/rdbms/admin/dbmspool.sql @?/rdbms/admin/catblock.sql; @?/rdbms/admin/caths.sql; @?/rdbms/admin/owminst.plb; @?/sqlplus/admin/plustrce.sql; connect SYSTEM/manager @?/sqlplus/admin/pupbld.sql; @?/sqlplus/admin/help/hlpbld.sql helpus.sql; spool off 6.建立額外的元件 安裝JVM,XDB,statspack --Install JVM @?/javavm/install/initjvm.sql; @?/xdk/admin/initxml.sql; @?/xdk/admin/xmlja.sql; @?/rdbms/admin/catjava.sql; --Install XMLDB @?/rdbms/admin/catqm.sql XDB SYSAUX TEMP @?/rdbms/admin/catxdbj.sql; --Install statspack define default_tablespace='USERS' --這個表空間可以根據需要來建立 define temporary_tablespace='temp' define perfstat_password='perfstat' @?/rdbms/admin/spcreate 7.建立相應的表空間和資料檔案 這個部分,如果已經有類似的環境,需要和其他環境的配置保持一致,可以這樣做。 select dbms_metadata.get_ddl('TABLESPACE', ts.tablespace_name) from dba_tablespaces ts; 直接生成建立語句,自己簡單改一下路徑就可以了。 生成的語句如下: CREATE TABLESPACE "TEST_DATA" DATAFILE '/dbtestPT1/oracle/TEST/oracnt02/redolog_A2/redo/redo04A.log' SIZE 10737418 24, '/dbtestPT1/oracle/TEST/oracnt04/redolog_B2/redo/redo04B.log' SIZE 10737418 24, '/dbtestPT1/oracle/TEST/oradata01/ggs_data01.dbf' SIZE 1073741824 LOGGING ONLINE PERMANENT BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT NOCOMPRESS SEGMENT SPACE MANAGEM ENT AUTO 8.資料庫使用者的建立 這個部分也可以省事些,參考其他的環境,生成一些指令碼。
select dbms_metadata.get_ddl('USER',u.username) from dba_users u WHERE USERNAME like '%TEST%';
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT',u.username) from dba_users u WHERE USERNAME like '%TEST%';
select dbms_metadata.get_granted_ddl('ROLE_GRANT',u.username) from dba_users u WHERE USERNAME like '%TEST%';
如果要得到比較完整的指令碼,可以參考這個,也是別人分享的。貼在這。
set serveroutput on size 1000000
set verify off
undefine user_name
declare
v_name varchar2(30) := upper('&user_name');
no_grant exception;
pragma exception_init( no_grant, -31608 );
begin
dbms_metadata.set_transform_param(dbms_metadata.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE);
dbms_output.enable(1000000);
dbms_output.put_line(dbms_metadata.get_ddl('USER',v_name));
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl('SYSTEM_GRANT',v_name));
exception
when no_grant then dbms_output.put_line('– No system privs granted');
end;
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl('ROLE_GRANT',v_name));
exception
when no_grant then dbms_output.put_line('– No role privs granted');
end;
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl('OBJECT_GRANT',v_name));
exception
when no_grant then dbms_output.put_line('– No object privs granted');
end;
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA',v_name));
exception
when no_grant then dbms_output.put_line('– No tablespace quota specified');
end;
dbms_output.put_line(dbms_metadata.get_granted_ddl('DEFAULT_ROLE', v_name ));
exception
when others then
if SQLCODE = -31603 then dbms_output.put_line('– User does not exists');
else raise;
end if;
end;
/
9.網路,tns配置 這個部分比較常規,可以使用netca,netmgr來建立,也可以參考文件修改tnsnames.ora listener.ora 10.檢查 --刪除資料庫 可能建立資料庫的大家都接觸過,刪除的工作其實也不是一帆風順的。 drop database這個命令老是看到,就是沒有環境敢這麼幹。測試一把。 ORACLE instance started. Total System Global Area 8551575552 bytes Fixed Size 2243608 bytes Variable Size 4227859432 bytes Database Buffers 4294967296 bytes Redo Buffers 26505216 bytes Database mounted. SQL> drop database TEST; drop database TEST * ERROR at line 1: ORA-00933: SQL command not properly ended 重啟到mount階段。 SQL> alter database mount exclusive; Database altered. SQL> drop database TEST; drop database TEST * ERROR at line 1: ORA-00933: SQL command not properly ended SQL> drop database;--要執行還是不容易的。 drop database * ERROR at line 1: ORA-12719: operation requires database is in RESTRICTED mode SQL> alter system enable restricted session; System altered. SQL> drop database; Database dropped. Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> SQL> SQL> SQL> SQL> show parameter insta SP2-0640: Not connected SQL> exit