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.一些第三方客戶端:Toad和PlSql Developer(必須在本機安裝了
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
8、select distinct deptno from emp; //消除deptno欄位重複的值
9、select 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小時前的表中的資料