手工建立/刪除資料庫的步驟

kingsql發表於2014-09-11
今天和大家分享下資料庫的建立和刪除的步驟,裡面有很多細節需要大家考慮。建立資料庫不只是一個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

建立的時候,可以觀察到,檔案的建立順序不是按照語句的順序來的。
基本是按照下面的順序建立的。
    1. control files
    2. redo log files
    3. system tablespace
    4. sysaux tablespace
    5. undo tablespace
    6. 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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28389881/viewspace-1267551/,如需轉載,請註明出處,否則將追究法律責任。

相關文章