創建需求和目的
1、需要把11機器上的oracle庫中的表導入到12機器oracle庫
2、11機器上的數據庫fp在12機器上不存在,需要創建新庫,以便導入。
3、我們只需導入業務庫shp即可,不需要把system,sysaux,temp等系統表空間一並導入,例如:mysql你在導庫的時候只是導業務庫或表,而不會導入mysql.user這樣的系統表
原理是一樣的。
所以你對於創建新庫的時候,哪些是業務表空間,哪些是系統表空間還是從oracle角度了解清楚他們都是做什么的。
4、導入時需要注意字符集的差異,你在建庫的時候就要設置好字符集。
無非一個是業務庫,一個是系統運行需要的比如:SYSTEM表空間存儲了必要大量的系統表,包括一些數據字典和動態性能視圖等。
環境采樣
oracle@prd:/home/oracle$cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)
oracle@prd:/home/oracle$uname -r
3.10.0-327.el7.x86_64
oracle:Release 11.2.0.4.0 Production,單機版
步驟一、指定新的SID
oracle@prd:/home/oracle$cat .bash_profile //查看下環境變量設置情況 # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/.local/bin:$HOME/bin export ORACLE_BASE=/u01/oracle export ORACLE_HOME=/u01/oracle/product/11.2.0 ##su - oracle 進入默認顯示的ORACLE_SID export ORACLE_SID=prd export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 export ORACLE_TERM=xterm export TNS_ADMIN=$ORACLE_HOME/network/admin export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/lib export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib:/usr/local/lib export CLASSPATH=$ORACLE_HOME/JRE export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin export PS1="`whoami`@$ORACLE_SID:"'$PWD$' export DB_ALERT=/u01/oracle/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace stty erase ^H alias sqlplus='rlwrap sqlplus' alias rman='rlwrap rman' alias lsnrctl='rlwrap lsnrctl' //指定新的sid,實際就是切換實例,我們想登錄某個數據庫實例就需要 //重新設置當前的ORACLE_SID,這樣才能進入到個是數據庫的實例中 //這點在操作中要注意。 oracle@prd$>export ORACLE_SID=fp oracle@prd$>echo $ORACLE_SID oracle@prd:/home/oracle$sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Sat Mar 19 02:17:35 2022 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance.
//已連接到某空閑實例. //意思就是這個實例實際表示兩種意思
//1、該實例未啟動,啟動數據庫需三個階段 startup nomount,alter database mount,alter database open;
每個階段實際都會定義一些操作,只有該階段才能進行相關操作。例如:select status from v$instance; 查詢實例,首先你得 startup nomount才能查詢
//2、該實例實際未存在也會這樣顯示提示。
步驟二、創建密碼文件
為創建數據庫,我們必須選擇一種數據庫管理員身份驗證模式,這里有兩種方法:
With a password file
With operating system authentication
oracle@prd$> orapwd file=/u01/oracle/product/11.2.0/dbs/orapwfp password=oracle
步驟三、創建初始化參數文件
我是copy的其他數據庫的參數文件,這里要注意起名是有規則的 init$oracle_id.ora(你也可以利用init.ora這個模板,把名稱改為我們需要的文件)
創建文件后放在了 /u01/oracle/product/11.2.0/dbs/initfp.ora (我們這里數據庫名和實例名都是fp)
這個當中我創建了
1、/u01/oracle/oradata/fp和/u01/oracle/fast_recovery_area/fp目錄
2、mkdir -p /u01/oracle/admin/fp/adump //連續創建目錄 mkdir -p
db_name='fp' memory_target=1G processes = 150 audit_file_dest='/u01/oracle/admin/fp/adump' audit_trail ='db' db_block_size=8192 db_domain='oracle.com' db_recovery_file_dest='/u01/oracle/fast_recovery_area' db_recovery_file_dest_size=2G diagnostic_dest='/u01/oracle' dispatchers='(PROTOCOL=TCP) (SERVICE=test1XDB)' open_cursors=300 remote_login_passwordfile='EXCLUSIVE' undo_tablespace='UNDOTBS1' # You may want to ensure that control files are created on separate physical # devices control_files =('/u01/oracle/oradata/fp/control01.ctl','/u01/oracle/fast_recovery_area/fp/control02.ctl') compatible ='11.2.0.4.0'
注意:control01.ctl,.....control02.ctl....等 control_files這里根據需求填寫多個控制文件路徑,這個文件不需要事先創建,指定即可路已經和文件名即可,
在創建數據庫時會自動創建指定的文件,control01.ctl只需要指定目錄即可,默認如果沒有會自動創建
步驟四、創建服務器動態參數文件spfile(我們利用pfile文件來創建)
oracle@prd:/home/oracle$>export ORACLE_SID=fp oracle@prd:/home/oracle$>echo $ORACLE_SID oracle@prd:/home/oracle$sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Sat Mar 19 02:17:35 2022 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> create spfile from pfile='/u02/oracle/product/11.2.0/dbs/initfp.ora'; //創建spfile,不用啟動數據庫。
//initfp.ora文件是從init.ora
步驟五、開始啟動第一階段,nomount階段
idle> startup nomount ORACLE instance started. Total System Global Area 313159680 bytes Fixed Size 2175328 bytes Variable Size 213913248 bytes Database Buffers 92274688 bytes Redo Buffers 4796416 bytes //因為你當前的環境變量以及實例文件都能找到,所以你startup nomount可以不指定參數文件 //Oracle根據參數文件的內容,創建了instance,分配了相應的sga內存區域,啟動了相關的后台進程 //觀察告警日志文件(alert_fp.log),可以看到這一階段的啟動過程:讀取參數文件,利用相關參數啟動實例 [root@rac-12c-2 ~]# locate alert_fp.log /u01/oracle/diag/rdbms/fp/fp/trace/alert_fp.log //進程的啟動信息會在alert_fp_log中有顯示,我這里直接用了現成啟動好的實例,看下他們的進程信息 SQL>set line 9999;
SQL> select addr,pid,spid,username,program from v$process; ADDR PID SPID USERNAME PROGRAM ---------------- ---------- ------------------------------------------------------------------------ --------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------ 00000018E14C2790 1 PSEUDO 000000195142CCE8 2 7234 oracle oracle@rac-12c-2 (PMON) 000000190143EEB8 3 7236 oracle oracle@rac-12c-2 (PSP0) 00000018F145B7C8 4 7241 oracle oracle@rac-12c-2 (VKTM) 00000018E14C3848 5 7245 oracle oracle@rac-12c-2 (GEN0) 000000195142DDA0 6 7247 oracle oracle@rac-12c-2 (DIAG) 000000190143FF70 7 7249 oracle oracle@rac-12c-2 (DBRM) 00000018F145C880 8 7251 oracle oracle@rac-12c-2 (DIA0) 00000018E14C4900 9 7253 oracle oracle@rac-12c-2 (MMAN) 000000195142EE58 10 7255 oracle oracle@rac-12c-2 (DBW0) 0000001901441028 11 7257 oracle oracle@rac-12c-2 (DBW1) ADDR PID SPID USERNAME PROGRAM ---------------- ---------- ------------------------------------------------------------------------ --------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------ 00000018F145D938 12 7259 oracle oracle@rac-12c-2 (LGWR) 00000018E14C59B8 13 7261 oracle oracle@rac-12c-2 (CKPT) 000000195142FF10 14 7263 oracle oracle@rac-12c-2 (SMON) 00000019014420E0 15 7265 oracle oracle@rac-12c-2 (RECO) 00000018F145E9F0 16 7267 oracle oracle@rac-12c-2 (MMON) 00000018E14C6A70 17 7269 oracle oracle@rac-12c-2 (MMNL) 0000001951430FC8 18 7271 oracle oracle@rac-12c-2 (D000) 0000001901443198 19 7273 oracle oracle@rac-12c-2 (S000) 00000018F145FAA8 20 109850 oracle oracle@rac-12c-2 (W000) 00000018E14C7B28 21 7322 oracle oracle@rac-12c-2 (QMNC) 0000001951432080 22 7336 oracle oracle@rac-12c-2 (CJQ0) ADDR PID SPID USERNAME PROGRAM ---------------- ---------- ------------------------------------------------------------------------ --------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------ 0000001901444250 23 108877 oracle oracle@rac-12c-2 (J000) 00000018F1460B60 24 109927 oracle oracle@rac-12c-2 (J001) 00000018E14C8BE0 25 107377 oracle oracle@rac-12c-2 0000001951433138 26 107379 oracle oracle@rac-12c-2 00000018E14CAD50 33 109950 oracle oracle@rac-12c-2 (TNS V1-V3) 0000001901448530 39 7370 oracle oracle@rac-12c-2 (SMCO) 00000018E14CCEC0 41 7391 oracle oracle@rac-12c-2 (Q000) 0000001951437418 42 7393 oracle oracle@rac-12c-2 (Q001) 30 rows selected.
步驟六、把數據庫啟動到nomount狀態,這種狀態才可以創建具體的數據庫
為創建數據庫,我們之前創建了必要的目錄,滿足數據文件、控制文件、日志文件等路徑需求等,包括有:
1、存放控制文件contorl01.ctl的目錄
mkdir /u01/oracle/oradata/fp
2、存放控制文件control02.ctl的目錄
mkdir /u01/oracle/fast_recovery_area/fp
3、create log dir 創建存放log的目錄
mkdir -p /u01/oracle/admin/fp/{a,dp}dump
idle> startup nomount ORACLE instance started. Total System Global Area 313159680 bytes Fixed Size 2175328 bytes Variable Size 213913248 bytes Database Buffers 92274688 bytes Redo Buffers 4796416 bytes
步驟七、創建數據庫(下面是核心語句)
create database fp USER SYS IDENTIFIED BY oracle USER SYSTEM IDENTIFIED BY oracle LOGFILE GROUP 1 ('/u01/oracle/oradata/fp/redo01.log') SIZE 100M, GROUP 2 ('/u01/oracle/oradata/fp/redo02.log') SIZE 100M, GROUP 3 ('/u01/oracle/oradata/fp/redo03.log') SIZE 100M MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXLOGHISTORY 1 MAXDATAFILES 100 MAXINSTANCES 1 CHARACTER SET AL32UTF8 ###由於此次需求是要把A庫的業務表導出到B庫業務表(A庫和B庫分別在不同的機器上獨立運行,所以需要注意字符集設置) DATAFILE '/u01/oracle/oradata/fp/system01.dbf' SIZE 350M REUSE AUTOEXTEND ON NEXT 10240K EXTENT MANAGEMENT LOCAL SYSAUX DATAFILE '/u01/oracle/oradata/fp/sysaux01.dbf' SIZE 325M REUSE DEFAULT TABLESPACE SHP ###業務表空間 DATAFILE '/u01/oracle/oradata/fp/shp01.dbf' SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED DEFAULT TEMPORARY TABLESPACE temp TEMPFILE '/u01/oracle/oradata/fp/temp01.dbf' SIZE 20M REUSE UNDO TABLESPACE undotbs1 DATAFILE '/u01/oracle/oradata/fp/undotbs1.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
//把該語句保存為 createdatabase.sql
//執行:
SQL> @/home/oracle/createdatabase.sql
Database created.
//一旦執行之后,你就會發現當前數據庫立即處於open狀態了。(oracle啟動三階段 nomount,mount,open)
//執行這個語句也可以直接在控制台上直接執行。
步驟八、創建數據字典等,在控制台直接執行
SQL>@?/rdbms/admin/catalog SQL>@?/rdbms/admin/catproc SQL>conn system/oracle SQL>@?/sqlplus/admin/pupbld SQL>conn / as sysdba
步驟九、創建兩個數據庫文件與用戶的關系,同時創建用戶
SQL> CREATE USER yyshp IDENTIFIED BY yySh12 DEFAULT TABLESPACE SHFP TEMPORARY TABLESPACE temp; User created. SQL> grant connect,resource,dba to yyshp; Grant succeeded. SQL> grant create session,create table,unlimited tablespace to yyshp; Grant succeeded. SQL> grant create table to yyshp; Grant succeeded. SQL> grant create tablespace to yyshp; Grant succeeded. SQL> grant create view to yyshp; Grant succeeded. SQL> grant create session to yyshp; Grant succeeded. SQL> grant select any table TO yyshp; Grant succeeded. SQL> grant unlimited tablespace to yyshp; Grant succeeded.
步驟十、創建普通用戶默認表空間
CREATE TABLESPACE users DATAFILE '/u01/app/oracle/oradata/test/user01.dbf' SIZE 100M AUTOEXTEND ON; ALTER DATABASE DEFAULT TABLESPACE users; col file_name for a45 col tablespace_name for a10
步驟十一、需要設置網絡配置、連接串
1、修改listener.ora 2、修改tnsnames.ora
//他們兩個文件配合使用 oracle@prd:/home/oracle$cat /u01/oracle/product/11.2.0/network/admin/tnsnames.ora # tnsnames.ora Network Configuration File: /u01/oracle/product/11.2.0/network/admin/tnsnames.ora # Generated by Oracle configuration tools. //添加fp相關信息 fp= (DESCRIPTION = (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = fp) ) ) PRD = (DESCRIPTION = (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prd) ) ) oracle@prd:/home/oracle$cat /u01/oracle/product/11.2.0/network/admin/listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = prd) (SID_NAME = prd) (ORACLE_HOME=/u01/oracle/product/11.2.0) ) //添加fp的相關信息 (SID_DESC= (GLOBAL_DBNAME=fp) (ORACLE_HOME=/u01/oracle/product/11.2.0) (SID_NAME=fp) ) MYLISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.121.51.50)(PORT = 1522)) ) )
創建后查看相關的目錄和內容
//在數據庫中查詢 SQL> select file_name,tablespace_name from dba_data_files; FILE_NAME TABLESPACE_NAME ------------------------------------------------------------------------------------------ /u02/oracle/oradata/fp/system01.dbf SYSTEM /u02/oracle/oradata/fp/sysaux01.dbf SYSAUX /u02/oracle/oradata/fp/undotbs1.dbf UNDOTBS1 /u02/oracle/oradata/fp/shp01.dbf SHP //業務表 //進入目錄查詢 [root@rac-12c-2 ~]# ll /u01/oracle/oradata/fp/ total 3936260 drwxr-xr-x 2 oracle oinstall 10 Dec 2 10:23 archive -rw-r----- 1 oracle oinstall 9519104 Mar 19 12:30 control01.ctl-rw-r----- 1 oracle oinstall 52436992 Mar 19 01:59 fp2.dbf -rw-r----- 1 oracle oinstall 52436992 Mar 19 01:59 fp.dbf -rw-r----- 1 oracle oinstall 52436992 Dec 1 20:37 fp_temp.dbf -rw-r----- 1 oracle oinstall 104858112 Mar 19 12:29 redo01.log -rw-r----- 1 oracle oinstall 104858112 Mar 17 02:30 redo02.log -rw-r----- 1 oracle oinstall 104858112 Mar 18 03:10 redo03.log -rw-r----- 1 oracle oinstall 524296192 Mar 18 03:15 shp01.dbf -rw-r----- 1 oracle oinstall 340795392 Mar 19 12:20 sysaux01.dbf -rw-r----- 1 oracle oinstall 367009792 Mar 19 12:25 system01.dbf -rw-r----- 1 oracle oinstall 20979712 Mar 19 02:30 temp01.dbf -rw-r----- 1 oracle oinstall 209723392 Mar 19 12:25 undotbs1.dbf -rw-r----- 1 oracle oinstall 1073750016 Mar 19 01:59 users01.dbf -rw-r----- 1 oracle oinstall 1073750016 Mar 19 01:59 users02.dbf
[root@rac-12c-2 ~]# ll /u01/oracle/fast_recovery_area/fp/
total 19040
-rw-r----- 1 oracle oinstall 9519104 Mar 19 12:35 control02.ctl
補充
我這里以數據庫是fp,sid=fp2為例,講解
oracle參數文件 1.初始化參數文件 oracle的初始化參數文件分為spfilefp2.ora(spfile+sid+.ora)、spfile.ora、initfp2.ora(init+sid+.ora)。 2、pfle(Parameter File)靜態參數文件: 文本文件,必須通過編輯器修改參數; 修改參數后,需重啟實例生效; pfile 參數文件可以不放在數據庫服務器上 ; 命名方式:init + SID.ora 。 3、spfile(System Parameter File)動態參數文件: 二進制文件,無法通過編輯器修改; Linux 下 strings 可以查看; 必須放在Database Server 指定路徑下; 命名方式:spfile + SID.ora 。 4、pfile 和 spfile 可以相互生成: SQL>create pfile from spfile //通過spfile創建pfile文件 SQL>create pfile='/u01/oracle/product/11.2.0/dbs/spfilefp2.ora' from spfile; //指定文件和路徑 SQL>create spfile from pfile//通過pfile創建spfile文件 SQL>create spfile from pfile='/u01/oracle/product/11.2.0/dbs/initfp2.ora' //指定文件和路徑 注:使用 spfile 啟動后不能在線生成spfile,ORA-32002: 無法創建已由實例使用的SPFILE
可以通過當前內存參數生成 pfile 和 spfile(11g 新特性): SQL>create pfile from memory; SQL>create spfile from memory; 5、當oracle啟動時,初始化參數文件的加載順序為:spfilefp2.ora、spfile.ora、initfp2.ora。 有了spfile,pfile一般留做備用,特殊情況也可以使用 pfile 啟動,命令如下: SQL> startup pfile=$ORACLE_HOME/dbs/initfp.ora