日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

如何進行 Oracle 數(shù)據(jù)庫維護 | 實用資料

 yi321yi 2020-05-24

很詳細、實用的資料,日常運維可用到。歡迎收藏。

1. Oracle 數(shù)據(jù)庫啟動與關(guān)閉

1.1 打開和關(guān)閉數(shù)據(jù)庫 (手工)

1.1.1 sqlplus 連接

#su - oracle

#sqlplus /nolog

1.1.2 打開數(shù)據(jù)庫

sql> connect sys/oracle as sysdba;

sql> startup [nomount|mount]

等待十幾秒左右,當看到

oracle instances started,

database mounted,

database opened 的時候,oracle 數(shù)據(jù)庫打開成功

備注:打開數(shù)據(jù)庫 startup 可帶三個參數(shù),分別是

SQL > startup nomount 僅啟動 instances

SQL > startup mount 啟動 instances,連上(mount)數(shù)據(jù)庫

SQL > startup normal 啟動 instances,連上(mount)數(shù)據(jù)庫(推薦)

打開(open)數(shù)據(jù)庫

startup 缺省參數(shù)是 normal

1.1.3 啟動 oracle listener

#su - oracle

#lsnrctl start

如果出錯檢查環(huán)境變量是否設(shè)好,及 lsnrctl 文件的內(nèi)容和執(zhí)行屬性。

1.1.4 關(guān)閉 oracle listener

#su - oracle

#lsnrctl stop

1.1.5 關(guān)閉數(shù)據(jù)庫

sql> connect sys/oracle as sysdba;

sql> shutdown 關(guān)閉數(shù)據(jù)庫(推薦)

等待幾秒左右,當看到

database closed

database dismounted

oracle instances shut down 的時候,oracle 數(shù)據(jù)庫關(guān)閉成功

備注:關(guān)閉數(shù)據(jù)庫 shutdown可帶三個參數(shù),分別是

shutdown 缺省參數(shù)是 normal

2. 數(shù)據(jù)庫備份

2.1 冷備份

關(guān)閉數(shù)據(jù)庫時作的備份稱為冷備份。

關(guān)閉數(shù)據(jù)庫,將所有和本實例有關(guān)的文件,包括datafile,controlfile,redolog,archived redolog,initora.ora 等全部備份?;謴?fù)時只要將這些文件放回從前的目錄,startup數(shù)據(jù)庫即可。

數(shù)據(jù)庫處于歸檔非歸檔狀態(tài)均可。

2.2 用 exp、imp 命令做邏輯備份

EXP:

有三種主要的方式(完全、用戶、表)

1、完全:

exp system/manager buffer=64000 file=/backup/full.dmp full=y

如果要執(zhí)行完全導出,必須具有角色 EXP_FULL_DATABASE 。

2、用戶模式:

exp system/manager buffer=64000 file=/backup/bill.dmp owner=bill

這樣用戶 bill 的所有對象被輸出到文件中。

3、表模式:

exp system/manager buffer=64000 file=/backup/area.dmp owner=bill tables=area

這樣用戶 bill 的表 area 就被導出到文件中。

需要注意的參數(shù)是 Inctype,這個參數(shù)可以取一下三個值:

Complete(全備份):把數(shù)據(jù)庫中所有數(shù)據(jù)對象導出到 dump 文件中,只有具有 Exp_full_database 的用戶有使用這個參數(shù)的權(quán)限。

Incremental(增量備份):把數(shù)據(jù)庫中所有上次備份后修改的表備份出來。

Cumulative(累計備份):把數(shù)據(jù)庫中所有全備份或者累計備份以后修改的表備份出來。

IMP:

具有三種模式(完全、用戶、表)

1、完全:

imp system/manager buffer=64000 file=/backup/full.dmp full=y

如果要執(zhí)行完全導入,必須具有角色 IMP_FULL_DATABASE 。

2、用戶模式:

imp system/manager buffer=64000 file=/backup/area.dmp fromuser=bill

touser=billbak

文件中用戶 bill 的所有對象被導入到用戶billbakK 中。必須指定 fromuser、touser 參數(shù)。

3、表模式:

imp system/manager buffer=64000 file=/backup/area.dmp fromuser=bill

touser=billbak tables=area

文件中用戶 bill 的表 area 就被導入到用戶 billbak 中。

2.3 用 tar 命令做物理備份

1、#su - oracle

2、% tar cvf /dev/rmt0 .

把 oracle 路徑下所有文件備份到磁帶機上

3、% tar xvf /dev/rmt0

把備份磁帶上所有文件恢復(fù)進 oracle 當前路徑

4、% tar tvf /dev/rmt/0

查看磁帶上有些什么文件

2.4 備份控制文件

控制文件是 Oracle 數(shù)據(jù)庫中非常重要的文件。它記錄著 oracle 數(shù)據(jù)庫的物理結(jié)構(gòu)信息,比如數(shù)據(jù)文件,日值文件的數(shù)量和位置等。在數(shù)據(jù)庫啟動過程中,需要讀取控制文件。如果控制文件損壞或丟失,數(shù)據(jù)庫就無法啟動。因此,做好控制文件的備份十分重要。一般的數(shù)據(jù)庫配置都會有多個控制文件。這些控制文件是完全相同的,分別存放在不同的位置(最好在不同的磁盤上),他們之間互為備份。數(shù)據(jù)庫啟動過程中,必須保證所有控制文件都是一致的,否則數(shù)據(jù)庫不能啟動。在 oracle 數(shù)據(jù)庫的參數(shù)文件(initSid.ora)中指定控制文件的位置。如果部分控制文件損壞,可以在參數(shù)文件中去掉相應(yīng)的控制文件,即可啟動數(shù)據(jù)庫。

每次數(shù)據(jù)庫物理結(jié)構(gòu)發(fā)生改變時,必須及時備份控制文件。

$sqlplus

SQL>connect internal

SQL>alter database backup controlfile to /…/test.ctl ;

也可以把控制文件備份成腳本,在必要的時候重建控制文件

SQL>alter database backup controlfile to trace;

2.5 聯(lián)機全備份 日志備份

2.5.1 設(shè)置

ORACLE 數(shù)據(jù)庫有兩種運行方式:一是歸檔方式(ARCHIVELOG),歸檔方式的目的是當數(shù)據(jù)庫發(fā)生故障時最大限度恢復(fù)所有已提交的事物;二是不歸檔方式(NOARCHIVELOG),恢復(fù)數(shù)據(jù)庫到最近的回收點。這兩種方式將對備份方法產(chǎn)生較大的影響。

1.改變不歸檔方式為為歸檔方式

2.關(guān)閉數(shù)據(jù)庫,備份已有的數(shù)據(jù)

3.改變數(shù)據(jù)庫的運行方式是對數(shù)據(jù)庫的重要改動,所以要對數(shù)據(jù)庫做備份,對可能出現(xiàn)的問題作出保護。

4.啟動 Instance ,Mount 數(shù)據(jù)庫但不打開數(shù)據(jù)庫,來改變歸檔方式

#sqlplus

    sql>connect internal

    sql>startup mount

    sql>alter database archivelog;

5.使能自動存檔

在初始化文件 init*.ora(一般放 ORACLE 根目錄的下層目錄 dbs 下)加參數(shù):

log_archive_start=true

6.指定存檔的重做登錄文件名和存放的位置

同樣是在初始化文件 init*.ora 中加入下面的參數(shù):

log_archive_format=%S.arc

log_archive_dest=/arch12/arch (arch12 是日志文件存放的目錄)

7.關(guān)閉數(shù)據(jù)庫,重新啟動數(shù)據(jù)庫,歸檔方式轉(zhuǎn)換完成。

8.可用 archive log list 查看狀態(tài),去除歸檔日志功能的命令為 alter database

noarchivelog。

2.5.2 步驟

聯(lián)機全備份:

數(shù)據(jù)庫處于 open 狀態(tài),依次對各個表空間備份

sqlplus '/ as sysdba'

SQL>alter tablespace system begin backup;

復(fù)制此 tablespace 各個 datafile

SQL>alter tablespace system end backup;

注意:begin backup 是對 tablespace 凍結(jié)寫入,end backup 是解除凍結(jié),因此復(fù)制 datafile 的過程不宜過長

備份 controlfile

SQL>alter database backup controlfile to ……. ;

日志備份:

sqlplus '/ as sysdba'

SQL>alter system archive log stop;

移去日志目錄下的所有 archived redolog

SQL>alter system archive log start;

2.5.3 恢復(fù)

數(shù)據(jù)庫處于 shutdown 狀態(tài)

2.5.3.1 磁盤全部損壞,僅保存上次聯(lián)機全備份和每天日志備份

這是最壞情況

解決硬件故障,配置系統(tǒng)軟件及環(huán)境

oracle 用戶,將全備份和日志備份轉(zhuǎn)移至相應(yīng)目錄,根據(jù) initSid.ora中 controlfile 的配置,將備份控制文件復(fù)制到響應(yīng)目錄下

sqlplus '/ as sysdba'

SQL>startup mount

SQL>recover database until cancel using backup controlfile;

逐個確認待恢復(fù)的 archived redolog,待最后一個完成后,鍵入 cancel,使恢復(fù)結(jié)束

SQL>alter database open resetlogs;

注意:由于日志已經(jīng)重置,所以應(yīng)盡快做一次聯(lián)機全備份

2.5.3.2 丟失某數(shù)據(jù)文件

只要將此文件從上次聯(lián)機全備份中復(fù)制至其目錄,并將自上次聯(lián)機全備份以來所有日志備份移至歸檔目錄

sqlplus '/ as sysdba'

SQL>startup mount

SQL>alter database recover datafile path/file ;或者簡單些 recover database;

SQL>alter database open;

2.5.3.3 文件損壞或丟失,又無備份,

這種情況只能將此文件脫機,將數(shù)據(jù) exp 出來,重建表空間,再 imp 進去

sqlplus '/ as sysdba'

SQL>connect internal

SQL>startup mount

SQL>alter database datafile path/file offline;

SQL>alter database open;

2.5.4 注意要點

無論有多少把握,恢復(fù)前先做冷備份,此為第一原則。不這樣做,便是無路可退,一旦失誤,后果十分嚴重。

1.rollback 段損壞

這是非常嚴重的問題,可在 initora.ora 中寫入_corrupted_rollback_segments=(rxx),啟動時避開損壞的 rollback段,這只是權(quán)宜之計。如數(shù)據(jù)庫處于 archivelog,應(yīng)從上一次全備份起利用備份的日志進行恢復(fù);如數(shù)據(jù)庫處于 noarchivelog,應(yīng)盡快將全部數(shù)據(jù) export 出來,重建數(shù)據(jù)庫,再 import 進去。所有操作之前,應(yīng)做冷備份。

2.數(shù)據(jù)庫異常中止處理

通過手工 shutdown abort 操作中止數(shù)據(jù)庫,不會產(chǎn)生大的問題,通常直接 startup無需使用介質(zhì)恢復(fù)命令

如果由于機器崩潰引起的中止,則情況嚴重得多,有可能要使用到上面提到的恢復(fù)方法,不過這種現(xiàn)象并不多見。一般需要顯式使用介質(zhì)恢復(fù)命令,如下:

sqlplus '/ as sysdba'

SQL>startup mount;

SQL>recover database;

SQL>alter database open;

3. 數(shù)據(jù)庫的擴充

3.1 增加一個表空間

3.1.1 創(chuàng)建表空間

命令示例:

針對具體情況增加回滾和臨時表空間

命令示例:

回滾和臨時表空間用完后,可刪除或使它 offline

SQL>drop tablespace rbs8;

SQL>drop tablespaces billtemp;

SQL>alter tablespace rbs offline;

SQL>alter tablespace billtemp offline;

3.1.2 增加某個表空間的大小

當一個表空間的大小不能滿足工作需要時,應(yīng)該擴充表空間。

舉例:

SQL>alter tablespace system

add datafile /usr/oracle/dbs/sys338.dbf size 3M;

3.2 增加 oracle 的用戶,并給用戶授權(quán)

3.2.1 增加 oracle 的用戶,并給用戶授權(quán)

舉例:

SQL>create user newuser identified by userpasswd

default tablespace application

temporary tablespace billtemp;

SQL>grant connect to newuser;

SQL>grant resource to newuser;

SQL>grant update on emp to newuser;

3.2.2 增加 oracle 的角色

oracle 的缺省角色有 connect、resource、dba。它是一組可以分配給其它 role 或用戶的權(quán)限總和,connect 有 8 個權(quán)限,resource 有 5 個權(quán)限,dba 有 77 個權(quán)限。給一般連接用戶賦 connect,給一般編程人員賦 connect加 resource,只有數(shù)據(jù)庫管理員才有 dba的權(quán)限。

①創(chuàng)建一個角色

SQL>create role newrole identified by rolepasswd;

②給角色賦權(quán)限

SQL>grant select on all table to newrolle;

SQL>grant connect to newrole with admin option;

3.2.3 中斷用戶同 oracle 的連接

當 oracle 數(shù)據(jù)庫要關(guān)機或某個用戶占有的大量的資源需要被釋放時,dba 需中斷用戶同 oracle 的連接。

①、SQL>select sid,serial#,username from v$session;

②、SQL>alter system kill session interger1,interger2 ;

interger1,interger2 分別對應(yīng)于 sid 和 serial#

3.3 表、視圖、索引、約束

Oracle 數(shù)據(jù)庫數(shù)據(jù)對象中最基本的是表和視圖,其他還有約束、序列、函數(shù)、存儲過程、包、觸發(fā)器等。對數(shù)據(jù)庫的操作可以基本歸結(jié)為對數(shù)據(jù)對象的操作。

3.3.1 表和視圖

Oracle 中表是數(shù)據(jù)存儲的基本結(jié)構(gòu)。ORACLE8 引入了分區(qū)表和對象表,ORACLE8i 引入了臨時表,使表的功能更強大。視圖是一個或多個表中數(shù)據(jù)的邏輯表達式。本文我們將討論怎樣創(chuàng)建和管理簡單的表和視圖。

3.3.1.1 管理表

3.3.1.1.1 建立表

表可以看作有行和列的電子數(shù)據(jù)表,表是關(guān)系數(shù)據(jù)庫中一種擁有數(shù)據(jù)的結(jié)構(gòu)。用 CREATE TABLE 語句建立表,在建立表的同時,必須定義表名,列,以及列的數(shù)據(jù)類型和大小。例如:

這樣我們就建立了一個名為 products 的表, 關(guān)鍵詞 CREATE TABLE 后緊跟的表名,然后定義了三列,同時規(guī)定了列的數(shù)據(jù)類型和大小。

在創(chuàng)建表的同時你可以規(guī)定表的完整性約束,也可以規(guī)定列的完整性約束,在列上普通的約束是 NOT NULL,關(guān)于約束的討論我們在以后進行。

在建立或更改表時,可以給表一個缺省值。缺省值是在增加行時,增加的數(shù)據(jù)行中某一項值為 null 時,oracle 即認為該值為缺省值。

下列數(shù)據(jù)字典視圖提供表和表的列的信息:

. DBA_TABLES

. DBA_ALL_TABLES

. USER_TABLES

. USER_ALL_TABLES

. ALL_TABLES

. ALL_ALL_TABLES

. DBA_TAB_COLUMNS

. USER_TAB_COLUMNS

. ALL_TAB_COLUMNS

3.3.1.1.2 表的命名規(guī)則

表名標識一個表,所以應(yīng)盡可能在表名中描述表,oracle 中表名或列名最長可以達 30 個字符串。表名應(yīng)該以字母開始,可以在表名中包含數(shù)字、下劃線、#、$等。

3.3.1.1.3 從其它表中建立表

可以使用查詢從基于一個或多個表中建立表,表的列的數(shù)據(jù)類型和大小有查詢結(jié)果決定。建立這種形式的表的查詢可以選擇其他表中所有的列或者只選擇部分列。在 CREATE TABLE 語句中使用關(guān)鍵字 AS,例如:

SQL>CREATE TABLE emp AS SELECT * FROM employee

TABLE CREATED

SQL> CREATE TABLE Y AS SELECT * FROM X WHERE no=2

需要注意的是如果查詢涉及 LONG 數(shù)據(jù)類型,那么 CREATE TABLE....AS SELECT....將不會工作。

3.3.1.1.4 更改表定義

在建立表后,有時候我們可能需要修改表,比如更改列的定義,更改缺省值,增加新列,刪除列等等。ORACLE 使用ALTER TABLE 語句來更改表的定義

3.3.1.1.4.1 增加列

語法:ALTER TABLE [schema.] table_name ADD column_definition

例:

ALTER TABLE orders ADD order_date DATE;

對于已經(jīng)存在的數(shù)據(jù)行,新列的值將是 NULL.

3.3.1.1.4.2 更改列

語法:

ALTER TABLE [schema.] table_name MODIFY column_name new_attributes;

例:

ALTER TABLE orders MODITY (quantity number(10,3),status varchar2(15));

這個例子中我們修改了表 orders, 將 STATUS 列的長度增加到 15,將 QUANTITY 列減小到 10,3;

修改列的規(guī)則如下:

可以增加字符串數(shù)據(jù)類型的列的長度,數(shù)字數(shù)據(jù)類型列的精度。

減少列的長度時,該列應(yīng)該不包含任何值,所有數(shù)據(jù)行都為 NULL

改變數(shù)據(jù)類型時,該列的值必須是 NULL.

對于十進制數(shù)字,可以增加或減少但不能降低他的精度。

3.3.1.1.4.3 刪除數(shù)據(jù)列

優(yōu)化 ORACLE 數(shù)據(jù)庫,唯一的方法是刪除列,重新建立數(shù)據(jù)庫。在 ORACLE8i 中有很多方法刪除列,你可以刪除未用數(shù)據(jù)列或者可以標示該列為未用數(shù)據(jù)列然后刪除。

刪除數(shù)據(jù)列的語法是:

ALTER TABLE [schema.] table_name DROP {COLUM column_names |

(column_names)}[CASCADE CONSTRAINS]

要注意的是在刪除列時關(guān)于該列的索引和完整性約束也同時刪除。注意關(guān)鍵字 CASCADE CONSTRAINS,如果刪除的列是多列約束的一部分,那么這個約束條件相對于其他列也同時刪除。

如果用戶擔心在大型數(shù)據(jù)庫中刪除列要花太多時間,可以先將他們標記為未用數(shù)據(jù)列,標記未用數(shù)據(jù)列的語法如下:

這個語句將一個或多個數(shù)據(jù)列標記為未用數(shù)據(jù)列,但并不刪除數(shù)據(jù)列中的數(shù)據(jù),也不釋放占用的磁盤空間。但是,未用數(shù)據(jù)列在視圖和數(shù)據(jù)字典中并不顯示,并且該數(shù)據(jù)列的名稱將被刪除,新的數(shù)據(jù)列可以使用這個名稱?;谠摂?shù)據(jù)列的索引、約束,統(tǒng)計等都將被刪除。

刪除未用數(shù)據(jù)列的語句是:

ALTER TABLE [schema.] table_name DROP {UNUSED COLUM | COLUMN CONTINUE}

3.3.1.1.4.4 刪除表和更改表名

刪除表非常簡單,但它是一個不可逆轉(zhuǎn)的行為。

語法:

DROP TABLE [schema.] table_name [CASCADE CONSTRAINTS]

刪除表后,表上的索引、觸發(fā)器、權(quán)限、完整性約束也同時刪除。ORACLE 不能刪除視圖,或其他程序單元,但 oracle 將標示他們無效。如果刪除的表涉及引用主鍵或唯一關(guān)鍵字的完整性約束時,那么 DROP TABLE 語句就必須包含 CASCADE CONSTRAINTS 子串。

更改表名

RENAME 命令用于給表和其他數(shù)據(jù)庫對象改名。ORACLE 系統(tǒng)自動將基于舊表的完整性約束、索引、權(quán)限轉(zhuǎn)移到新表中。ORACLE 同時使所有基于舊表的數(shù)據(jù)庫對象,比如視圖、程序、函數(shù)等,為不合法。

語法:RENAME old_name TO new_name;

例:SQL> RENAME orders TO purchase_orders;

3.3.1.1.4.5 截短表

TRUNCATE 命令與 DROP 命令相似, 但他不是刪除整個數(shù)據(jù)表,所以索引、完整性約束、觸發(fā)器、權(quán)限等都不會被刪除。缺省情況下將釋放部分表和視圖空間,如果用戶不希望釋放表空間,TRUNCATE 語句中要包含 REUSE STORAGE 子串。TRUNCATE 命令語法如下:

TRUNCATE {TABLE|CLUSTER} [schema.] name {DROP|REUSE STORAGE}

例:SQL> TRUNCATE TABLE t1;

3.3.1.2 管理視圖

視圖是一個或多個表中的數(shù)據(jù)的簡化描述,用戶可以將視圖看成一個存儲查詢(stored query)或一個虛擬表(virtual table).查詢僅僅存儲在 oracle 數(shù)據(jù)字典中,實際的數(shù)據(jù)沒有存放在任何其它地方,所以建立視圖不用消耗其他的空間。視圖也可以隱藏復(fù)雜查詢,比如多表查詢,但用戶只能看見視圖。視圖可以有與他所基于表的列名不同的列名。用戶可以建立限制其他用戶訪問的視圖。

3.3.1.2.1 建立視圖

CREATE VIEW 命令創(chuàng)建視圖,定義視圖的查詢可以建立在一個或多個表,或其他視圖上。

查詢不能有 FOR UPDATE 子串,在早期的 ORACLE8i 版本中不支持 ORDER BY 子串,現(xiàn)在的版本中CREATE VIEW 可以擁有 ORDER BY 子串。

例:

用戶可以在創(chuàng)建視圖的同時更改列名,方法是在視圖名后立即加上要命名的列名。重新定義視圖需要包含 OR REPLACE 子串。

如果在創(chuàng)建的視圖包含錯誤在正常情況下,視圖將不會被創(chuàng)建。但如果你需要創(chuàng)建一個帶錯誤的視圖必須在 CREATE VIEW 語句中帶上 FORCE 選項。如:CREATE FORCE VIEW

ORDER_STATUS AS

SELECT * FROM PURCHASE_ORDERS

WHERE STATUS= APPPOVE ;

SQL>/

warning :View create with compilation errors

這樣將創(chuàng)建了一個名為 ORDER_STATUS 的視圖,但這樣的視圖的狀態(tài)是不合法的,如果以后狀態(tài)發(fā)生變化則可以重新編譯,其狀態(tài)也變成合法的。

3.3.1.2.2 從視圖中獲得數(shù)據(jù)

從視圖中獲得數(shù)據(jù)與從表中獲得數(shù)據(jù)基本一樣,用戶可以在連接和子查詢中使用視圖,也可以使用 SQL 函數(shù),以及所有 SELECT 語句的字串。

3.3.1.2.3 插入、更新、刪除數(shù)據(jù)

用戶在一定的限制條件下可以通過視圖更新、插入、刪除數(shù)據(jù)。如果視圖連接多個表,那么在一個時間里只能更新一個表。所有的能被更新的列可以在數(shù)據(jù)字典 USER_UPDATETABLE_COLUMNS 中查到。

用戶在 CREATE VIEW 中可以使用了 WITH 子串。WITH READ ONLY 子串表示創(chuàng)建的視圖是一個只讀視圖,不能進行更新、插入、刪除操作。WITH CHECK OPTION 表示可以進行插入和更新操作,但應(yīng)該滿足 WHERE 子串的條件。這個條件就是創(chuàng)建視圖 WHERE 子句的條件,比如在上面的例子中用戶創(chuàng)建了一個視圖 TOP_EMP,在這個視圖中用戶不能插入 salary 小于 2000 的數(shù)據(jù)行。

3.3.1.2.4 刪除視圖

刪除視圖使用DROP VIEW 命令。同時將視圖定義從數(shù)據(jù)字典中刪除,基于視圖的權(quán)限也同時被刪除,其他涉及到該視圖的函數(shù)、視圖、程序等都將被視為非法。

例:DROP VIEW TOP_EMP;

3.3.2 索引

索引是一種可以提高查詢性能的數(shù)據(jù)結(jié)構(gòu),在這一部分我們將討論索引如何提高查詢性能的。ORACLE提供了以下幾種索引:

B-Tree、哈希(hash)、位圖(bitmap)等索引類型

基于原始表的索引

基于函數(shù)的索引

域(Domain)索引

實際應(yīng)用中主要是 B-Tree 索引和位圖索引,所以我們將集中討論這兩種索引類型。

3.3.2.1 B-Tree 索引

B-Tree 索引是最普通的索引,缺省條件下建立的索引就是這種類型的索引。B-Tree 索引可以是唯一或非唯一的,可以是單一的(基于一列)或連接的(多列)。B-Tree 索引在檢索高基數(shù)數(shù)據(jù)列(高基數(shù)數(shù)據(jù)列是指該列有很多不同的值)時提供了最好的性能。對于取出較小的數(shù)據(jù) B-Tree 索引比全表檢索提供了更有效的方法。但當檢查的范圍超過表的 10%時就不能提高取回數(shù)據(jù)的性能。正如名字所暗示的那樣,B-Tree 索引是基于二元樹的,由枝干塊(branch block)和樹葉塊(leaf block)組成,枝干塊包含了索引列(關(guān)鍵字)和另一索引的地址。樹葉塊包含了關(guān)鍵字和給表中每個匹配行的 ROWID。

3.3.2.2 位圖索引

位圖索引主要用于決策支持系統(tǒng)或靜態(tài)數(shù)據(jù),不支持行級鎖定。位圖索引可以是簡單的(單列)也可以是連接的(多列),但在實踐中絕大多數(shù)是簡單的。位圖索引最好用于低到中群集(cardinality)列,在這些列上多位圖索引可以與 AND 或 OR 操作符結(jié)合使用。

位圖索引使用位圖作為鍵值,對于表中的每一數(shù)據(jù)行位圖包含了 TRUE(1)、FALSE(0)、或 NULL 值。位圖索引的位圖存放在 B-Tree 結(jié)構(gòu)的頁節(jié)點中。B-Tree結(jié)構(gòu)使查找位圖非常方便和快速。另外,位圖以一種壓縮格式存放,因此占用的磁盤空間比 B-Tree 索引要小得多。

3.3.2.3 修改索引

ALTER INDEX scott.ord_region_id_idx

ALLOCATE EXTENT (SIZE 200K

DATAFILE DISK6/indx01.dbf );重建索引對于頻繁更新的表,索引會變得層次很深,效率變低。這時需要重建索引。

ALTER INDEX scott.ord_region_id_idx REBUILD

TABLESPACE indx02;

3.3.3 序列(Sequences)

Oracle 序列是一個連續(xù)的數(shù)字生成器。序列常用于人為的關(guān)鍵字,或給數(shù)據(jù)行排序否則數(shù)據(jù)行是無序的。像約束一樣,序列只存在于數(shù)據(jù)字典中。序列號可以被設(shè)置為上升、下降,可以沒有限制或重復(fù)使用直到一個限制值。

3.3.3.1 創(chuàng)建序列

創(chuàng)建序列使用SET SEQUENCE語句。

CREATE SEQUENCE [schema] sequence KEYWORD

KEYWORD 包括下面的值:

KEYWORD 描述

START WITH 定義序列生成的第一個數(shù)字,缺省為 1

INCREMENT BY 定義序列號是上升還是下降,對于一個降序的序列 INCREMENT BY 為負值

MINVALUE 定義序列可以生成的最小值,這是降序序列中的限制值。缺省情況下該值為NOMINVALUE,NOMINVALUE,對于升序為 1,對于降序為-10E26.

MAXVALUE 序列能生成的最大數(shù)字。這是升序序列中的限制值,缺省的 MAXVALUE 為NOMAXVALUE,NOMAXVALUE,對于升序為 10E26,對于降序為-1。

CYCLE 設(shè)置序列值在達到限制值以后可以重復(fù)NOCYCLE 設(shè)置序列值在達到限制值以后不能重復(fù),這是缺省設(shè)置。當試圖產(chǎn)MAXVALUE 1 的值時,將會產(chǎn)生一個異常CACHE 定義序列值占據(jù)的內(nèi)存塊的大小,缺省值為 20

NOCACHE 在每次序列號產(chǎn)生時強制數(shù)據(jù)字典更新,保證在序列值之間沒有間隔當創(chuàng)建序列時,START WITH 值必須等于或大于 MINVALUE。

3.3.3.2 刪除序列

刪除序列使用DROP SEQUENCE 語句

DROP SEQUENCE sequence_name

3.4 網(wǎng)絡(luò)管理

3.4.1 Net8 server 端配置

3.4.1.1 listener.ora 文件的樣本:

3.4.1.2 啟動listener

在響應(yīng)的端口上設(shè)置并啟動 listener

手工啟動 listener:

1. >lsnrctl start

查看狀態(tài)

2. >lsnrctl status

3.4.2 Net 8 client 端配置

¢Net 8 client 端常用的配置方法為 tns 方式

¢使用圖形配置工具進行配置

開始->程序->Oracle->

Network Administration->Net8 Assistant.

1、選本地 -> 概要文件 加入 tnsnames

2、選本地 ->服務(wù)命名 新建一個連接串,包括主機名、端口,協(xié)議

3、選文件->保存網(wǎng)絡(luò)配置

¢直接配置$ORACLE_HOME/network/admin/tnsnames.ora

1. 備份 tnsnames.ora

2. 按照示例對連接串做拷貝

3. 改變連接串的名字,主機名,端口,協(xié)議,SID 等參數(shù)

4. 保存文件

3.4.3 sqlnet.ora

3.4.4 網(wǎng)絡(luò)連通性測試

sqlplus

tnsping

ping ,netstat

1. sqlplus system/manager @gis

注意:gis 是剛才設(shè)置的新的連接串

2.在客戶端 >Tnsping gis,

并且檢查 tnsnames.ora 中的配置是否與 server 端的$ORACLE_HOME/network/admin/listener.ora 中的配置是否一致。

1. Ping server IP 地址,查看網(wǎng)絡(luò)連通性

3.4.5 常見 NET8 錯誤

故障排除是每個系統(tǒng)管理人員必要面對的工作。下面給出幾種故障分析和排除方法。

3.4.5.1 服務(wù)器端診斷

任務(wù) 1: 數(shù)據(jù)庫系統(tǒng)是否啟動

確定數(shù)據(jù)庫系統(tǒng)是否已啟動,只要用 SQL*PLUS 登錄即可:

SQLPLUS system/manager

如果收到下面信息,則數(shù)據(jù)庫還不能用。

ORA-1017: invalid U/P

ORA-1034: Oracle not available

任務(wù) 2: 執(zhí)行繞彎測試

為了確認 listener.ora, tnsnames.ora sqlnet.ora 文件的存在,

有效。要在服務(wù)器端

UNIX 在:$ORACLE_HOME/network/admin

Windows NT 在:ORACLE_HOME\network\admin

a. 這些文件是否在工作。

b. TNS_ADMIN 變量有效性。

使用 Net8 Assistant 進行繞彎測試:

3.4.5.2 客戶端診斷

當服務(wù)器已經(jīng)通過一般的 SQL*PLUS 測試和繞彎測試后,可以進行客戶端的測試,步驟如下:

1. 檢查所安裝的協(xié)議是否與服務(wù)器端一致;

在 UNIX, 可以運行$ORACLE_HOME/bin 目錄下的 adapters 來確認。結(jié)果顯示:

2. 檢查所有 Net8 軟件在客戶端已經(jīng)安裝。

3. 確認客戶端機器$ORACLE_HOME/network/admin 目錄下的 tnsnames.ora 和sqlnet.ora 文件的內(nèi)容:

a. 當前的工作目錄

b. TNS_ADMIN 環(huán)境變量

在 NT 中,如果 TNS_ADMIN 環(huán)境變量沒有注冊,就要進行注冊。

c. 用 FTP, TELNET 及 PING 檢查網(wǎng)絡(luò)的連接情況。

4. 用 TNSPING 、TRCROUTE 實用程序或 Net8 Assistant進行測試 TNSPING:

tnsping net_service_name [count]

net service name: 在tnsnames.ora 或名字服務(wù)上得使用。如:NIS 或 DCE 的CDS.

count (可選): 實驗次數(shù)

例 1:使用 spotdb 服務(wù)名進行測試:

tnsping spotdb

可能提示:

例 2:用 TNSPING 測試 10 次:

tnsping stprd 10

可能提示:

5. 如果連接失敗,可以進行下面操作:

查找原因

用下面站點與 Oracle 聯(lián)系:

http://support.oracle.com

與 Oracle Worldwide Support 聯(lián)系

3.4.5.3 常見錯誤

ORA-12154: TNS:could not resolve service name

原因: 在 tnsnames.ora ,Net8 不能定位到服務(wù)器上

措施:

1. 確定 tnsnames.ora 文件存在

2. 確定不要有多個 tnsnames.ora

3.確認 tnsnames.ora 文件的服務(wù)名的正確性。

4. 確認不要有多個 sqlnet.ora

5. 如果使用域名,確認 sqlnet.ora 包含NAMES.DEFAULT_DOMAIN 參數(shù)。如果該參數(shù)不存在,必須在連接字串中指定域名。

如果沒有使用域名,而 NAMES.DEFAULT_DOMAIN 參數(shù)存在,則刪掉它或注釋掉。

6. 如果從對話框進行連接,要帶@號。

7. 啟動客戶端的跟蹤功能,再連接。

ORA-12198: TNS:could not find path to destination

ORA-12203:TNS:unable to connect to destination

原因: 在客戶端找不到目標數(shù)據(jù)庫

措施:

1. 所輸入的網(wǎng)絡(luò)服務(wù)名是否正確

2. 確認 tnsnames.ora 文件中的 ADDRESS 參數(shù)是否正確

3. 確認 tnsnames.ora 文件是否在正確的目錄上。

4. 確認遠程監(jiān)聽器是否啟動:輸入:

lsnrctl

lsnrctl> status listener_name

listener_name 缺省 LISTENER.

如果沒有啟動,則啟動:

lsnrctl> start listener_name

5.如果從對話框連接,不要忘記加@號

ORA-12203:

TNS:unable to connect to destination

ORA-12203 是一般的錯誤,可以檢查$ORACLE_HOME/network/log 目錄的 sqlnet.log 文件。

原因: 所安裝的協(xié)議不正確??赡芘c下面原因一樣:

ORA-12203

ORA-12538

ORA-00508

措施: 檢查安裝的 Oracle 協(xié)議。

在 UNIX 下,運行$ORACLE_HOME/bin 目錄下的 adapters 程序。

應(yīng)該輸出:

Installed Net8 Tranport Protocols are:

IPC

TCP/IP

BEQueath

SSL

RAW

...

ORA-12203 原因: 不正確的服務(wù)名。

HOST 或 SERVICE 正確?

PORT 正確?

ORA-12203

另外原因: Net8 在 tnsnames.ora 文件中沒有找到服務(wù)描述符。

措施: 用下面命令確認數(shù)據(jù)庫是否在運行:

lsnrctl

lsnrctl> status listener_name

listener_name 不是必須的,缺省 LISTENER

如果系統(tǒng)提示沒有運行,則用下面命令啟動:

lsnrctl> start listener_name

2. 確認 tnsnames.ora 文件的正確位置。

ORA-12203 另外原因: 目標系統(tǒng)的監(jiān)聽沒有工作。

措施: 確包遠程系統(tǒng)的監(jiān)聽在工作,輸入:

lsnrctl

lsnrctl> status listener_name

如果確實沒有工作,則輸入:

lsnrctl> start listener_name

ORA-12203 另外原因: 存在潛在的事務(wù)問題。

措施: 確保實用程序支持目前的網(wǎng)絡(luò)協(xié)議,如 TCP/IP。用 PING 試。

ORA-12203 另外原因: tnsnames.ora 文件沒有放對地方(目錄)。

Action:確保 tnsnames.ora文件在正確的位置。

ORA-12203 另外原因: TCP/IP 地址 (HOST=server_name) 參數(shù) TCP/IP 或 SPX 地址參數(shù)(SERVICE=tns_application) 與客戶端不一致。

措施: 確認這些參數(shù)使用相同的名字。

對于 TCP/IP ,確保 listener.ora 文件的 HOST 和 tnsnames.ora 文件指到相同的名字?;蛎洲D(zhuǎn)換到相同的 IP地址。

對于 SPX ,在客戶端的名字必須相同。

ORA-12224: TNS:no listener

原因:由于監(jiān)聽沒有工作而連接請求不能完成。

措施:

1. 確認支持的目標地址與數(shù)據(jù)庫之一匹配。

2.檢查版本問題

ORA-12533:

TNS:illegal ADDRESS parameters

原因:在 tnsnames.ora 文件的 ADDRESS 節(jié)指定不 正確。

措施:根據(jù) ADDRESS 語法進行改正。

ORA-12545: TNS:name lookup failure

原因:遠程節(jié)點不能連接。

措施:

1. tnsnames.ora 文件的 ADDRESS 和 listener.ora 文件的正確性。

2. 確認遠程節(jié)點已經(jīng)啟動。輸入:

lsnrctl

lsnrctl> status listener_name

如果沒有啟動,則輸入:

lsnrctl> start listener_name

ORA-12560:

TNS:protocol adapter error

原因:監(jiān)聽不能啟動。

措施:

1. 調(diào)整后再運行。

2. 分析跟蹤文件的內(nèi)容。

ORA-3113: TNS:End of file on communication channel

原因:一個無法預(yù)料文件結(jié)束在通信通道里被處理。可能是通信連接被臨時地停止了。

措施:需要修改發(fā)射次數(shù)等。

ORA-3121: No interface driver connection -function not performed

原因:SQL*NET 版本引起。

措施:不要使用下面前綴進行連接:

T:

X:

P:

4. ORACLE8i 與系統(tǒng)管理有關(guān)的新特性

Oracle8i 引入了幾項嶄新的特性,可簡化對 ORDBMS 的管理,并使其更易操作和使用。

4.1 本地化管理表空間

在 Oracle8I 以前,表空間的使用狀況都是通過數(shù)據(jù)字典來完成的,稱為 Dictionary-Managed Tablespace. 在 Oracle8I 推出以前,這一直都是唯一的表空間管理方式。自從 Oracle8I 以后,Oracle 又增加了一種新的表空間管理方式:Locally Managed Tablespace(本地化管理的表空間)。

在傳統(tǒng)的數(shù)據(jù)字典管理的表空間里,Oracle 在數(shù)據(jù)字典的表里面記錄了每個表空間的每個區(qū)的使用狀況:每當一個區(qū)被使用或被釋放時,Oracle 都在數(shù)據(jù)字典里面更新相應(yīng)的信息,并產(chǎn)生相應(yīng)的 redo 信息。在 Oracle8I 里,這仍然是默認的表空間管理方式。

在 Oracle8I 的版本中,Oracle 推出了一種全新的表空間管理方式:本地化管理的表空間。所謂本地化管理,就是指 Oracle 不再利用數(shù)據(jù)字典的表來記錄 Oracle 表空間里面的區(qū)的使用狀況,而是在每個表空間的數(shù)據(jù)文件的頭部加入了一個記錄塊,在其中記錄每個區(qū)的使用狀況。每當一個區(qū)被使用,或者被釋放以供重新使用時,Oracle 都會更新數(shù)據(jù)文件頭部的這個記錄,反映這個變化。

本地化管理的表空間的創(chuàng)建過程:

解釋:關(guān)鍵字 EXTENT MANAGEMENT LOCAL 指定這是一個本地化管理的表空間。對于系統(tǒng)表空間,只能在創(chuàng)建數(shù)據(jù)庫的時候指定 EXTENT MANGEMENT LOCAL,因為它是數(shù)據(jù)庫創(chuàng)建時建立的第一個表空間。

若為 DICTIONARY,則表明這是一個傳統(tǒng)的數(shù)據(jù)字典管理的表空間,這是個默認選項。

當選擇了 LOCAL 關(guān)鍵字,即表明這是這是一個本地化管理的表空間后,還可以繼續(xù)選擇更細的管理方式:是 AUTOALLOCATE 還是 UNIFORM.。若為 AUTOALLOCATE,則表明讓 Oracle 來決定區(qū)塊的使用辦法;若選擇了 UNIFORM,則還可以詳細指定每個區(qū)塊的大小,若不加指定,則為每個區(qū)使用 1M 大小。

是本地化管理的表空間還是創(chuàng)建數(shù)據(jù)字典管理的表空間只能在創(chuàng)建表空間的時候指定。在表空間已經(jīng)創(chuàng)建以后,則不能再把本地化管理的表空間和數(shù)據(jù)字典管理的表空間再相互轉(zhuǎn)換。在創(chuàng)建臨時表空間時,也可以在 CREATE TEMPORARY TABLESPACE 中指定EXTENT MANAGEMENT LOCAL 來指定這是一個本地化管理的表空間。

本地化管理表空間的優(yōu)點:

1. 本地化管理的表空間避免了遞歸的空間管理操作。而這種情況在數(shù)據(jù)字典管理的表空間是經(jīng)常出現(xiàn)的,當表空間里的區(qū)的使用狀況發(fā)生改變時,數(shù)據(jù)字典的表的信息發(fā)生改變,從而同時也使用了在系統(tǒng)表空間里的回滾段。

2. 本地化管理的表空間避免了在數(shù)據(jù)字典相應(yīng)表里面寫入空閑塊、已使用塊的信息,從而減少了數(shù)據(jù)字典表的競爭。

3. 區(qū)的本地化管理自動跟蹤表空間里的空閑塊,減少了手工合并自由空間的需要。

4. 表空間里的區(qū)的大小可以選擇由 Oracle 系統(tǒng)來決定,或者由數(shù)據(jù)庫管理員指定一個統(tǒng)一的大小。

5. 從由數(shù)據(jù)字典來管理空閑塊改為由數(shù)據(jù)文件的頭部記錄來管理空閑塊,這樣避免產(chǎn)生回滾信息,不再使用系統(tǒng)表空間里的回滾段。因為由數(shù)據(jù)字典來管理的話,它會把相關(guān)信息記在數(shù)據(jù)字典的表里,從而產(chǎn)生回滾信息。由于這種表空間的以上特性,所以它支持在一個表空間里邊進行更多的并發(fā)操作,并減少了對數(shù)據(jù)字典的依賴。

當然本地化管理的表空間也不是對所有的數(shù)據(jù)庫和數(shù)據(jù)庫對象都是適用的。首先,它不能指定存儲特性,無 STORAGE 子句可供使用。其次,它不適用于存儲較小的數(shù)據(jù)庫對象。

總的來說,oracle8I 提供了這種全新的表空間管理方式,給了我們更多的選擇。對于用來存儲大對象的表空間和臨時表空間來說,用本地化管理的表空間組織方式不失為一個較好的選擇。

4.2 FBI 索引

Oracle8i的很重要的一個新特性就是增加了 function-based index 這種索引類型(后面簡稱為 FBI)。有了這個特性后,Oracle DBA 就可以在索引中使用函數(shù)或者表達式了。這些函數(shù)可以使 Oracle 自己的函數(shù),也可以使用戶自己的 PL/SQL 函數(shù)等。

DBA 在 SQL 語句調(diào)優(yōu)的過程中遇到的一個很常見的問題就是,如何優(yōu)化那些在 WHERE子句中使用了函數(shù)的語句。因為在以前,在 WHERE 子句中使用函數(shù)會使在這個表上創(chuàng)建的索引沒法利用,從而難以提高這個語句的性能。

例子:

使用基于成本的優(yōu)化器,索引為標準的 B 樹索引,建立在 SURNAME 列上。

從 SQL*PLUS 的 autotrace 產(chǎn)生的執(zhí)行路徑可以看到,雖然我們在 WHERE 子句中用到的SURNAME 列上創(chuàng)建了索引,但是仍然執(zhí)行的是全表掃描。如果這張表很大的話,這回消耗大量的時間。

現(xiàn)在我們試著建立一個 FBI 索引:

 SQL*Plus 返回的執(zhí)行計劃我們可以看到,這次,Oracle 對表不再全表掃描,而是先掃描索引,因為優(yōu)化器可以知道 FBI 索引得存在使用 FBI 索引所能夠帶來的性能提升取決于表的大小、表中重復(fù)記錄的量、在 WHERE子句中使用的列等因素。

有一點需要清楚,F(xiàn)BI 索引并不真正在索引里邊存儲了表達式的結(jié)果,而是使用了一個'表達樹'(expression tree)。

由優(yōu)化器來對 SQL 語句中的表達式進行解析,并且和 FBI 索引上面的表達式進行對比。這里,SQL 函數(shù)的大小寫時敏感的。因此要求 SQL 語句中使用的函數(shù)和創(chuàng)建 FBI 索引得時候的那個 SQL 函數(shù)的大小寫一致,否則無法利用這個 FBI索引。因此,在編程的時候要有一個良好的編程風格。

Init.ora里邊需要修改的參數(shù)

下面這幾個參數(shù)必須在 init.ora 里邊指定:

QUERY_REWRITE_INTEGRITY = TRUSTED

QUERY_REWRITE_ENABLED = TRUE

COMPATIBLE = 8.1.0.0.0 (or higher)

授權(quán):

要使一個用戶能夠創(chuàng)建 FBI 索引,他必須被授予以下權(quán)限:CREATE INDEX 和 QUERYREWRITE,或者CREATE ANY INDEX 和 GLOBAL QUERY REWRITE 這兩個權(quán)限。

索引的使用者必須能夠有那個 FBI 索引上使用的那個函數(shù)的執(zhí)行權(quán)限。如果沒有相應(yīng)

的權(quán)限,那么這個 FBI 索引得狀態(tài)將變成 DISABLED(DBA_INDEXES)。

如果那個FBI 索引得狀態(tài)是 DISABLED,那么 DBA 可以這樣來處理:

A:刪除并重建

B:ALTER INDEX index_name ENABLED。這個 Enabled 只能對 FBI 索引使用。

C:ALTER INDEX UNUSABLE;

注意:如果一個查詢中使用到了這個索引,但是這個 FBI 索引的狀態(tài)是 DISABLED,但是優(yōu)化器選擇了使用這個索引,那么將會返回一個 Oracle 錯誤。

例子:

ORA error:

ERROR at line 1: ORA-30554: function-based index MYUSER.FBI is disabled.

而且,一旦這個 FBI 索引的狀態(tài)是 Disabled,那么這張表上所有涉及索引列的 DML 操作也將失敗。除非這個索引得狀態(tài)變成 UNUSABLE,而且在初始化參數(shù)里邊指定 SKIP_UNUSABLE_INDEXES為 TRUE。

一些例子:

復(fù)合索引的例子:

限制和規(guī)則總結(jié):

對于下面這些限制,不能創(chuàng)建 FBI 索引:

a) LOB 列

b) REF

c) Nested table 列

d) 包含上面數(shù)據(jù)類型的對象

FBI 索引必須遵守下面的規(guī)則:

a) 必須使用基于成本的優(yōu)化器,而且創(chuàng)建后必須對索引進行分析

b) 不能存儲 NULL 值。因為任何函數(shù)在任何情況下都不能返回 NULL 值。

c)如果一個用戶定義的 PL/SQL 例程失效了,而且這個例程被 FBI 索引用到了,那么相應(yīng)的這個 FBI 索引會變成 DISABLED

d)創(chuàng)建 FBI 索引得函數(shù)必須是確定性的。即,對于指定的輸入,總是會返回確定的結(jié)果。

e) 索引的屬主如果沒有了在 FBI 索引里面使用的函數(shù)的執(zhí)行權(quán)限,那么這個 FBI 索引會變成 DISABLED.

f) 在創(chuàng)建索引得函數(shù)里面不能使用 SUM 等總計函數(shù)。

g)要把一個 DISABLED 了的索引重新變成 ENABLED,這個函數(shù)必須首先是 ENABLED 的才可以。

4.3 在線索引創(chuàng)建和重建

索引創(chuàng)建與重建在 Oracle8i中可聯(lián)機實現(xiàn),而不必中斷對基表可能實施插入、更新或刪除操作。創(chuàng)建與重建索引是一件非常耗時的工作,尤其當基表很大時。在 Oracle8i 之前,在索引創(chuàng)建與重建期間,不允許對其基表進行任何 DML操作。

在線創(chuàng)建索引:

在線重建索引:

注:在線索引構(gòu)建期間,盡管能 UPDATE(更新)基表,但根據(jù) Oracle 的建議,最好不要采取會影響到大部分數(shù)據(jù)行的操作。

4.4 使用可傳輸?shù)谋砜臻g實現(xiàn)數(shù)據(jù)在數(shù)據(jù)庫間的移動

對于可傳輸?shù)谋砜臻g這一特性來說,允許我們把一個或多個表空間從一個數(shù)據(jù)庫移動或復(fù)制到另一個數(shù)據(jù)庫。

可傳輸?shù)谋砜臻g有下面幾點限制:

源和目標數(shù)據(jù)庫必須處于同一個硬件平臺。

源和目標數(shù)據(jù)庫的數(shù)據(jù)庫塊大小必須一樣,而且必須采用同一個字符集。

如果表空間名和目標數(shù)據(jù)庫上的表空間名雷同,這個表空間就不能被傳輸?shù)侥繕藬?shù)據(jù)庫。

數(shù)據(jù)庫表空間遷移的基本過程是:令表空間為只讀,并復(fù)制相應(yīng)的數(shù)據(jù)文件,然后利用 EXP/IMP,從數(shù)據(jù)字典中卸載元數(shù)據(jù),并把它裝載到目標數(shù)據(jù)庫。

表空間遷移前首先要檢測待遷移的表空間是否自包含。我們可以通過執(zhí)行內(nèi)置的 PL/SQL過程 DBMS_TTS.TRANSPORT_SET_CHECK 判斷表空間是否自包含:

其中, SALEDAT,SALESIDX 是表空間名。若TRANSPORT_SET_VOILATIONS 沒有記錄,則說明待遷移的表空間是自包含。

以下是表空間遷移的操作步驟,1-5 步操作在源數(shù)據(jù)庫表空間操作完成,6、7、8步在目的數(shù)據(jù)庫表空間操作完成。

1.用數(shù)據(jù)庫管理員(INTERNAL)身份登錄 ORACLE,(CONNECT INTERNAL/******)。

2.將源 tablsspace_name 表空間置為 READ ONLY,使得表空間下的數(shù)據(jù)文件置為 READONLY 狀態(tài),可以進行操作系統(tǒng)級的拷貝,(ALTER TABLESPACE tablsspace_name READONLY)。如果是生產(chǎn)系統(tǒng)請注意選擇好進行此操作的時間。

3.利用 EXP 工具進行數(shù)據(jù)庫表空間的遷移,(EXP INTERNAL/****** FILE=filename.DMP LOG=logname.LOG TRANSPORT_TABLESPACE=Y TABLESPACES=tablsspace_name BUFFER=1024000 )。

4.將待遷移的表空間下的所有數(shù)據(jù)文件進行操作系統(tǒng)級的拷貝,復(fù)制到目的數(shù)據(jù)庫操作系統(tǒng)硬盤下。

5.將源 tablsspace_name 表空間置為 READ WRITE,使得表空間下的數(shù)據(jù)文件置為 READ WRITE 狀態(tài),(ALTER TABLESPACE tablsspace_name READ WRITE)。

6.在目的數(shù)據(jù)庫上建立相應(yīng)的用戶 user_name 并賦予 CREATE SESSION 權(quán)限。

7.在目的數(shù)據(jù)庫上利用 IMP 工具進行數(shù)據(jù)庫表空間的遷移,(IMP INTERNAL/****** FILE=filename.DMP LOG=logname.LOG TRANSPORT_TABLESPACE=Y TABLESPACES=tablsspace_name DATAFILES=datafile_name1,datafile_name2)。

8.在目的數(shù)據(jù)庫上將目的 tablsspace_name 表空間置為 READ WRITE,使得表空間下的數(shù)據(jù)文件置為 READ WRITE 狀態(tài),(ALTER TABLESPACE tablsspace_name READ WRITE)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多