1. 程式人生 > >oracle基本操作,自己親手做過了

oracle基本操作,自己親手做過了

第一部分:

--建立表空間(其中TWC.DBF不需要我們手工建立)

-----建立了一個大小為20M的表空間,自動增長以5M的大小,可以無限制增加下去,
------只要你的磁碟夠大
create tablespace tian datafile 
 'D:\Oracle1\TWC.DBF' size 20M autoextend on next 5M maxsize unlimited 
 logging online permanent extent management local autoallocate 
 blocksize 8K 
 segment space management manual 
 flashback on;


--修改表空間
alter tablespace tian1 add datafile 'F:\oraData\tablesecond04\tablesecond_DATA2.DBF' size 10000M;


alter database datafile 'F:\oraData\tablesecond04\tablesecond_DATA2.DBF' autoextend on next 100m maxsize unlimited;
---建立使用者(其中表空間為 tian)
create user twc identified by twc
  default tablespace tian 
   temporary tablespace temp
   profile default 
    account unlock;
--建立使用者的語句的說明
create user  使用者名稱
identified by  密碼(不要加引號)
default tablespace 預設表空間名 quota 5M on 預設表空間名
[temporary tablespace 臨時表空間名]
[profile 配置檔名]                                          //配置檔案
[default role 角色名]                                        //預設角色
[password expire]                                             //密碼失效
[account lock]                                                   //賬號鎖定
修改使用者
alter user 使用者名稱 identified by 密碼 quota 10M on 表空間名
alter user 使用者名稱 account lock/unlock
刪除使用者
drop user 使用者名稱 [cascade].如果要刪除的使用者中有模式物件,必須使用cascade.




--使用者的角色及其授權
 -- Roles for tablesecond
 grant DBA TO twc with admin option;
 grant aq_administrator_role to twc with admin option;
 grant mgmt_user to twc;
 alter user twc default role all;
--建另外一個使用者
CREATE USER twc1
  IDENTIFIED BY twc1
  DEFAULT TABLESPACE tian
  TEMPORARY TABLESPACE TEMP
  PROFILE DEFAULT
  ACCOUNT UNLOCK;
--角色和授權
  --  Roles for tablesecond
  GRANT DBA TO twc1 WITH ADMIN OPTION;
  GRANT AQ_ADMINISTRATOR_ROLE TO twc1 WITH ADMIN OPTION;
  GRANT MGMT_USER TO twc1;
  ALTER USER twc1 DEFAULT ROLE ALL;
  -- 1 System Privilege for tablesecond
  GRANT UNLIMITED TABLESPACE TO twc1 WITH ADMIN OPTION;
  -- 1 Tablespace Quota for tablesecond 
  ALTER USER twc1 QUOTA UNLIMITED ON tian;


-- 建立表
create table users1(
userid int primary key ,
username varchar2(30) NOT NULL,
pwd  varchar2(30) NOT NULL 
);
--如果建立上面的表,那麼系統將為你生成,以下此表的具體的程式碼:
-- Create table
create table USERS1
(
  USERID   INTEGER not null,
  USERNAME VARCHAR2(30) not null,
  PWD      VARCHAR2(30) not null
)
tablespace TIAN
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table USERS1
  add primary key (USERID)
  using index 
  tablespace TIAN
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
create sequence userid;--建立序列
--另外一種建立序列的方式
--建立一個從1開始,預設最大值,每次增長1的序列,要求NOCYCLE,快取中有30個預先分配好的序列號。
CREATE SEQUENCE MYSEQ
   MINVALUE 1
   START WITH 1
   NOMAXVALUE
   INCREMENT BY 1
   NOCYCLE
   CACHE 30


CREATE SEQUENCE userid  --建立序列,名為:myseq
START WITH 1   --從1開始
INCREMENT BY 1 --每次遞增 1
ORDER      --排序
NOCYCLE  ; --避免重新開始,關閉迴圈


--刪除序列
drop sequence userid;


--以下是表操作
insert into users1 values(userid.nextval,'xiaoliiu','666666');---插入


RENAME users1 TO users;--修改表名
COMMENT ON TABLE users IS '存放僱員資訊';--表名的註釋
COMMENT ON TABLE users.username IS '描述僱員姓名';--表中屬性的註釋


select * from users1       --查詢表的所有屬性
delete from users1 where userid=1;--刪除表中的值
ALTER TABLE users1 ADD birhtday number(4);--增加表屬性
ALTER TABLE users1 ADD pass NUMBER(4);
ALTER TABLE users1 DROP COLUMN username;--刪除表屬性
ALTER TABLE users1 MODIFY(col1 VARHCAR2(50), col2 VARCHAR2(100));--修改表屬性 col1改為col2


drop table users1;--刪除表結構


delete from users1 where username='二';--刪除
SELECT max(userid) FROM users1;-- 查詢學號最大的
SELECT min(userid) FROM users1;-- 查詢學號最小的


update users set username='tianweichang', pwd='888888' where userid=2;


create sequence userid1;
insert into users values(userid1.nextval,'wangwu','55555');---插入
--建立檢視
CREATE OR REPLACE VIEW usersView
    AS
   SELECT u.USERID,u.username
   FROM users u JOIN users1 ON u.userid=users1.userid
   WITH READ ONLY
   
select * from usersView --查詢檢視
--建立索引

CREATE UNIQUE INDEX UQ_ENAME_IDX ON users1(username);  

遠端匯入

imp 使用者名稱/密碼@IP地址:1521/orcl file=d:\aa.dmp; 匯入aa.dmp檔案

第二部分

l 客戶端
1. Sql Plus(客戶端),命令列直接輸入:sqlplus,然後按提示輸入使用者名稱,密碼。在sqlPlus客戶端輸入命令ed,可以出現文字編輯器。
    2. 從開始程式執行:sqlplus,是圖形版的sqlplus.
    3. http://localhost:5560/isqlplus    
4.一些第三方客戶端:ToadPlSql Developer(必須在本機安裝了

orcl)
l 解鎖使用者
1. cmd視窗輸入sqlplus sys/bjsxt as sysdba sys是超級管理員使用者名稱,/後面是其密碼)
2. alter user scott account unlock;(解鎖使用者scott)
l 查看錶結構
desc 表名
l select語句
n 計算資料
計算資料可以用空表:比如:.select 2*3 from dual
任何含有空值的數學表示式,最後的計算結果都是空值。  
n 檢視系統時間
select sysdate from dual;  //檢視當前的系統時間  


n 查詢結果連線字串
select ename || "abcd" 如果連線字串中含有單引號,用兩個單引號代替一個單引號。
select ename||sal from emp;  //(sal的查詢結果轉化為字串,與ename連線到一起,相當於Java中的字串連線)   
l distinct
8select distinct deptno from emp;   //消除deptno欄位重複的值    
9select distinct deptno , job from emp; //將與這兩個欄位組合重複的值去掉   

l where
n 大於過濾判斷

select * from emp where empno > 10;  //大於 過濾判斷    
n 不等於過濾判斷

select * from emp where empno <> 10  //不等於  過濾判斷  
n 字串比較

select * from emp where ename > 'cba';  //字串比較,實際上比較的是每個字元的AscII值,與在Java中字串的比較是一樣的   
n 指定某個範圍between and 
select ename, sal from emp where sal between 800 and 1500;  //(between and過濾,包含800 1500)    
n 選擇欄位的值是否為null
select ename, sal, comm from emp where comm is null;  //(選擇comm欄位為null的資料)    
select ename, sal, comm from emp where comm is not null;  //(選擇comm欄位不為null的資料)   
n in 表範圍
select ename, sal, comm from emp where sal in (800, 1500,2000);  //(in 表範圍)    
select ename, sal, comm from emp where sal not in (800, 1500,2000);  //(可以對in指定的條件進行取反) 
n 比較日期
select ename, sal, hiredate from emp where hiredate > '02-2月-1981'; //(只能按照規定的格式寫)    
n 模糊查詢


select ename from emp where ename like '%ALL%';   //(模糊查詢)    
select ename from emp where ename like '_A%';    //(取第二個字母是A的所有欄位)    
select ename from emp where ename like '%/%%';   //(用轉義字元/查詢欄位中本身就帶%欄位的)    
select ename from emp where ename like '%$%%' escape '$';   //(指定$為轉義字元查詢欄位中本身就帶%欄位的) 

l 排序
select * from dept where deptno <>10 order by deptno asc;   //(升序排列)      
select ename, sal, deptno from emp order by deptno asc, ename desc;   //(按照多個欄位排序 首先按照deptno升序排列,detpno相同時,再按照ename的降序排列


第三部分:

Oracle資料匯入匯出imp/exp ,切記是在cmd命令直接開始,並不是sqlplus,因為之前自己老搞錯
功能:Oracle資料匯入匯出imp/exp就相當與oracle資料還原與備份。
 
大多情況都可以用Oracle資料匯入匯出完成資料的備份和還原(不會造成資料的丟失)。
 Oracle有個好處,雖然你的電腦不是伺服器,但是你裝了oracle客戶端,並建立了連線
 (通過Net Configuration Assistant新增正確的服務命名,其實你可以想成是客戶端與伺服器端 修了條路,然後資料就可以被拉過來了)
 這樣你可以把資料匯出到本地,雖然可能伺服器離你很遠。
 你同樣可以把dmp檔案從本地匯入到遠處的資料庫伺服器中。
 利用這個功能你可以構建倆個相同的資料庫,一個用來測試,一個用來正式使用。
 
執行環境:可以在SQLPLUS.EXE或者DOS(命令列)中執行,
 DOS中可以執行時由於 在oracle 8i 中  安裝目錄\$ora10g\BIN被設定為全域性路徑,
 該目錄下有EXP.EXE與IMP.EXE檔案被用來執行匯入匯出。
 oracle用java編寫,我想SQLPLUS.EXE、EXP.EXE、IMP.EXE這倆個檔案是被包裝後的類檔案。
 SQLPLUS.EXE呼叫EXP.EXE、IMP.EXE他們所包裹的類,完成匯入匯出功能。
 
下面介紹的是匯入匯出的例項,嚮導入匯出看例項基本上就可以完成,因為匯入匯出很簡單。
資料匯出:
 1 將資料庫TEST完全匯出,使用者名稱system 密碼manager 匯出到D:\daochu.dmp中
   exp system/[email protected] file=d:\daochu.dmp full=y
 2 將資料庫中system使用者與sys使用者的表匯出
   exp system/[email protected] file=d:\daochu.dmp owner=(system,sys)
 3 將資料庫中的表table1 、table2匯出
   exp system/[email protected] file=d:\daochu.dmp tables=(table1,table2) 
 4 將資料庫中的表table1中的欄位filed1以"00"打頭的資料匯出
   exp system/[email protected] file=d:\daochu.dmp tables=(table1) query=\" where filed1 like  '00%'\"
  
     上面是常用的匯出,對於壓縮我不太在意,用winzip把dmp檔案可以很好的壓縮。
                     不過在上面命令後面 加上 compress=y  就可以了

資料的匯入
 1 將D:\daochu.dmp 中的資料匯入 TEST資料庫中。
   imp system/[email protected]  file=d:\daochu.dmp
   上面可能有點問題,因為有的表已經存在,然後它就報錯,對該表就不進行匯入。
   在後面加上 ignore=y 就可以了。
 2 將d:\daochu.dmp中的表table1 匯入
 imp system/[email protected]  file=d:\daochu.dmp  tables=(table1) 
 
 基本上上面的匯入匯出夠用了。不少情況我是將表徹底刪除,然後匯入。
 
注意:
 你要有足夠的許可權,許可權不夠它會提示你。
 資料庫時可以連上的。可以用tnsping TEST 來獲得資料庫TEST能否連上。

 

資料匯出:
exp hkb/[email protected]_14 full=y file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbfull.log;

匯出注意事項:匯出的是當前使用者的的資料,當前使用者如果有DBA的許可權,則匯出所有資料!

同名使用者之間的資料匯入:
imp hkb/[email protected]  file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbimp.log full=y

不同名之間的資料匯入:
imp system/[email protected] fromuser=hkb touser=hkb_new file=c:\orabackup\hkbfull.dmp

log=c:\orabackup\hkbimp.log;

另外附上oracle視訊教程網站:http://bbs.51cto.com/thread-884173-1.html

期待第四部分的出現..............

select * from xd_bankquotasatistical as of timestamp sysdate-(1/(24)); --恢復1小時前的表中的資料