A. db2資料庫create database on語句是什麼意思
C:\Documents and Settings\tstbd>db2 ? create database
CREATE DATABASE database-name
[AT DBPARTITIONNUM | [AUTOMATIC STORAGE {NO | YES}]
[ON drive[{,drive}...][DBPATH ON drive]]
[ALIAS database-alias] [USING CODESET codeset TERRITORY territory]
[COLLATE USING {SYSTEM | IDENTITY | IDENTITY_16BIT | COMPATIBILITY | NLSCHAR | U
[PAGESIZE integer [K]]
[NUMSEGS numsegs] [DFT_EXTENT_SZ dft_extentsize] [RESTRICTIVE]
[CATALOG TABLESPACE tblspace-defn] [USER TABLESPACE tblspace-defn]
[TEMPORARY TABLESPACE tblspace-defn] [WITH "comment-string"] ]
[AUTOCONFIGURE [USING config-keyword value [{,config-keyword value}...]]
[APPLY {DB ONLY | DB AND DBM | NONE}]]
on 代表數據創建在哪個目錄下面。
參數詳解
1. DATABASE database-name
給資料庫指定名稱,在本地和系統庫中,都必須唯一的,不能包含空格。
2. AT DBPARTITIONNUM
指定資料庫將要被創建在發出命令的分區。當創建一個新庫,不要指定這個參數。可以用它重建一個因為損壞而刪除的數
據庫分區。當用這個參數創建庫,資料庫將處於restore pending狀態。不切斷應用可能導致不一致,用時謹慎。
3. AUTOMATIC STORAGE NO | YES
指定自動存儲打開或關閉。默認是打開的。
4. ON path or drive
這個子句和AUTOMATIC STORAGE的值有關,它指定了DB表空間的容器位置。詳細的目錄結構如下
/Path or Drive ----------> 資料庫目錄
|
|------ InstanceName ----------> 實例名
|
|------ NODEnnnn ----------> 節點名
|
|------ DataBaseName ----------> 資料庫名
|
|------Tnnnnnnn ----------> 表空間容器
對於AUTOMATIC STORAGE NO:只有一個path可以包含在ON後,它指定了DB的位置。如果沒有指定這個參數,DB創建到默認路徑中,該默認路徑為dbm cfg的dftdbpath指定。
對於AUTOMATIC STORAGE YES:可以列出多個路徑,有逗號分隔,這些路徑作為存儲路徑和保存自動存儲表空間的容器。對於多分區DB,相同的存儲路徑被用在所有分區中。
創建資料庫後將創建三個預設表空間:
T0000000子目錄中包含帶有系統目錄表的目錄表空間。
T0000001子目錄中包含預設臨時表空間。
T0000002子目錄中包含預設用戶數據表空間。
每個子目錄或容器中都會創建一個名為 sqlTAG.NAM 的文件。這個文件可以標記正在使用中的子目錄,因此在以後創建其他表空間時,不會嘗試使用這些子目錄。
此外,名為 SQL*.DAT 的文件中還存儲有關子目錄或容器包含的每個表的信息。星號(*)將被唯一的一組數字取代,用來識別每個表。對於每個 SQL*.DAT 文件,可能有一個或多個下列文件,這取決於表類型、表的重組狀態或者表是否存在索引、LOB 或 LONG 欄位:
SQL*.BKM(如果它是一個 MDC 表,那麼它包含塊分配信息)
SQL*.LF(包含 LONG VARCHAR 或 LONG VARGRAPHIC 數據)
SQL*.LB(包含 BLOB、CLOB 或 DBCLOB 數據)
SQL*.XDA(包含 XML 數據)
SQL*.LBA(包含有關 SQL*.LB 文件的分配和可用空間信息)
SQL*.INX(包含索引表數據)
SQL*.IN1(包含索引表數據)
SQL*.DTR(包含用於重組 SQL*.DAT 文件的臨時數據)
SQL*.LFR(包含用於重組 SQL*.LF 文件的臨時數據)
SQL*.RLB(包含用於重組 SQL*.LB 文件的臨時數據)
SQL*.RBA(包含用於重組 SQL*.LBA 文件的臨時數據)
5、DBPATH ON指定了資料庫基礎文件(控制文件,日誌文件等)的創建位置。如果沒有指定,則資料庫在ON後面第一
個路徑指定。如果沒有指定路徑,則在默認位置創建,該默認路徑為dbm cfg的dftdbpath指定。資料庫路徑裡面創建了
分層目錄結構。這個結構保存了資料庫操作需要的文件,目錄結構具體如下
/Path or Drive ----------> 資料庫目錄
|
|------ InstanceName ----------> 實例名
|
|------ NODEnnnn ----------> 節點名
|
|------ SQLxxxxx ----------> 資料庫編號
| |
| |------SQLOGDIR ----------> 資料庫日誌目錄
|
|------sqldbdir ----------> 本地資料庫編目
其中SQLOGDIR目錄用來存放資料庫日誌文件,建庫後可以更改日誌文件位置
SQLxxxxx目錄下包含如下文件
SQLBP.1 和 SQLBP.2 文件中都包含緩沖池信息。這兩個文件中具有相同的副本,從而提供備份。
SQLSPCS.1 和 SQLSPCS.2 文件中都包含表空間信息。這兩個文件中具有相同的副本,從而提供備份。
SQLSGF.1 和 SQLSGF.2 文件中都包含與資料庫的自動存儲器相關的存儲路徑信息。這兩個文件中具有相同的副本,從而提供備份。
SQLDBCON 文件中包含資料庫配置信息。切勿編輯此文件。要更改配置參數,請使用控制中心或者使用 UPDATE DATABASE CONFIGURATION 和 RESET DATABASE CONFIGURATION 命令。
db2rhist.asc 歷史記錄文件及其備份 db2rhist.bak 中包含關於備份、復原、表裝入、表重組、表空間改變和其他資料庫更改的歷史記錄信息。
DB2TSCHNG.HIS文件中包含日誌文件級別的表空間更改的歷史記錄。對於每個日誌文件,DB2TSCHG.HIS中包含有助於確定日誌文件影響哪些表空間的信息。表空間恢復使用此文件中的信息來確定在進行表空間恢復期間要處理哪些日誌文件。可以在文本編輯器中檢查這兩個歷史記錄文件中的內容。
日誌控制文件 SQLOGCTL.LFH 和 SQLOGMIR.LFH 中包含有關活動日誌的信息。
恢復處理過程使用這些文件中的信息來確定要在日誌中後退多遠來開始恢復。SQLOGDIR子目錄中包含實際的日誌文件。
注:您應確保不要將日誌子目錄映射到用於存儲數據的磁碟。這樣,在磁碟發生問題時,只會影響到數據或日誌,而不會同時影響這兩者。由於日誌文件與資料庫容器不會爭用同一磁碟磁頭的移動,因此這可提供很多性能方面的好處。要更改日誌子目錄的位置,請更改 newlogpath資料庫配置參數。
SQLINSLK文件用於確保一個資料庫只能由資料庫管理器的一個實例使用。
在創建資料庫的同時,還在db2event目錄下創建了詳細死鎖事件監視器。詳細死鎖事件監視器文件存儲在目錄節點的資料庫目錄中。當事件監視器達到它要輸出的最大文件數 時,它將取消激活,並且將把一條消息寫入通知日誌中。這樣可防止事件監視器消耗過多的磁碟空間。除去不再需要的輸出文件將允許在下一次資料庫激活時再次激 活事件監視器。
DBPATH ON選項可以被用來把以上文件和信息,放在一個與資料庫數據存儲路徑分開的路徑中。當使用automatic storage時,建議將資料庫的information和資料庫的data分開。
對於MPP系統,資料庫不能建在NFS文件夾中,不能是相對路徑。每個給出的路徑必須在每個資料庫分區中存在並可訪問。
database path最長215字元,storage path最長175字元。
5. ALIAS database-alias
在database directory中,資料庫的別名。如果沒指定,就用資料庫名稱。
6. USING CODESET codeset
指定數據進入資料庫所使用的編碼集。創建資料庫後,不能修改。
7. TERRITORY territory
指定資料庫進入資料庫所使用的區域標示符或本地標示符。創建資料庫後,不能修改。code set和territory的組合,必須是有效的。
B. Android 請問如何更改android 資料庫的存儲路徑
These files will be ones that get deleted first when the device runs low on storage. There is no guarantee when these files will be deleted.
但是,最好不要依賴系統來管攜吵理,應該自己設定一個最大容量,當超出這個值時自己刪除。
Context.getFilesDir(),Context.openFileOutput(String, int),Context.getFileStreamPath(String),Context.getDir(String, int)
/data/data/files
Android支持在SD卡上的應用私有目錄,核隱慶在改握Froyo版本後,通過getExternalFilesDir()可以獲得具體路徑。該路徑依賴與應用的包名,如果你包為hello.file那麼SD開上的應用私有目錄為\mnt\sdcard\Android\data\hello.file\files\.
在使用SD卡目錄時,需注意SD卡是否掛載,可通過Environment.getExternalStorageState()方法進行判斷,如果返回值為Envirnment.MEDIA_MOUNTED表示SD卡處於掛載狀態,可以放心使用。
getExternalCacheDir()和getCacheDir()比較
共同點:
files will be deleted when the application is uninstalled
不同點:
1、The platform does not monitor the space available in external storage, and thus will not automatically delete these files. Note that you should be managing the maximum space you will use for these anyway, just like with getCacheDir().
2、External files are not always available: they will disappear if the user mounts the external storage on a computer or removes it. See the APIs on Environment for information in the storage state.
3、There is no security enforced with these files. All applications can read and write files placed here.
C. 我把DB2資料庫安裝完了,誰能告訴我如何創建資料庫
這些文件包括日誌文件、配置信息、歷史文件和三個表空間。這些表空間是: SYSCATSPACE:這是保存 DB2 系統編目的地方,系統編目跟蹤與 DB2 對象相關聯的所有元數據。 TEMPSPACE1:DB2 用來放置中間結果的臨時工作區域。 USERSPACE1:默認情況下存放所有用戶對象(表、索引)的地方。所有這些文件都放在默認驅動器上的 DB2 目錄中。默認驅動器通常是安裝 DB2 產品的卷。 對於簡單的應用程序,這個默認配置應該可以滿足需要。但是,可能希望改變資料庫文件的位置,或者改變 DB2 管理這些對象的方式。接下來,我們將更詳細地研究 CREATE DATABASE 命令。 對於從 DB2 8 進行遷移的用戶,有一個特殊的注意事項:在 DB2 9 之前,CREATE DATABASE 命令會為上面列出的所有對象創建 SMS 表空間。在 DB2 9 中,所有表空間都將定義為自動存儲(DMS)表空間。 以下的 CREATE DATABASE 命令將資料庫放在 Windows 操作系統下的 D: 驅動器上的 TEST 目錄中: CREATE DATABASE MYDB ON D:\TEST選擇Automatic storage(默認設鉛前置)允許 DBA 為資料庫設置在創建所有表空間容器時可以使用的存儲路徑。DBA 不必顯式地定義表空間的位置和大小,系統將自動地分配表空間。例如,下面的資料庫創建語句將為資料庫中的所有表空間設置自動存儲。 CREATE DATABASE TEST AUTOMATIC STORAGE ON /db2/storagepath001, /db2/storagepath002, /db2/storagepath003 AUTORESIZE YES INITIALSIZE 300 M INCREASESIZE 75 M MAXSIZE NONE在AUTOMATED STORAGE ON 選項後面,給出了三巧激運個文件目錄(路徑)。這三個路徑是一個表空間的容器的位置。其他的選項是: AUTORESIZE YES 當表空間用光空間時,系統將自動地擴展容器的大小。 INITIALSIZE 300 M 沒有定義初始大小的任何錶空間的大小默認為 300 MB。每個容器是 100 MB(有三個存儲路徑)。 INCREASESIZE 75 M (或百分數) 當表空間用光空間時,表空間的總空間增加 75 MB。還可以指定一個百分數,在這種情況下,表空間會增長它的當前大小的百分數。 MAXSIZE NONE 表空間的最大大小沒有限制。如果 DBA 希望限制一個表空間可以佔用的存儲空間,那麼可以指定一個最大值。 當使用 AUTOMATIC STORAGE 定義表空間時,不需要提供其他參數: CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE; 在這個命令中,可以提供與表空間相關聯的任何參數;但是,使用自動存儲可以大大簡化日常的表空間維護。與重要的大型生產表相關聯的表空間可能需要 DBA 更多地干預。 在沒有啟用自動存儲的資料庫中創建表空間時,必須指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用這些子句會分別創建 SMS 表空間和 DMS 表空間。在這兩種情況下,都必須提供容器的顯式列表。 如果資料庫啟用了自動存儲,那麼有另一個選擇。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(這意味著自動存儲)。在這種情況下,不提供容器定義,因為 DB2 會自動地分配容器。 代碼頁和整理次序所有DB2 字元數據類型(CHAR、VARCHAR、CLOB、DBCLOB)都有一個相關聯的字元代碼頁。可以認為代碼頁是一個對照表,用來將字母數字數據轉換為資料庫中存儲的二進制數據。一個 DB2 資料庫只能使用一個代碼頁。代碼頁是在 CREATE DATABASE 命令中使用 CODESET 和 TERRITORY 選項設置的。代碼頁可以使用單一位元組表示一個字母數字字元(單一位元組可以表示 256 個獨特元素),也可以使用多個位元組。 英語等語言包含的獨特字元相當少;因此孝梁單位元組代碼頁對於存儲數據足夠了。日語等語言需要超過 256 個元素才能表示所有的獨特字元;因此需要多位元組代碼頁(通常是雙位元組代碼頁)。 在默認情況下,資料庫的整理次序根據 CREATE DATABASE 命令中使用的代碼集進行定義。如果指定選項 COLLATE USING SYSTEM,就根據為資料庫指定的 TERRITORY 對數據值進行比較。如果使用選項 COLLATE USING IDENTITY,那麼以逐位元組的方式使用二進製表示來比較所有值。 DB2 Administration Guide 列出了創建資料庫時可用的各種代碼頁。在大多數情況下,DBA 會讓這個設置保持為資料庫所在的操作系統的默認代碼頁。 對於需要使用 XML 數據的應用程序,有一個特殊的注意事項。當前,DB2 只在定義為 Unicode(UTF-8)的資料庫中支持 XML 列。
D. 資料庫索引有哪幾種怎樣建立索引
種類:
1、按照索引列值的唯一性,索引可分為唯一索引和非唯一索引;
非唯一索引:
create index 索引名 on 表名(列名) tablespace表空間名;
唯一索引:
建立主鍵或者唯一約束時會自動在對應的列上建立唯一索引;
2、索引列的個數:單列索引和復合索引;
3、按照索引列的物理組織方式。
索引的創建格式:
CREATEUNIUQE|BITMAPINDEX<schema>.<index_name>ON<schema>.<table_name>(<column_name>|<expression>ASC|DESC,<column_name>|<expression>ASC|DESC,...)TABLESPACE<tablespace_name>STORAGE<storage_settings>LOGGING||COMPRESS<nn>NOSORT|REVERSEPARTITION|GLOBALPARTITION<partition_setting>
使用USER_IND_COLUMNS查詢某個TABLE中的相應欄位索引建立情況
使用DBA_INDEXES/USER_INDEXES查詢所有索引的具體設置情況。
在Oracle中的索引可以分為:B樹索引、點陣圖索引、反向鍵索引、基於函數的索引、簇索引、全局索引、局部索引等,下面逐一講解:
一、B樹索引:
最常用的索引,各葉子節點中包括的數據有索引列的值和數據表中對應行的ROWID,簡單的說,在B樹索引中,是通過在索引中保存排過續的索引列值與相對應記錄的ROWID來實現快速查詢的目的。其邏輯結構如圖:
可以保證無論用戶要搜索哪個分支的葉子結點,都需要經過相同的索引層次,即都需要相同的I/O次數。
B樹索引的創建示例:
create index ind_t on t1(id);
注1:索引的針對欄位創建的,相同欄位不能創建一個以上的索引;
注2:默認的索引是不唯一的,但是也可以加上unique,表示該索引的欄位上沒有重復值(定義unique約束時會自動創建);
注3:創建主鍵時,默認在主鍵上創建了B樹索引,因此不能再在主鍵上創建索引。
二、點陣圖索引:
有些欄位中使用B樹索引的效率仍然不高,例如性別的欄位中,只有「男、女」兩個值,則即便使用了B樹索引,在進行檢索時也將返回接近一半的記錄。
所以當欄位的基數很低時,需要使用點陣圖索引。(「低」的標準是取值數量 < 行數*1%)
反向鍵索引是一種特殊的B樹索引,在存儲構造中與B樹索引完全相同,但是針對數值時,反向鍵索引會先反向每個鍵值的位元組,然後對反向後的新數據進行索引。例如輸入2008則轉換為8002,這樣當數值一次增加時,其反向鍵在大小中的分布仍然是比較平均的。
反向鍵索引的創建示例:
createindex ind_t on t1(id) reverse;
註:鍵的反轉由系統自行完成。對於用戶是透明的。
四、基於函數的索引:
有的時候,需要進行如下查詢:select * from t1 where to_char(date,'yyyy')>'2007';
但是即便在date欄位上建立了索引,還是不得不進行全表掃描。在這種情況下,可以使用基於函數的索引。其創建語法如下:
create index ind_t on t1(to_char(date,'yyyy'));
註:簡單來說,基於函數的索引,就是將查詢要用到的表達式作為索引項。
五、全局索引和局部索引:
這個索引貌似很復雜,其實很簡單。總得來說一句話,就是無論怎麼分區,都是為了方便管理。
具體索引和表的關系有三種:
1、局部分區索引:分區索引和分區表1對1
2、全局分區索引:分區索引和分區表N對N
3、全局非分區索引:非分區索引和分區表1對N
創建示例:
首先創建一個分區表
createtable student
(
stuno number(5),
sname vrvhar2(10),
deptno number(5)
)
partition by hash (deptno)
(
partition part_01 tablespace A1,
partition part_02 tablespace A2
);
創建局部分區索引(1v1):
create index ind_t on student(stuno)
local(
partition part_01 tablespace A2,
partition part_02 tablespace A1
);--local後面可以不加
創建全局分區索引(NvN):
create index ind_t on student(stuno)
globalpartition by range(stuno)
(
partition p1 values less than(1000) tablespace A1,
partition p2 values less than(maxvalue) tablespace A2
);--只可以進行range分區
創建全局非分區索引(1vN)
createindex ind_t on student(stuno) GLOBAL;
E. oracle 資料庫 表空間
創建表用戶
並指定表空間(test123_TEMP為一個臨時表空間名)
create
user
test000
identified
by
test000
default
tablespace
test123
temporary
tablespace
test123_TEMP;
給用戶付許可權
GRANT
CONNECT,RESOURCE,DBA
TO
ODJUKE;
F. 有關Oracle資料庫的備份情況
一 意義 當我們使用一個資料庫時 總希望數喊者據庫的內容是可靠的 正確的 但由於計算機系統的故障(硬體故障 網路故障 進程故障和系統故障)影響資料庫系統的操作 影響資料庫中數據的正確性 甚至破壞資料庫 使資料庫中全部或部分數據丟失 因此當發生上述故障後 希望能重新建立一個完整的資料庫 該處理稱為資料庫恢復 恢復子系統是資料庫管理系統的一個重要組成部分 恢復處理隨所發生的故障類型所影響的結構而變化 二 備份的方法ORACLE資料庫有三種標準的備份 導出/導入(EXPORT/IMPORT) 冷備份 熱備份 導出備份是一種邏輯備份 這種方法包括讀取一系列的資料庫日誌 並寫入文件中 這些日誌的讀取與其所處位鄭答薯置無關 冷備份和熱備份是物理備份(也稱低級備份) 它涉及到組成資料庫的文件 但不考慮邏輯內容 下面我們分別介紹一下這三種備份方法及其特點 (一) 導出/導入(EXPORT/IMPORT)EXPORT/IMPORT是用來將ORACLE中數據移出/移入資料庫 EXPORT將資料庫中數據備份成一個二進制系統文件稱為 導出轉儲文件 (EXPORT DUMP FILE) 並將重新生成資料庫寫入文件中 它有三種模式 a 用戶模式 導出用戶所有對象以及對象中的數據 b 表模式 導出用戶所有表或者指定的表 c 整個資料庫 導出資料庫中所有對象 它的備份有三種類型 a 完全型(PLETE EXPORT) 備份整個資料庫 b 積累型(ULATIVE ERPORT) 備份上一次積累型備份所改變的數據 c 增量型(INCREAMENTAL EXPORT) 備份上一次備份後改變的數據 EXPORT 的命令可以互動式進行 各參數的具體含義見附錄 在進行導出備份時我們要考慮一點問題 那就是導出的一致性 在導出過程 中導出每讀一次就讀取一個表 因而盡管導出是在一個特點時自己開始的 但不同的表讀取的時間不同 因此 導出開始讀一個表時 此時表中的數據才是導出的數據 這樣當大多數表按內部關鍵字和外部關鍵字相互聯系時 在導出過程中這些相關聯表的改變就會導致導出的不一致性 要避開這個 我們可以將導出過程安排在不對表操作的時候進行 另外 當ORACLE中RESTRICTEP CONSISTENT 選項就可以保證導出數據一致性
IMPORT導入 導入的過程是導出的逆過程 這個命令先讀取導出來的導出轉儲二進制文件 並運行文件 恢復對象用戶和數據 IMPORT命令執行的方法和EXPORT方案有關 如果EXPORT所實施的是完全型方案(FULL)則在IMPORT時所有的數據對象 包括表空間 數據文件 用戶都會在導入時創建 但考慮到資料庫中的物理布局 預先創建表空間和用戶是有用的 如果EXPORT使用的是INCREMENTAL/CUMULATIVE方式 則需要預先設置好表空間 用戶 數據文件 (二) 冷備份冷備份發生在資料庫已經正常關閉的情況下 當正常關閉時會提供給我們一個完整的資料庫 資料庫使用的每個文件都被備份下來 這些文件包括 所有數據文件所有控制文件所有聯機REDO LOG 文件INIT ORA文件(可選)值得注意的是冷備份必須是資料庫關閉的情況下舉歲完成 當資料庫開著的時候 執行資料庫文件系統備份無效 作冷備份一般步驟是 正常關閉要備份的實例(instance); : 備份整個資料庫到一個目錄 啟動資料庫 SQLDBA>connect internalSQLDBA>shutdown normal SQLDBA>! cp <file> <backup directory>或SQLDBA>!tar cvf /dev/rmt/ /dg/oracle SQLDBA>startup
(三)熱備份(ACHIRELOG)資料庫需要二十四小時運行 而且隨時有新的數據加入 數據丟失將影響整個公司 採用archivelog mode物理備份 ?設置資料庫為automatic archivelog mode #su oracle%svrmgrl svrmgrl>connect internalsvrmgrl>startup mount svrmgrl>alter database archivelogsvrmgrl>shutdownsvrmgrl>exit%vi initoracle ora加入log_archive_start = true # if you want automatic archivinglog_archive_dest = $ORACLE_HOME/dbs/archlog_archive_format = log%s arc%dbstart%ps ef|grep archoracle : : ? : ora_arch_oracle 注 oracle database is in automatic archivelog mode
?full offline entire database backup 當資料庫初始完成後 這份備份是將來備份的基礎 它提供了所有與資料庫有關的拷貝 %dbshut%cp /oracle/oradata/oracle /system dbf /oracle/oradata/oracle /rbs dbf /oracle/oradata/oracle /temp dbf/oracle/oradata/oracle /tools dbf/oracle/oradata/oracle /users dbf/oraclecle/app/oracle/proct/ /dbs/application dbf/oracle/app/oracle/proct/ /dbs/apptmpsp dbf/oracle/app/oracle/proct/ /dbs/apprlbksp dbf/oracle/oradata/oracle /redooracle log /oracle/oradata/oracle /control ctl /oracle/oradata/oracle /control ctl /oracle/oradata/oracle /control ctl <backup directory>%dbstart 注:以上* dbf文件為數據文件 * log文件為日誌文件 * ctl文件為控制文件%exit %tar uvf /dev/rmt/ <backup files> 注:如果為oracle 則 相應的 data files relog files control files
每天做一次 partial online with archiving backups #su oracle%svrmgrl%svrmgrl>connect internal%svrmgrl>alter tablespace billsp begin backup%svrmgrl>alter tablespace billtmpsp begin backup%svrmgrl>alter tablespace billrlbksp begin backup%svrmgrl>alter tablespace system begin backup %svrmgrl>alter tablespace rbs begin backup%svrmgrl>alter tablespace temp begin backup%svrmgrl>alter tablespace tools begin backup %svrmgrl>alter tablespace users begin backup %svrmgrl>host cp all datafile to the backup storage #文件名如第一步中以 dbf結尾的 %svrmgrl>alter tablespace billsp end backup%svrmgrl>alter tablespace billtmpsp end backup%svrmgrl>alter tablespace billrlbksp end backup%svrmgrl>alter tablespace system end backup %svrmgrl>alter tablespace rbs end backup%svrmgrl>alter tablespace temp end backup%svrmgrl>alter tablespace tools end backup %svrmgrl>alter tablespace users end backup
做一個sql文件 如上所寫
The billing system can recover to the point of failure when the failure occur
七 備份文件的恢復 恢復文件 以下是對"/etc/passwd"文件的恢復( 放入正確的磁帶( 運行以下命令恢復"/etc/passwd"文件# rsh mt f /dev/rmt/ rew( 找到最近的磁帶 向前進帶到最近的"/etc/passwd" 比如要找星期三的"/etc/passwd"文件 運行如下命令)#rsh mt f /dev/rmt/ n fsf # ufsrestore if :/dev/rmt/ nufsrestore > ls. etc/ufsrestore > cd etc ufsrestore > ls./etc passwfsrestore > add passwdWarnign ./etc File existsufsrestore > verboseverbose mode onufsrestore > extractExtract requested filesYou have not read any volumes yet .Unless you know which volume your file(s) are on you should start witch the last volume and work to wards the first.Specify next volume # extract file ./etc/passwdAdd linksSet directory mode ower and times.set owner /mode for . ?(yn)nDirectories already exit set mode anyway?(yn)yufsrestore >quit 熱備份可以在資料庫打開打情況下進行 一般通過使用Alter命令改變表空間的狀態來開始進行備份的 備份完成後 要恢其原來狀態 否則redo log 會錯配 引起資料庫下次啟動時對受影響的表空間進行完全覆蓋 熱備份的要求是 熱備份工作必需要求資料庫在Archivelog 方式下操作 在SQLDBA狀態下用alter database archivelog|noarchivelog命令可改變備份的模式 熱備份只能在資料庫不使用或使用率低的情況下進行 熱備份需要大量的檔案空間 一般情況 Oracle 以循環的方式寫入Online redo log 文件 當填滿第一個redo log文件後寫第二個 直至最後一個 最後一個被填滿後 後台進程LGWR就覆蓋第一個 在Archivelog方式下 後台進程ARCH在每一個redo log 文件被覆蓋前 給它作一個拷貝 一般 這些文檔的redo log 文件被寫入磁碟或磁帶中 如果磁碟空間夠用 建議使用磁碟 這樣可大大減少完成備份所需的時間 在作熱備份之前 要將config ora文件中的log_archive_start 設為true 將log_archive_dest規定archive redo log 文件的位置 log_archive_dest=/dg/oracle/arch/archlog_archive_start=true一旦資料庫運行在archivelog狀態下 就可以作備份了 熱備份的命令文件由三部分組成 數據文件一個表空間一個空間地備份 a 設置表空間為備份狀態 b 備份表空間的數據文件 c 恢復表空間為正常狀態 備份歸檔要作log 文件 a 臨時停止歸檔進程b log下那些在archive redo log目標目錄中的文件c 重新啟動archive進程d 備份歸檔的redo log 文件 用alter database backup controlfile命令來備份拷貝文件在熱備份運行之前log_archive_dest目錄可能已滿 這時就要備份目錄 然後刪除文件 釋放空間 這個過程有如下步驟 暫時停止archive進程 記錄在log_archive_dest目錄下的文件 重新啟動archive 進程 備份archive redo log 文件 刪除目錄中的文件 sqldba lmode=y <<EOF arch archive log stop;exitEOF arch FILES= ls /dg/oracle/arch/arch* dbf ;sqldba lmode=y<<EOF arch connect internalarchive log start;exitEOF arch tar rvf /dev/rmt/ FILESrm f $FILES
邏輯備份與物理備份的結合 前面介紹了三種備份的方法 在資料庫做備份時 應該將數據這三種備份的特點靈活運用 我們首先比較一下三種方法的特性
方 法類 型恢 復 特 性EXPORT導出邏輯型可以將任何資料庫對象恢復到它被導出時的狀態乻hutdown?將最近es of datafile 拷貝到$oracle_home/dbs目錄 ?%svrmgrl?svrmgrl>connect internal…svrmgrl>startup mount pfile=filename exclusive?svrmgrl>alter database recover;注:將自動恢復數據到the point of failure;? svrmgrl>alter database open; ?當archive log文件過多時 在 做過部分備份後 可將current log sequence 之前的log*** arc刪除 #su oracle%svrmgrlsvrmgrl>connect internal;svrmgrl>archive log list; #此處標有current log sequence 假設為 Svrmgrl>exit$cd /billdg/oracle/app/oracle/proct/ /dbs/arch$ rm #將log arc之前的文件如log arc log arc 刪除 冷 備 份物理型可將資料庫到它被關閉的狀態熱 備 份物理型可將資料庫恢復到任一時間點的狀態
當資料庫比較小時 處理業務也小時 冷備份導出就可以了 如果只對一兩個表備份導出就夠了 一般來說一個好 備份最終執行總包括邏輯和物理 導出確認資料庫在邏輯的正確性而物理備份確保物理 另外 在進行備份時需要一些存儲介質 對於這些介質應該對其作好管理 根據備份的內容 日期將介質統一編號 以免備份和恢復時弄錯介質 造成原有的備份丟失 介質應存放在與計算機設備不同的地點 以免機房發生意外時 備份與計算機設備一同損壞
附錄 tar命令tar option [arguments] filename option:c:創建一個由命令行指定的新的tarfilet:列出tarfile中的內容x:打開tarfile;f:使用其後的filename 或/dev/rmt/ | v:列出被恢復的文件名 p:恢復文件example:#tar cvf /dev/rmt/ /oracle備份/root 下的所有內容#tar tvf /dev/rmt/ 列出磁帶上的所有內容#tar xvf /dev/rmt/ /oracle將磁帶上的/oracle目錄中的內容恢復到當前目錄中
導出選項關鍵字 內 容 USERID 運行導出命令的帳號的用戶名/口令 BUFFEER 用來取數據行的緩沖區的大小 FILE 導出轉儲文件的名字PRESS 導出是否應該壓縮有碎片的段成一個范圍 這將會影響STORAGE 子句 GRANTS 導出時否要導出資料庫對象上的授權INDEXES 是否要導出表上的索引ROWS 是否應導出行 如它為 N 那麼在導出文件中僅生成資料庫 對象的DDLCONSSTRAINTS 是否導出表舊的約定條件FULL 如設為 Y 那麼將執行一個整個資料庫導出操作OWNER 要導出的一系列資料庫帳號 然後執行這些帳號的USER導出操 作TABLES 要導出的一系列表 執行這些表的TABLE導出操作RECORDLENGTH 轉儲導出文件日誌的長度(以位元組為單位) 通常都使用預設 除非要在兩個不同操作系統中傳遞導出文件INCTYPE 正在執行的導出操作的類型(有效值有 PLETE (預設值) CUMULATIVE 和 IVCREMENTAL )RECORD 在增量導出類型中的一個標記 標明是否將日誌存儲到數據字典中日誌導出的表中PARFILE 要傳遞給導出的參數文件的名字 這個文件將包含所有參數的入口項ANALYZE 標明是否將移對象的統計信息寫入導出轉儲文件中CONSISTENT 標明是否保留所有導出對象的讀取一致復制 LOG 導出日誌將要寫入的文件的名字MLS 標明是否要導出MLS 標號MLS_LABEL_ 規定了MLS標號的格式
導入選擇項USERID 運行導入命令的帳號的用戶名/口令 BUFFEER 用來取數據行的緩沖區的大小 FILE 導入轉儲文件的名字SHOW 規定文件內容是否被顯示 而不是被執行 EGORE 標明在執行 CREATE 命令時 是否忽略遇到的錯誤 如果正在導入的對象已經存在時 應使用這個參數 FULL 如設為 Y 那麼將執行一個整個資料庫導入操作FROMUSER 在FULL=N的情況下 才有參數 它是一系列的資料庫帳號 其對象應從導出轉儲文件中讀取 TOUSER 一系列資料庫帳號 導出轉儲文件扣的對象將要導入這些帳號 GRANTS 導入時否要導入資料庫對象上的授權INDEXES 是否要導入表上的索引ROWS 是否應導入行 如它為 N 那麼在導入文件中執行資料庫對象的DDLFULL 如設為 Y 那麼將執行一個整個資料庫導出操作TABLES 要導入的一系列表RECORDLENGTH 轉儲導入文件日誌的長度(以位元組為單位) 通常都使用預設 除非要在兩個不同操作系統中傳遞導入文件INCTYPE 正在執行的導入操作的類型(有效值有 PLETE (預設值) CUMULATIVE 和 IVCREMENTAL )PARFILE 要傳遞給導入的參數文件的名字 這個文件將包含所有參數的入口項ANALYZE 標明是否將移對象的統計信息寫入導入轉儲文件中LOG 導入日誌將要寫入的文件的名字MLS 標明是否要導入MLS 標號
熱備份的命令文件 ORACLE_SID=oracle ORACLE_HOME=/dg/oraclesqldba lmode=y<<EOF arch connect internalalter tablespace SYSTEM begin backup;!tar cvf /dev/rmt/ /dg/oracle/dbms/sys dbfalter tablespace SYSTEM end backup;
alter tablespace BWT begin backup;!tar cvf /dev/rmt/ /dg/oracle/dbms/BWT dbfalter tablespace BWT end backup;
archive log stopexitEOF arch FILES= ls /dg/oracle/arch/arch* dbf ;
sqldba lmode=y<<EOF arch connect internalarchive log start;exitEOF arch
tar rvf /dev/rmt/ $FILESrm f $files
sqldba lmode=y<<EOFarch alter database backup controlfile to /dg/oracle/dbms/bwtcontrfile backup ;exitEOF arch
lishixin/Article/program/Oracle/201311/17668
G. 在Oracle資料庫中按用戶名重建索引的方法
如果你管理的Oracle資料庫下某些應用項目有大量的修改刪除操作 數據索引是需要周期性爛派的重建的
它不僅可以提高查詢性能 還能增加索引表空間空閑空間大小
在ORACLE里大量刪除記錄後 表和索引里佔用的數據塊空間並沒有釋放
重建索引可以釋放已刪除記錄索引佔用的數據塊空間
轉移數據 重命名的方法可以重新組織表裡的數據
下面是可以按ORACLE用戶名生成重建索引的SQL腳本
SET ECHO OFF; SET FEEDBACK OFF; SET VERIFY OFF; SET PAGESIZE ; SET TERMOUT ON; SET HEADING OFF; ACCEPT username CHAR PROMPT Enter the index username: ; spool /oracle/rebuild_&username sql; SELECT REM + + || chr( ) || REM | INDEX NAME : || owner || || segment_name || lpad( | (length(owner) + length(segment_name)) ) || chr( ) || REM | BYTES : || bytes || lpad ( | (length(bytes)) ) || chr( ) || REM | EXTENTS : || extents || lpad ( | (length(extents)) ) || chr( ) || REM + + || chr( ) || ALTER INDEX || owner || || segment_name || chr( ) || REBUILD || chr( ) || TABLESPACE || tablespace_name || chr( ) || STORAGE ( || chr( ) || INITIAL || initial_extent || chr( ) || NEXT || next_extent || chr( ) || MINEXTENTS || min_extents || chr( ) || MAXEXTENTS || max_extents || chr( ) || PCTINCREASE || pct_increase || chr( ) || ); || chr( ) || chr( ) FROM dba_segments WHERE segment_type = INDEX AND owner= &username ORDER BY owner bytes DESC; spool off;
如果你用的是WINDOWS系統 想改變輸出文件的存放目錄 修改spool後面的路徑成
spool c oraclerebuild_&username sql
如果你只想對大於max_bytes的索引重建索悶檔引 可以修改上面的SQL語句
在AND owner= &username 後面加個限制條件 AND bytes> &max_bytes
如果你想修改索引的存儲參數 在重建索引rebuild_&username sql里改也可以
比如把pctincrease不等於零的值改成是零
生成的rebuild_&username sql文件我們需要來分析一下飢罩賀 它們是否到了需要重建的程度
分析索引 看是否碎片嚴重 SQL>ANALYZE INDEX &index_name VALIDATE STRUCTURE; col name heading Index Name format a col del_lf_rows heading Deleted|Leaf Rows format col lf_rows_used heading Used|Leaf Rows format col ratio heading % Deleted|Leaf Rows format SELECT name del_lf_rows lf_rows del_lf_rows lf_rows_used to_char(del_lf_rows / (lf_rows)* ) ratio FROM index_stats where name = upper( &index_name );
當刪除的比率大於 % 時 肯定是需要索引重建的
經過刪改後的rebuild_&username sql文件我們可以放到ORACLE的定時作業里
比如一個月或者兩個月在非繁忙時間運行
如果遇到ORA 錯誤 表示索引在的表上有鎖信息 不能重建索引
那就忽略這個錯誤 看下次是否成功
對那些特別忙的表要區別對待 不能用這里介紹的方法
lishixin/Article/program/Oracle/201311/19038
H. Oracle資料庫中為新創建的表分配的初始空間通常為多大
每個表都有自己的存儲參數,如果建表時不指定就使用當前表空間的,建表空間時候不指定,一般默認是
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
)
即新建表分配64k,每次擴展1M。
I. Oracle 10i資料庫創建過程
Oracle i資料庫安裝結束後 可以使用dbca來創建資料庫 下面是具體的創建過程 我會重點提示和 i不同的地方 啟動dbca 選擇create a database 選擇new database 提示輸入Global Database Name和SID 和 i不同的是在同一個界面會提示輸入sys和system的密碼 而 i如果我沒機錯的話應該是在建庫結束的時候才輸入的 如下圖 資料庫存儲選項中 有了三個選擇 在 i中是沒有選擇的 現在我們可以選擇是我們的數據文件具體是放在什麼地方 文件系統 ASM或裸設備上 在 i中我們只能在後面的數滑世據文件存儲位置里自己定義數據文件是位於文件系統還是位於裸設備上 特別值得關注的是ASM 這是Oracle i的一個新特性 在隨後的文章里我將向大家詳細介紹ASM 如下圖 和 i一樣提示選擇Database Components和Custom Scripts 如果你用不上這些 建議不要選 和 i相同 選擇伺服器運行模式 我選擇Dedicated Server Mode 在設定初始參數時 有以下幾個變化 其中Character Sets中多了兩個選項 Default language to be used for the database: (可以選simplified chinese)和 Default date format to be used for the database: (可以選擇china) 這兩個選項對應的是兩個初始化參數 nls_language和nls_territory 這兩個參數 i中就有了 但是這里有個問題 就是如果你在第一選項中選擇了 simplified chinese 建庫的時候會報錯 原因在於使用dbca生成初始化參數時nls_language的值沒有雙引號 對於AMERICAN來說是沒有問題 但因為SIMPLIFIED CHINESE是兩個單詞沒有了雙引號Oracle就不認識了 正確形式如下 nls_language = SIMPLIFIED CHINESE nls_territory=CHINA File Locations中spfile的默認位置改成了數據文件的存放位置 這樣存放備份方便就會方便很多 不像以前需要備份不同目錄中的文件 多了一個OMF 在此我們可以定義Oracle Managed File的位置 如下圖 和 i相同 設置Database Storage 但這里有了些細節上的變化 其中SYSTEM表空間的默認大小由之前的 M變成了 M 呵呵 系統越來越大^_^ 另外一個就是在 i不同的資料庫組件放在不同的表空間上 所以默認情況下會一次性多出好幾個表空間出來 在這里全部放在SYSAUX表空間中了 變化最大要算是Redo log的默認大小了 i默認就是 M 而在 i里的默認值是 M 可以看森讓隱出Oracle同樣在不斷調整 至此廳此就開始建庫了 從建庫的界面上可以看到添加很多內容 JAVA XML等 建庫結束後啟動SQLPLUS 可以看到下面的信息 tiger> sqlplus /as sysdba SQL*Plus: Release Beta on Mon Jun : : Copyright (c) Oracle Corporation All rights reserved Connected to:Oracle i Enterprise Edition Release bit BetaWith the Partitioning and Oracle Data Mining optionsSQL> select * from v$version;BANNER Oracle i Enterprise Edition Release bit BetaPL/SQL Release BetaCORE BetaTNS for HPUX: Version BetaNLSRTL Version Beta好了 一個Oracle i的資料庫到此就建好了 lishixin/Article/program/Oracle/201311/16812
J. Oracle資料庫數據對象分析
Oracle資料庫數據對象中最基本的野弊穗是表和視圖 其他還有約束 序列 函數 存儲過程 包 觸發器等 對資料庫的操作可以基本歸結為對數據對象的操作 理解和掌握Oracle資料庫對象是學習Oracle的捷徑 表和視圖Oracle中表是數據存儲的基本結構 ORACLE 引入了分區表和對象表 ORACLE i引入了臨時表 使表的功能更強大 視圖是一個或多個表中數據的邏輯表達式 本文我們將討論怎樣創建和管理簡單的表和視圖 管理表表可以看作有行和列的電子數據表 表是關系資料庫中一種擁有數據的結構 用CREATE TABLE語句建立表 在建立表的同時 必須定義表名 列 以及列的數據類型和大小 例如 CREATE TABLE procts( PROD_ID NUMBER( ) PROD_NAME VAECHAR ( ) STOCK_QTY NUMBER( )); 這樣我們就建立了一個名為procts的表 關鍵詞CREATE TABLE後緊跟的表名 然後定義了三列 同時規定了列的數據類型和大小 在創建表的同時你可以規定表的完整性約束 也可以規定列的完整性約束 在列上普通的約束是NOT NULL 關於約束的討論我們在以後進行 在建立或更改表時 可以給表一個預設值 預設值是在增加行時 增加的數據行中某一項值為null時 oracle即認為該值為預設值 下列數據字典視圖提供表和表的列的信息 DBA_TABLES DBA_ALL_TABLES USER_TABLES USER_ALL_TABLES ALL_TABLES ALL_ALL_TABLES DBA_TAB_COLUMNS USER_TAB_COLUMNS ALL_TAB_COLUMNS表的命名規則表名標識一個表 所以應盡可能在表名頌卜中描述表 oracle中表名或列名最長可以達 個字元串 表名應該以字母開始 可以在表名中包含數字 下劃線 # $等 從其它表中建立表可以使用查詢從基於一個或多個表中建立表 表的列的數據類型和大小有查詢結果決定 建立這種形式的表的查詢可以選擇其他表中所有的列或者只選擇部分列 在CREATE TABLE語句中使用關鍵字AS 例如:SQL>CREATE TABLE emp AS SELECT * FROM employeeTABLE CREATEDSQL> CREATE TABLE Y AS SELECT * FROM X WHERE no= 需要注意的是如果查詢涉及LONG數據類型 那麼CREATE TABLE AS SELECT 將不會工作 更改表定義在建立表後 有時候我們可能需要修改表 比如更改列的定義 更改預設值 增加新列 刪除列等等 ORACLE使用ALTER TABLE語句來更改表的定義 增加列語法 ALTER TABLE [schema ] table_name ADD column_definition 例 ALTER TABLE orders ADD order_date DATE;TABLE ALTER 對於已經存在的數據行 新列的值將是NULL 更改列語法 ALTER TABLE [schema ] table_name MODIFY column_name new_attributes; 例 ALTER TABLE orders MODITY (quantity number( ) status varchar ( )); 這個例子中我們修改了表orders 將STATUS列的長度增加到 將QUANTITY列減小到 ;修改列的規則如下 可以增加字元串數據類型的列的長度 數字數據類型列的精度 減少列的長度時 該列應該不包含任何值 所有數據行都為NULL 改變數據類型時 該列的值必須是NULL 對於十進制數字 可以增加或減少但不能降低他的卜裂精度 刪除數據列優化ORACLE資料庫 唯一的方法是刪除列 重新建立資料庫 在ORACLE i中有很多方法刪除列 你可以刪除未用數據列或者可以標示該列為未用數據列然後刪除 刪除數據列的語法是 ALTER TABLE [schema ] table_name DROP {COLUM column_names | (column_names)}[CASCADE CONSTRAINS] 要注意的是在刪除列時關於該列的索引和完整性約束也同時刪除 注意關鍵字CASCADE CONSTRAINS 如果刪除的列是多列約束的一部分 那麼這個約束條件相對於其他列也同時刪除 如果用戶擔心在大型資料庫中刪除列要花太多時間 可以先將他們標記為未用數據列 標記未用數據列的語法如下 ALTER TABLE [schema ] table_name SET UNUSED {COLUM column_names | (column_names)}[CASCADE CONSTRAINS] 這個語句將一個或多個數據列標記為未用數據列 但並不刪除數據列中的數據 也不釋放佔用的磁碟空間 但是 未用數據列在視圖和數據字典中並不顯示 並且該數據列的名稱將被刪除 新的數據列可以使用這個名稱 基於該數據列的索引 約束 統計等都將被刪除 刪除未用數據列的語句是 ALTER TABLE [schema ] table_name DROP {UNUSED COLUM | COLUMN CONTINUE} 刪除表和更改表名刪除表非常簡單 但它是一個不可逆轉的行為 語法 DROP TABLE [schema ] table_name [CASCADE CONSTRAINTS] 刪除表後 表上的索引 觸發器 許可權 完整性約束也同時刪除 ORACLE不能刪除視圖 或其他程序單元 但oracle將標示他們無效 如果刪除的表涉及引用主鍵或唯一關鍵字的完整性約束時 那麼DROP TABLE語句就必須包含CASCADE CONSTRAINTS子串 更改表名RENAME命令用於給表和其他資料庫對象改名 ORACLE系統自動將基於舊表的完整性約束 索引 許可權轉移到新表中 ORACLE同時使所有基於舊表的資料庫對象 比如視圖 程序 函數等 為不合法 語法 RENAME old_name TO new_name; 例 SQL> RENAME orders TO purchase_orders;TABLE RENAMED截短表TRUNCATE命令與DROP命令相似 但他不是刪除整個數據表 所以索引 完整性約束 觸發器 許可權等都不會被刪除 預設情況下將釋放部分表和視圖空間 如果用戶不希望釋放表空間 TRUNCATE語句中要包含REUSE STORAGE子串 TRUNCATE命令語法如下 TRUNCATE {TABLE|CLUSTER} [schema ] name {DROP|REUSE STORAGE} 例 SQL> TRUNCATE TABLE t ;TABLE truncate 管理視圖視圖是一個或多個表中的數據的簡化描述 用戶可以將視圖看成一個存儲查詢(stored query)或一個虛擬表(virtual table) 查詢僅僅存儲在oracle數據字典中 實際的數據沒有存放在任何其它地方 所以建立視圖不用消耗其他的空間 視圖也可以隱藏復雜查詢 比如多表查詢 但用戶只能看見視圖 視圖可以有與他所基於表的列名不同的列名 用戶可以建立限制其他用戶訪問的視圖 建立視圖CREATE VIEW命令創建視圖 定義視圖的查詢可以建立在一個或多個表 或其他視圖上 查詢不能有FOR UPDATE子串 在早期的ORACLE i版本中不支持ORDER BY子串 現在的版本中CREATE VIEW可以擁有ORDER BY子串 例 SQL> CREATE VIEW TOP_EMP AS SELECT empno EMPLOYEE_ID ename EMPLOYEE_NAME salary FROM empWHERE salary > 用戶可以在創建視圖的同時更改列名 方法是在視圖名後立即加上要命名的列名 重新定義視圖需要包含OR REPLACE子串 SQL> CREATE VIEW TOP_EMP(EMPLOYEE_ID EMPLOYEE_NAME SALARY) AS SELECT empno ename salary FROM empWHERE salary > 如果在創建的視圖包含錯誤在正常情況下 視圖將不會被創建 但如果你需要創建一個帶錯誤的視圖必須在CREATE VIEW語句中帶上FORCE選項 如 CREATE FORCE VIEW ORDER_STATUS AS SELECT * FROM PURCHASE_ORDERSWHERE STATUS= APPPOVE ;SQL>/warning :View create with pilation errors 這樣將創建了一個名為ORDER_STATUS的視圖 但這樣的視圖的狀態是不合法的 如果以後狀態發生變化則可以重新編譯 其狀態也變成合法的 從視圖中獲得數據從視圖中獲得數據與從表中獲得數據基本一樣 用戶可以在連接和子查詢中使用視圖 也可以使用SQL函數 以及所有SELECT語句的字串 插入 更新 刪除數據用戶在一定的限制條件下可以通過視圖更新 插入 刪除數據 如果視圖連接多個表 那麼在一個時間里只能更新一個表 所有的能被更新的列可以在數據字典USER_UPDATETABLE_COLUMNS中查到 用戶在CREATE VIEW中可以使用了WITH子串 WITH READ ONLY子串表示創建的視圖是一個只讀視圖 不能進行更新 插入 刪除操作 WITH CHECK OPTION表示可以進行插入和更新操作 但應該滿足WHERE子串的條件 這個條件就是創建視圖WHERE子句的條件 比如在上面的例子中用戶創建了一個視圖TOP_EMP 在這個視圖中用戶不能插入salary小於 的數據行 刪除視圖刪除視圖使用DROP VIEW命令 同時將視圖定義從數據字典中刪除 基於視圖的許可權也同時被刪除 其他涉及到該視圖的函數 視圖 程序等都將被視為非法 例 DROP VIEW TOP_EMP; 完整性約束 完整性約束用於增強數據的完整性 Oracle提供了 種完整性約束 Check NOT NULL Unique Primary Foreign key完整性約束是一種規則 不佔用任何資料庫空間 完整性約束存在數據字典中 在執行SQL或PL/SQL期間使用 用戶可以指明約束是啟用的還是禁用的 當約束啟用時 他增強了數據的完整性 否則 則反之 但約束始終存在於數據字典中 禁用約束 使用ALTER語句ALTER TABLE table_name DISABLE CONSTRAINT constraint_name; 或ALTER TABLE policies DISABLE CONSTRAINT c_gender lishixin/Article/program/Oracle/201311/18217