前提:本機已經安裝了Oracle11g數據庫。
需求:使用PL SQL數據庫連接工具操作Oracle數據庫
一、創建表空間和用戶
想要操作數據庫,首先需要創建用戶並給用戶授予權限;在創建用戶時需要指定表空間並指定用戶在表空間中能夠使用的大小。因此,想要創建用戶,首先需要創建數據庫表空間。
1、采用sqlplus工具創建用戶及表空間:
(1)打開sqlplus工具:開始——》所有程序——》 Oracle --OraDb11g_home1——》應用程序開發——》SQL Plus
(2)創建表空間:
以用戶system連接數據庫,密碼為你安裝數據庫時設置全局數據庫的窗口設置的管理口令,SYSTEM、SYS、SYSMAN、DBSNMP的初始密碼都是這個密碼,用戶SCOTT的初始口令為tiger。
創建表空間的語句:datafile2.dbf為新創建的表空間數據文件,
注意:存放表空間數據文件的目錄(這里是D:\OracleFiles\OracleData)必須已經存在,否則會報下面的錯誤,該目錄是自己定義的,不一定就和下圖中的一樣。


修改數據文件位置后,創建表空間成功:


這里采用的是本地化管理方式創建的,dbsp_2是表空間的名稱,size 10m 表示表空間的大小,extent management local autoallocate是設置當表空間大小已滿時,用自動管理的方式擴展表空間。還有另一種擴展方式是每次擴展相同的大小,語句為:
extent management local uniform size 256K;其中,256k是根據實際需求設置的。
查找表空間大小語句:


(3)創建用戶:


第一個testUser為用戶名,第二個testUser為用戶密碼,default tablespace是默認表空間,這里設置成上面創建的表空間,temporary tablespace是臨時表空間,quote設置用戶在表空間上占用的空間大小。如果不指定默認表空間,Oracle會將SYSTEM表空間指定為用戶的默認表空間;如果沒有用quota子句,用戶在特定表空間的配額為0,用戶不能在該表空間上創建數據對象。
創建用戶后,當用戶分配的空間不夠時,可以擴展用戶的空間:
alter user testUser quota 20m on dbsp_2;將用戶的空間擴展為20m
給用戶指定兩個表空間,並且可使用大小不限制:
alter user userName
quota unlimited on tablespace1
quota unlimited on tablespace2;
quota unlimited on tablespace1
quota unlimited on tablespace2;
注意:在實際應用中建議表數據和表索引分兩個表空間,這時就需要給用戶在兩個表空間分配可使用空間,在創建用戶時還是按照上面提到的方法,只指定一個默認表空間,這樣如果在創建表時沒有指定表空間的情況下,會默認將表創建在默認表空間里(即default tablespace),如果想給數據庫表數據和索引指定不同的表空間,則在給用戶分配可使用空間后,在創建數據庫表和索引時直接指定即可。

修改用戶密碼:
alter user testUser identified by 123456;將用戶的密碼設置為123456。
有時用戶會處於鎖定狀態,解鎖用戶:
alter user testUser account unlock;
(3)為用戶設置權限
初始建立的用戶沒有任何權限,不能執行任何數據庫操作,因此必須為用戶設置權限或者角色。被賦予了某個角色的用戶將擁有該角色所具備的權限,常被用到的系統預定義角色:CONNECT、RESOURCE、DBA、EXP_FULL_DATABASE、IMP_FULL_DATABASE。其中,CONNECT、RESOURCE、DBA主要用於數據庫管理,數據庫管理員需要被授予這三個角色。一般的數據庫開發人員,需要被授予CONNECT、RESOURCE角色即可。EXP_FULL_DATABASE、IMP_FULL_DATABASE角色分別用於操作數據庫導出、導入相關的操作。為用戶授予角色:


(4)創建用戶並為用戶授權的另一種方法:用PL SQL工具
雙擊運行PLSQL Developer軟件,連接到本地的oracle數據庫服務器

在“對象”下,找到users,右擊選擇“新建”

在彈出的“創建用戶”窗口中,輸入新用戶的名稱、口令,默認表空間、臨時表空間等

賦予新用戶權限,賦予其角色權限:connect、resource,這樣用戶才能登錄操作數據庫

(5)創建數據庫用戶完成后,就可以用該用戶名、密碼登錄PL SQL工具操作數據庫了。
(6)刪除用戶語句:
drop user 用戶名 cascade;
刪除空的表空間,但是不包含物理文件
drop tablespace tablespace_name;
刪除非空表空間,但是不包含物理文件
drop tablespace tablespace_name including contents;
刪除空表空間,包含物理文件
drop tablespace tablespace_name including datafiles;
刪除非空表空間,包含物理文件
drop tablespace tablespace_name including contents and datafiles;
如果其他表空間中的表有外鍵等約束關聯到了本表空間中的表的字段,就要加上CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
drop tablespace tablespace_name;
刪除非空表空間,但是不包含物理文件
drop tablespace tablespace_name including contents;
刪除空表空間,包含物理文件
drop tablespace tablespace_name including datafiles;
刪除非空表空間,包含物理文件
drop tablespace tablespace_name including contents and datafiles;
如果其他表空間中的表有外鍵等約束關聯到了本表空間中的表的字段,就要加上CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
二、數據庫數據的導入導出
數據導出:PL SQL登錄成功后,點擊工具--》導出表--》選中要導出的表--》插入SQL--》選中刪掉表選項、去掉包括存儲前面的對號,選擇輸出文件的位置--》點擊導出按鈕--》等待導出完成。

數據導入:點擊PL SQL左上角的新建--》命令窗口

輸入@+sql文件位置,點擊回車,即可將表導入數據庫。

導入數據庫的過程中,可能會報表空間不足的錯誤“unable to create INITIAL extent for segment in tablespace”
修改表空間數據文件大小:
alter database datafile 'xxx.dbf' autoextend on next 10m [maxsize 500m];
每次擴展10m,最大大小為500m。后續表空間不夠,還可以修改maxsize的值。
三、Oracle數據庫亂碼問題:
1、 導入導出的過程中,可能會發現導出的sql文件中或者PL SQL顯示的中文漢字亂碼、顯示問號:


可能是因為ORACLE數據庫的編碼格式不支持中文漢字,修改方法如下:
(1) 開始-運行-輸入regedit-回車進入注冊表,依次單擊HKEY_LOCAL_MACHINE--->SOFTWARE ---> ORACLE--->KEY_OraDb11g_home1(不同版本的Oracle顯示的都不太一樣,但都會包含home這個單詞),找到“NLS_LANG”,查看數值數據是否為:“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”,如果不是就將它設置為“SIMPLIFIED CHINESE_CHINA.ZHS16GBK。”


(2)設置完注冊表后,接下來設置我們的環境變量,計算機(右鍵) --->屬性--->高級
系統設置--->高級--->環境變量--->新建,個人建議新建用戶變量,變量名輸入:“NLS_LANG”,變量值輸入:“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”。點擊確定即可,到此我們就設置完了。

(3)這樣設置過后,sql文件和PL SQL中應該可以顯示中文了。
2、經過上面的步驟后,可能會出現部分表可以顯示中文、部分表中文仍然亂碼的情況,登錄PL SQL工具時提示:“數據庫字符集和客戶端字符集是不同的,字符轉化可能會造成不可預期的結果“
原因:這是因為ORACLE服務器和客戶端字符編碼格式設置的不同,即剛剛改過的注冊表中的編碼格式與Oracle數據庫中的編碼格式不同。
解決辦法:打開sqlplus窗口,查看當前編碼格式:


我的數據庫已經配置過了,和上面注冊表中的字符集是相同的,如果不同,需要更改字符集,方法如下:
sql> conn / as sysdba;
sql> shutdown immediate;
database closed.
database dismounted.
oracle instance shut down.
sql> startup mount;
oracle instance started.
total system global area 135337420 bytes
fixed size 452044 bytes
variable size 109051904 bytes
database buffers 25165824 bytes
redo buffers 667648 bytes
database mounted.
sql> alter system enable restricted session;
system altered.
sql> alter system set job_queue_processes=0;
system altered.
sql> alter system set aq_tm_processes=0;
system altered.
sql> alter database open;
database altered.
sql> alter database character set internal_use ZHS16GBK
sql> shutdown immediate;
sql> startup;
經過上面的步驟,數據庫服務器和客戶端的字符集一致了,應該不會出現中文漢字亂碼的問題了。
以上是今天操作數據庫遇到的問題,現在應該可以正常使用本地Oracle11g數據庫了。
參考文章:
修改Oracle注冊表和環境變量字符集:
http://www.2cto.com/database/201407/313317.html
修改Oracle字符集:
http://blog.sina.com.cn/s/blog_4b055d6b0100sssg.html
刪除表空間:http://blog.csdn.net/gbj890229/article/details/6623996
雖然有參考其他文章,但整理、實踐、補充很用心,轉載請注明出處。