創建表空間
1.創建默認表空間WLP_DAT
CREATE TABLESPACE "MYSPACE" DATAFILE 'D:\oracle\oradata\orcl\data/WLP_DAT.dbf' SIZE 32M REUSE AUTOEXTEND ON NEXT 32M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
2.創建臨時表空間WLP_TEMP(用於緩存,可以不建)
ALTER TABLESPACE "TEMP" ADD TEMPFILE
'D:\oracle\oradata\orcl\data/WLP_TEMP.dbf' SIZE 32m REUSE autoextend on next 32m;
創建用戶並授權
1 CREATE USER "WLPING" PROFILE "DEFAULT" 2 IDENTIFIED BY "123456" 3 DEFAULT TABLESPACE "MYSPACE" //默認指定表空間 4 TEMPORARY TABLESPACE "TEMP" //指定緩存表空間 5 ACCOUNT UNLOCK; //用戶非鎖定 6 7 GRANT EXECUTE ON dbms_comparison TO "WLPING"; 8 GRANT UNLIMITED TABLESPACE TO "XIR_MD"; 9 GRANT "CONNECT" TO "XIR_MD"; 10 GRANT "RESOURCE" TO "XIR_MD"; 11 12 -- GRANT DBA TO XIR_MD;
PROFILE:Oracle系統中的profile可以用來對用戶所能使用的數據庫資源進行限制,使用Create Profile命令創建一個Profile,用它來實現對數據庫資源的限制使用,如果把該profile分配給用戶,則該用戶所能使用的數據庫資源都在該profile的限制之內。具體管理內容有:CPU的時間、I/O的使用、IDLE TIME(空閑時間)、CONNECT TIME(連接時間)、並發會話數量、口令機制等。
用戶管理
oracle內部有兩個建好的用戶:system和sys。用戶可直接登錄到system用戶以創建其他用戶,因為system具有創建其他用戶的權限。 在安裝oracle時,用戶或系統管理員首先可以為自己建立一個用戶。
※ 使用sys as sysdba 可以獲得數據庫最高權限
一、創建用戶
語法[創建用戶]: create user 用戶名 identified by 口令[即密碼];
例子: create user test identified by test;
語法[更改用戶]: alter user 用戶名 identified by 口令[改變的口令];
例子: alter user test identified by 123456;
二、刪除用戶
語法:drop user 用戶名;
例子:drop user test;
若用戶擁有對象,則不能直接刪除,否則將返回一個錯誤值。指定關鍵字cascade,可刪除用戶所有的對象,然后再刪除用戶。
語法: drop user 用戶名 cascade;
例子: drop user test cascade;
三、授權角色
oracle為兼容以前版本,提供三種標准角色(role):connect/resource和dba.
(1)講解三種標准角色:
1》. connect role(連接角色)
--臨時用戶,特指不需要建表的用戶,通常只賦予他們connect role.
--connect是使用oracle簡單權限,這種權限只對其他用戶的表有訪問權限,包括select/insert/update和delete等。
--擁有connect role 的用戶還能夠創建表、視圖、序列(sequence)、簇(cluster)、同義詞(synonym)、回話(session)和其他 數據的鏈(link)
2》. resource role(資源角色)
--更可靠和正式的數據庫用戶可以授予resource role。
--resource提供給用戶另外的權限以創建他們自己的表、序列、過程(procedure)、觸發器(trigger)、索引(index)和簇(cluster)。
3》. dba role(數據庫管理員角色)
--dba role擁有所有的系統權限
--包括無限制的空間限額和給其他用戶授予各種權限的能力。system由dba用戶擁有
(2)授權命令
語法: grant connect, resource to 用戶名;
例子: grant connect, resource to test;
(3)撤銷權限
語法: revoke connect, resource from 用戶名;
列子: revoke connect, resource from test;
角色管理
四、創建/授權/刪除角色
除了前面講到的三種系統角色----connect、resource和dba,用戶還可以在oracle創建自己的role。用戶創建的role可以由表或系統權限或兩者的組合構成。為了創建role,用戶必須具有create role系統權限。
1》創建角色
語法: create role 角色名;
例子: create role testRole;
2》授權角色
語法: grant select on class to 角色名;
列子: grant select on class to testRole;
注:現在,擁有testRole角色的所有用戶都具有對class表的select查詢權限
3》刪除角色
語法: drop role 角色名;
例子: drop role testRole;
注:與testRole角色相關的權限將從數據庫全部刪除
表操作
一、創建表
1 CREATE TABLE MY_TABLE ( 2 ID NUMBER(10) PRIMARY KEY, 3 NAME VARCHAR2(50) NOT NULL, 4 BIRTHDAY DATE 5 ); 6 // 表名注釋 7 COMMENT ON TABLE my_table IS '個人信息表'; 8 // 字段名注釋 9 COMMENT ON COLUMN MY_TABLE.ID IS 'ID'; 10 COMMENT ON COLUMN MY_TABLE.NAME IS '姓名';
組合主鍵約束:CONSTRAINT PK_MY_TABLE PRIMARY KEY (column1,column2)
二、修改約束
禁用約束 disable constraint 約束名字;
刪除約束 drop constraint 約束名字;
新增約束 alter table <表名 > add constraint <主鍵名>
約束介紹
1.主鍵約束:
要對一個列加主鍵約束的話,這列就必須要滿足的條件就是分空
因為主鍵約束:就是對一個列進行了約束,約束為(非空、不重復)
以下是代碼 要對一個列加主鍵,列名為id,表名為emp
alter table 表格名稱 add constraint 約束名稱 增加的約束類型 (列名)
alter table emp add constraint ppp primary key (id)
就是給一列的數據進行了限制
比方說,年齡列的數據都要大於20的
表名(emp) 列名(age)
alter table 表名稱 add constraint 約束名稱 增加的約束類型 (列名)
alter table emp add constraint xxx check(age>20)
這樣的約束就是給列的數據追加的不重復的約束類型
alter table 表名 add constraint 約束名稱 約束類型(列名)
比方說可以給ename列加個unique,讓ename列的數據不重復
例子:
alter table emp add constraint qwe unique(ename)
意思很簡單就是讓此列的數據默認為一定的數據
alter table 表名稱 add constraint 約束名稱 約束類型 默認值) for 列名
alter table emp add constraint jfsd default 10000 for gongzi
這個有點難理解了,外鍵其實就是引用
因為主鍵實現了實體的完整性,
外鍵實現了引用的完整性,
應用完整性規定,所引用的數據必須存在!
比方說一個表名稱叫dept 里面有2列數據 一列是ID一列是ENAME
id:表示產品的編號
ename:表示產品的名稱
id:表示用戶號
did:表示購買的產品號
alter table 表名 add constraint 約束名稱 約束類型 (列名) references 被引用的表名稱(列名)
例子:
alter table emp add constraint jfkdsj foreign key (did) references dept (id)
三、操作表
rename 表名 to 表名 //修改表名 truncate table 表名 //刪除表中的所有數據,速度比delete快很多,截斷表 drop table 表名 //刪除表
四、修改字段
alter table 表名 modify (字段 字段類型); -- 修改字段數據類型 alter table 表名 rename column 列名 to 列名 --修改字段名 alter table 表名 add 列名 字段類型; --增加字段 alter table 表名 drop column 字段名; -- 刪除字段
五、修改數據
insert into 表名(值1,值2) values(值1,值2); // 插入數據 update 表名 set 字段=值 [修改條件] //修改數據 delete from table where 條件 //刪除數據
六、查詢
/* 獲取表:*/ select table_name from user_tables; //當前用戶的表 select table_name from all_tables; //所有用戶的表 select table_name from dba_tables; //所有表,包括系統表(需要dba權限) select table_name from dba_tables where owner='WLPING'; //某個用戶的表,包括所有的系統表(需要dba權限)
/*查詢系統時間*/
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
導入導出
EXPDP和IMPDP是服務端的工具程序,他們只能在ORACLE服務端使用,不能在客戶端使用。
IMP只適用於EXP導出的文件,不適用於EXPDP導出文件;IMPDP只適用於EXPDP導出的文件,而不適用於EXP導出文件。
一、導入dmp文件
imp
1)imp 用戶名/密碼@服務器IP:端口/服務名 file=dmp文件路徑;
imp username/password@127.0.0.1:1521/orcl file=D:\oracle\admin\orcl\dpdump\a.dmp;
2)將exp_export.dmp 中的表table1,table2導入
imp system/manager@hostname:1521/ora11g file=exp_export.dmp tables=table1,table2
impdp
1)導到指定用戶下
impdp scott/tiger DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp SCHEMAS=scott;
2)改變表的owner
impdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
3)導入表空間
impdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp TABLESPACES=example;
3)導入整個庫文件
impdb system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp full=y;
二、導出dmp文件
※ 導入導出指定日志輸出文件 log=exp_export.log
※ 在導出命令后面加上 compress=y 可以對導出文件進行壓縮
1.導出整個數據庫實例下的所有數據
2.導出指定用戶的所有表
3.導出指定表
exp
1)將數據庫ORACLE完全導出
exp sysuser/password@127.0.0.1:1521/ORCL file=D:d:\daochu.dmp full=y;
2)將數據庫中WLP用戶與,WLPING用戶的表導出
exp username/password@127.0.0.1:1521/ORCL file=d:\daochu.dmp owner=(WLP,WLPING);
3)將數據庫中的表table1、table2導出
exp sysuser/password@127.0.0.1:1521/ORCL file= d:\data\newsmgnt.dmp tables=(table1,table2);
4)將數據庫中的表table1中的字段filed1以"00"打頭的數據導出
exp system/manager@loaclhost:1521/orcl file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\" log=exp_export.log;
expdp
創建邏輯目錄(默認為oracle用戶空間下的dpdump目錄)
create directory DUMP_DIR as '/oracle/DUMP_DIR';
在服務器上創建該目錄,因為Oracle並不會自動創建,如果目錄不存在導出會報錯
- mkdir -p /oracle/DUMP_DIR
給用戶授予在該目睹讀取的權限
- grant read,write on directory DUMP_DIR to scott;
1)導整個數據庫
expdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp FULL=y;
2)按用戶導
expdp scott/tiger@localhost:1521/ora11g schemas=scott dumpfile=expdp_export.dmp DIRECTORY=DUMP_DIR;
3)並行進程parallel
expdp scott/tiger@localhost:1521/ora11g directory=DUMP_DIR dumpfile=expdp_export.dmp parallel=40 job_name=expdp40;
4)按表名導
expdp scott/tiger@localhost:1521/ora11g TABLES=emp,dept dumpfile=expdp_export.dmp DIRECTORY=DUMP_DIR;
5)按查詢條件導
expdp scott/tiger@localhost:1521/ora11g directory=DUMP_DIR dumpfile=expdp_export.dmp tables=emp query='WHERE deptno=20';
6)按表空間導
expdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp TABLESPACES=temp,example;
序列
新建序列
CREATE SEQUENCE 序列名
[INCREMENT BY n] //步長 默認1 非零
[START WITH n] //開始值
[{MAXVALUE/ MINVALUE n| NOMAXVALUE}] //最大值/最小值
[{CYCLE|NOCYCLE}] //到達最大值是否循環,不循環時直接報錯
[{CACHE n| NOCACHE}]; //默認20,當有大量請求時使用緩存,預先生成多個序列提供使用,斷開連接后會丟失未使用的序列值,導致序號不連續。
實例:
1 create sequence seq_my_define 2 minvalue 1 3 nomaxvalue 4 start with 1 5 increment by 1 6 nocycle 7 nocache;
查詢序列當前值
select seq_my_define.currval from dual;
查詢下一增長值(提醒,這里雖然是查詢,但序列值會改變,相當於++i):
select seq_my_define.nextval from dual;
觸發器
主鍵自增:oracle沒有主鍵自增選項,需要自己使用觸發器實現
1 CREATE OR REPLACE TRIGGER tr_my_define 2 BEFORE INSERT ON MY_WMPS_DEFINE FOR EACH ROW 3 begin 4 select seq_my_define.nextval into:new.id from dual; 5 end;
變量使用:
例子:將序列S_BOND_POOL_TREE的當前值與數據庫ID最大值統一
變量可以在定義時賦值,也可以后面再賦值。
通過select語句將查詢結果賦值給變量:select 字段名 into 變量名 from 表
execute immediate 'str'; //可以使用變量拼接字符串得到語句來執行
1 DECLARE 2 n NUMBER :=0; 3 BEGIN 4 select (num - S_BOND_POOL_TREE.nextval) into n 5 from( 6 select max(to_number( node_id)) as num from XIR_TRD_J.TREE_NODE_INFO 7 ); 8 IF n = 0 then return; 9 ELSE 10 execute immediate 'alter sequence S_BOND_POOL_TREE increment by '|| n; 11 select S_BOND_POOL_TREE.nextval into n from dual; 12 execute immediate 'alter sequence S_BOND_POOL_TREE increment by 1'; 13 END IF; 14 END;