Oracle筆記(八)

[第三章 Oracle在Unix下安裝]

一、創建數據庫安裝用戶

*1、Oracle在Unix下運行平臺:
 。Sun Solaris(Sun SPARC)(Solaris是Oracle目前運行最多的平臺)
 。HP-UX
 。IBM-AIX
 。COMPAQ Tru64-Unix(ALPHA)
 。SCO UNIX(PC)
 。Linux(PC)
 。SGI
 // 前三種平臺上運行的最多

*2、用戶組名:dba(Oracle7, Oracle8)
  oinstall(Oracle8i, Oracle9i)

*3、在Unix下,與用戶所在組有關的文件:/etc/group
如果要加新組就在此文件中新加一行,如:
oinstall::20:oracle,oraweb
// gid < 1024,組號越大,權限越小。

*4、與用戶有關的文件:/etc/passwd
oracle8i:x:30:20:Oracle8i for Unix:/u01/app/oracle/product/8.1.7:/bin/sh
用戶名:x:用戶號:組號:描述(可省略):文件系統名稱:shell

//# admintool  Sun的圖形管理工具
//# sam   HP-UX
//# scoadmin  SCO UNIX

二、創建Oracle數據庫安裝目錄
在Unix下安裝數據庫,最好使用Oracle建議設置的標準目錄:
OFA(Optimal Flexible Architecture):將Oracle的系統文件與數據庫文件分別存儲。

OFA要求創建兩個目錄:
$ORACLE_BASE
$ORACLE_HOME

假設目錄爲:/u01/app/oracle/product/8.1.7
則:$ORACLE_BASE = /u01/app/oracle    // 這個目錄下的各個子目錄存放數據庫文件
$ORACLE_HOME = /u01/app/oracle/product/8.1.7  // 這個目錄存儲系統文件

例如:$ORACLE_BASE/oradata存儲數據文件

$df -k // 查看文件系統的使用率,如果超過80%,就不要再繼續添加文件,否則文件系統將十分慢

#mkdir app
# cd app
# mkdir oracle
...
# mkdir 8.1.7

# chgrp -R oinstall oracle //-R包括子目錄,將oracle目錄的屬組改爲oinstall組
# chown -R oracle oracle  // 將oracle(第二個)目錄的屬主改爲oracle用戶

# ls -al

三、編輯安裝用戶的.profile文件,定義操作系統環境變量

NLS_LANG,Oracle用戶在安裝時默認安裝爲與操作系統一致的字符集,因此要想在英文版本的操作系統上安裝支持中文的Oracle時,務必要設置這個環境變量。

#vi .profile // 內容如下:
ORACLE_BASE=/u01/app/oracle
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/8.1.7
export ORACLE_HOME
ORACLE_SID=ora8i  // 數據庫實例名
export ORACLE_SID
ORACLE_TERM=sun  //終端類型,SCO爲vt100,防止字符混亂
export ORACLE_TERM
NLS_LANG="simplified chinese"_china.zhs16gbk (oracle8.0以後)
       .zhs16cgb231280(oracle 8以前,爲保持數據兼容,如要導入oracle7的數據,建議選擇這一個)
export NLS_LANG
LD_LIBRARY_PATH=/usr/lib:$ORACLE_HOME/lib
export LD_LIBRARY_PATH
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export ORA_NLS33
TMPDIR=/var/tmp
export TMPDIR
PATH=/bin:$ORACLE_HOME/BIN:/usr/sbin;/opt/bin
export PATH

// .profile文件應該放在$ORACLE_HOME目錄下。

四、配置操作系統核心

五、安裝過程:
在安裝光盤下運行:$./runInstall


[第四章 創建Oracle數據庫、表空間管理、回退段管理]

一、創建數據庫
1、確定數據庫名、實例名、服務名
數據庫名參數:db_name = prod
數據庫實例名參數:instance_name = prod
域名:db_domain
數據庫服務名參數:service_names = prod[.域名] //服務名等於:數據庫名.域名,爲了省事,一般不要域名。

2、創建新數據庫的參數文件:init.ora

需要修改的參數:
db_name
instance_name
service_names
control_files : d:/oracle/oradata/prod/... 01 02 03
background_dump_dest: 後臺信息跟蹤文件的存儲位置d:/oracle/oradata/prod/bdump
user_dump_dest: 用戶信息跟蹤文件的存儲位置d:/Oracle/oradata/prod/udump
sql_trace = true


3、設置操作系統參數:主要是設置ORACLE_SID選擇數據庫實例
在Unix下設置實例的方法:
$ORACLE_SID=ora8i
$export ORACLE_SID

換成另外一個:
$ORACLE_SID=prod
$export ORACLE_SID


在Windows NT/2000下,有一個實例寫在註冊表中,如果要進入第二個數據庫,設置方法如下:
C:/> set ORACLE_SID=ora8i
C:/> set ORACLE_SID=prod

// 爲了不致發生混亂,每次在使用數據庫之前,進行上述設置。

4、創建數據庫實例
語法:C:/>oradim -new -sid [實例名] -intpwd [口令] -startmode auto -pfile [數據庫參數文件名稱及路徑]

 。紅色部分需要用戶確定
 。startmode: auto, manual
 。參數文件名稱及路徑:
 Unix:
  /u01/app/oracle/admin/db_name/pfile/initSID.ora
  /u01/app/oracle/product/8.1.7/dbs/initSID.ora // 這是oracle直接讀取的參數文件
 // 在Unix中上面的dbs目錄是pfile目錄的symbol link,即兩上文件是同一個文件。
 Windows:
  d:/oracle/admin/db_name/pfile/init.ora
  d:/oracle/ora81/database/initSID.ora   // 這是oracle直接讀取的參數文件
 /*第二個文件指向第一個文件,上面這個文件可以隨便放到什麼位置,只要在第二個文件中通過IFILE指明瞭其位置,也可以直接用第一個文件的內容替換第二個文件的內容。*/
 
[*] 刪除數據庫實例方法:
D:/> oradim -delete -sid [實例名]
 
最後的命令格式爲:
D:/> oradim -new -sid prod -intpwd prod -startmode auto -pfile d:/oracle/ora81/database/initprod.ora

[如果執行了set oracle_sid=prod後,仍然不能通過svrmgrl連接到internal用戶,請檢查是否在註冊表中設置了local串。]

5、創建數據庫:
SVRMGR> startup nomount
SVRMGR> create database prod
  logfile group 1('d:/oracle/oradata/prod/log1a.log',
     'd:/oracle/oradata/prod/log1b.log') size 2m,
      group 2('d:/oracle/oradata/prod/log2a.log',
     'd:/oracle/oradata/prod/log2b.log') size 2m
  datafile 'd:/oracle/oradata/prod system01.dbf' size 200m
   autoextend on next 10m maxsize 1000m
  character set zhs16gbk;

[2002.05.15]
//=====================================================================================================================
 
6、加載數據字典:
(1) 加載常用的數據字典:
SVRMGR>@d:/Oracle/ora81/rdbms/admin/catalog
SVRMGR>@/u01/app/oracle/product/8.1.7/rdbms/admin/catalog

(2) 加載PL/SQL程序包:
SVRMGR>@d:/Oracle/ora81/rdbms/admin/catproc

(3) 加載Java程序包:
SVRMGR> @d:/oracle/ora8i/javavm/install/initjvm

7、網絡配置:
配置tnsnames.ora文件
d:/oracle]ora81/network/admin/tnsnames.ora

8、以system登錄數據庫,加載資源文件profile:
SQL> @d:/oracle/ora81/sqlplus/admin/pupbld.sql

//如果不運行這個sql程序,普通用戶登錄時會提示錯誤。

[C*] 對於新數據庫,監聽程序不用配置,如果運行中出現沒有監聽,則運行:
D:/> lsnrctl status
查看相應的數據庫是否已啓動監聽。如果沒有啓動監聽,運行:
D:/> lsnrctl stop
D:/> lsnrctl start
重啓監聽程序。

如果在SQL*Plus中登錄數據庫時,提示service_name丟失,則重啓數據庫。

SQL> select name from v$database; //查詢當前數據庫

[C*]在Unix下:$dbassist

在Windows NT/2000下(oracle8i):
程序組-> Database administration-> Database Configration Assistant

可以刪除已創建的數據庫(服務、文件)。

通過提示符下命令:oradim -delete -sid prod -srvc oracleserviceprod


SVRMGR> show parameter license   // 查看最大會話數,0表示沒有限制

共享服務器連接模式:
最大  缺省    說明
65534 254    最大數據庫文件數
254  32    最大日誌文件數
5  2    最大日誌成員數


二、表空間管理

SQL> select * from dba_free_space;  // 查詢表空間是否存在碎片

1、創建表空間
(1)語法:SQL> Create Tablespace tablespacename
   Datafile 'filespec' Attributes
   Default Storage
   Online/offline;


(2)實例:
SQL> Create tablespace sales_2002
 datafile
 'D:/oracle/oradata/ora8i/sales_2002_01.dbf' size 100m,
 'D:/Oracle/oradata/ora8i/sales_2002_02.dbf' size 100m
 autoextend on next 100m maxsize unlimited,   // 每個文件都可以加上這一行,表空間的擴展屬性
 'D:/oracle/oradata/ora8i/sales_2002_03.dbf' size 100m
 default storage(initial 100k
     next 100k
     minextents 1
     maxextents unlimited
     pctincrease 0);
    
    
(3)查詢表空間與數據文件對應關係:
SQL> select tablespace_name, bytes, blocks, autoextensible, file_name from dba_data_files;

(4)創建臨時表空間:在創建表空間時增加臨時表空間關鍵字:temporary

SQL> Create tablespace temp_data datafile 'd:/oracle/oradata/ora8i/acc01.dbf' reuse
default storage(initial 100k next 100k minextents 1 maxextents unlimited pctincrease 0)
TEMPORARY;

說明:A.上例中的reuse指在相應的目錄已經存在一個acc01.dbf(大小已經確定,例如一個被刪除的表空間,但物理文件未被刪除),則按這個文件的大小新建文件,內容將被覆蓋。如果文件不存在,需要使用size來確定大小。

B. 臨時表空間用於排序,在創建用戶時可以爲用戶指定專用的臨時表空間。臨時表空間不得用於創建永久性實體(例如表)。
SQL> create table aa(c1 number(10)) tablespace sales_2002;
SQL> create table bb(c1 number(10)) tablespace temp_data;


C. 查詢表空間類型:SQL> select tablespace_name, contents from dba_tablespaces;

2、改變表空間:

(1)爲表空間增加數據文件:
SQL> Alter tablespace sales_2002 ADD
 datafile
 'd:/oracle/oradata/ora8i/sales_2002_04.dbf' size 10m,
 'd:/oracle/oradata/ora8i/sales_2002_05.dbf' size 10m
 autoextend on next 50m maxsize 1000m;

(2) 將數據文件從一個磁盤移動到另一個磁盤
 。將表空間脫機offline
  SQL> Alter tablespace sales_2002 offline;
 。物理移動:將要移動的表空間文件複製或移動到目的磁盤
 。邏輯移動
  SQL> alter tablespace sales_2002
   rename datafile
   'd:/oracle/oradata/ora8i/sales_2002_04.dbf',
   'd:/oracle/oradata/ora8i/sales_2002_05.dbf'
   to
   'c:/sales_2002_04.dbf',
   'c:/sales_2002.05.dbf';
 。將表空間聯機online
  SQL> alter tablespace sales_2002 online;
 
其中,system表空間數據文件不得移動。

(3) 修改表空間的缺省存儲參數

SQL> alter tablespace sales_2002
 default storage(
 initial 1m
 next 1m
 minextents 2
 maxextents 200
 pctincrease 50);
 
3、刪除表空間
SQL> Drop tablespace 表空間名;  // 空的表空間。
SQL> Drop tablespace 表空間名 INCLUDING CONTENTS;  // 如果表空間中已經建表,必須加Including contents參數。

刪除表空間後,再物理刪除相應的表空間文件,一定要確認是否刪除了正確的物理文件,在UNIX下,任何文件對root用戶來說都沒有保護措施,可以隨便刪除。

三、Oracle8i啓用本地化管理(Locally Managed Tablespaces):
表空間類型:數據字典管理表空間,本地化管理表空間

本地化管理表空間自動消除磁盤碎片

SQL> create tablespace account datafile 'd:/oracle/oradata/ora8i/acc01.dbf' 10m
 default storage(initial 40k next 40k minextents 1 maxextents 121 pctincrease 0);
 
SQL> Alter database datafile 'd:/oracle/oradata/ora8i/acc01.dbf' resize 50m;

SQL> Alter tablespace account coalesce;  // 磁盤碎片合併命令。

1、區大小相同
SQL> Create tablespace account
 datafile 'd:/oracle/oradata/ora8i/acc01.dbf' size 10m,
 'd:/oracle/oradata/ora8i/acc02.dbf' size 10m
  extent management local uniform size 50k;
// extent management local: 區本地化管理;uniform:每個區大小相同,如果不指定size,size默認是1m

對於實行本地化管理的數據文件仍然可以使用autoextend on next, maxsize等參數。

查詢表空間類型及區管理方式:
SQL> select tablespace_name, extent_management, allocation_type from dba_tablespaces;

2、區大小由系統自動分配相同(系統缺省方式)
SQL> Create tablespace finance
 datafile
 'd:/oracle/oradata/ora8i/fina01.dbf' size 10m
 extent management local autoallocate;   // 缺省狀況是autoallocate,如果只寫extent management local。

<=等價=>
SQL> Create tablespace finance
 datafile
 'd:/oracle/oradata/ora8i/fina01.dbf' size 10m
 extent management local;
 
表大小  區大小
64K   64K
1m   1m
64m   8m
1000m  64m

3、創建本地化管理臨時表空間
SQL> Create temporary tablespace temp1
 tempfile
 'd:/oracle/oradata/ora8i/temp1_01.dbf' size 10m
 extent management local uniform size 10k;
 
[臨時表空間不得使用AutoAllocate選項,就算不寫uniform,默認也是uniform]
 
SQL> select tablespace_name, extent_management, allocation_type from dba_tablespaces;

[2002.05.16]
//=====================================================================================================================
四、回退段管理
1、創建回退段:rbs

[*]手動創建數據庫後,必須先創建回退段表空間:
SQL> create tablespace rbs
 datafile 'd:/oracle/oradata/ora8i/rbs01.dbf' size 50m;

[*]創建回退段:
SQL> Create rollback segment rs01
 tablespace rbs
 storage(initial 40k next 40k
 minextents 2      // 最少是2,不能是1
 maxextents 121
 optimal 120k);  // optimal值的大小至少比2個區的大小要大才有意義,在本例中要大於80K。
 
回退段的工作過程:(80K不夠用了)擴張->(使用結束)回縮到Optimal值 ->(120K不夠用了)再擴張。

新建回退段的缺省狀態是offline.

SQL> Create rollback segment rs02 tablespace rbs; // 如果不加storage參數,則各參數取缺省值(即表空間的相關值)

[*]查詢回退段信息:
SQL> select segment_name, tablespace_name, status from dba_rollback_segs;

[*]回退段的設計方法:
A. 使用create rollback segment 創建多個回退段,至少四個事務平均一個回退段
B. 修改參數文件,將創建的回退段寫入下列參數:rollback_segments=(rs01,rs02,...)
C. 重新啓動數據庫

[*]創建公共回退段:
SQL> create public rollback segment rs10 tablespace rbs;


修改公共回退段,使公共回退段online:
SQL> alter rollback segment rs10 online;

公共回退段不需要修改參數文件即可online。

查詢:SQL> select segment_name, tablespace_name, status, owner from dba_rollback_segs;


2、修改回退段

SQL> Alter rollback segment 回退段名 online/offline; //對於私有回退段來說,只是臨時修改,下次數據庫啓動時,只有參數文件中的回退段是online


3、刪除回退段
A. offline
B. SQL> drop rollback segment 段名;
C. 如果是私有回退段,需要將其從參數文件中去掉。

// 無論是公共回退段還是私有回退段,都是系統共用的回退段。即作用相同。

[第五章 Oracle 數據庫用戶管理]

// PowerPoint講義:DBA_用戶.PPT

一、創建用戶的Profile文件
SQL> create profile student limit  // student爲資源文件名
 FAILED_LOGIN_ATTEMPTS  3  //指定鎖定用戶的登錄失敗次數
 PASSWORD_LOCK_TIME 5  //指定用戶被鎖定天數
 PASSWORD_LIFE_TIME 30  //指定口令可用天數
 ...
 [參考講義:P6-P7]

二、創建用戶
SQL> Create User username
 Identified by password
 Default Tablespace tablespace
 Temporary Tablespace tablespace
 Profile profile
 Quota integer/unlimited on tablespace;

例:
SQL> Create user acc01
 identified by acc01   // 如果密碼是數字,請用雙引號括起來
 default tablespace account
 temporary tablespace temp
 profile default
 quota 50m on account;
SQL> grant connect, resource to acc01;

[*] 查詢用戶缺省表空間、臨時表空間
SQL> select username, default_tablespace, temporary_tablespace from dba_users;

[*] 查詢系統資源文件名:
SQL> select * from dba_profiles;
資源文件類似表,一旦創建就會保存在數據庫中。

/********************************************************************************************
SQL> select username, profile, default_tablespace, temporary_tablespace from dba_users;

SQL> create profile common limit
 failed_login_attempts 5
 idle_time 5;
 
SQL> Alter user acc01 profile common;

**********************************************************************************************/

三、修改用戶:
SQL> Alter User 用戶名
 Identified 口令
 Default Tablespace tablespace
 Temporary Tablespace tablespace
 Profile profile
 Quota integer/unlimited on tablespace;
 
1、修改口令字:
SQL>Alter user acc01 identified by "12345";

2、修改用戶缺省表空間:
SQL> Alter user acc01 default tablespace users;

3、修改用戶臨時表空間
SQL> Alter user acc01 temporary tablespace temp_data;

4、強制用戶修改口令字:
SQL> Alter user acc01 password expire;

5、將用戶加鎖
SQL> Alter user acc01 account lock;  // 加鎖
SQL> Alter user acc01 account unlock;  // 解鎖

四、刪除用戶
SQL>drop user 用戶名;  //用戶沒有建任何實體
SQL> drop user 用戶名 CASCADE;  // 將用戶及其所建實體全部刪除

*1. 當前正連接的用戶不得刪除。


五、監視用戶:
1、查詢用戶會話信息:
SQL> select username, sid, serial#, machine from v$session;

2、刪除用戶會話信息:
SQL> Alter system kill session 'sid, serial#';

3、查詢用戶SQL語句:
SQL> select user_name, sql_text from v$open_cursor;


/***************************************************************************************************************************
SQL> ALTER SESSION SET
 NLS_LANGUAGE= 'SIMPLIFIED CHINESE'
 NLS_TERRITORY= 'CHINA'
 NLS_CURRENCY= 'RMB'
 NLS_ISO_CURRENCY= 'CHINA'
 NLS_NUMERIC_CHARACTERS= '.,'
 NLS_CALENDAR= 'GREGORIAN'
 NLS_DATE_FORMAT= 'yyyy-mm-dd dy'
 NLS_DATE_LANGUAGE= 'SIMPLIFIED CHINESE' 
 NLS_SORT= 'BINARY'
 TIME_ZONE= '+08:00'
 NLS_DUAL_CURRENCY = 'RMB'
 NLS_TIME_FORMAT = 'HH.MI.SSXFF AM'
 NLS_TIMESTAMP_FORMAT = 'DD-MON-RR HH.MI.SSXFF AM'
 NLS_TIME_TZ_FORMAT = 'HH.MI.SSXFF AM TZH:TZM'
 NLS_TIMESTAMP_TZ_FORMAT = 'DD-MON-RR HH.MI.SSXFF AM TZH:TZM'
***************************************************************************************************************************/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章