1、首先應(yīng)該刪除已有的主鍵約束

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、淇濱網(wǎng)站維護(hù)、網(wǎng)站推廣。
①若已知道該主鍵命名
alter table 表名 drop constraint 主鍵名;
②若不知道朱建命名
SELECT * from user_cons_columns c where c.table_name = '表名';
找到主鍵字段column對應(yīng)的主鍵名,再執(zhí)行①
2、增加新的主鍵約束
alter table 表名 add constraint 主鍵名 primary key(字段名);
1、首先打開電腦,進(jìn)入到電腦桌面中。
2、其次點(diǎn)擊桌面中的oracle數(shù)據(jù)庫軟件,進(jìn)入到軟件界面中,點(diǎn)擊其設(shè)置,進(jìn)入到設(shè)置界面中。
3、最后點(diǎn)擊數(shù)據(jù)庫表的性質(zhì),點(diǎn)擊其性別,即可進(jìn)行修改。
1.設(shè)置默認(rèn)表空間:
在Oracle數(shù)據(jù)庫中創(chuàng)建用戶(使用CREATE USER語句)時(shí),如果不指定表空間,則默認(rèn)的臨時(shí)表空間時(shí)TEMP,默認(rèn)的永久表空間時(shí)SYSTEM,這樣舊導(dǎo)致應(yīng)用系統(tǒng)與Oracle系統(tǒng)競爭使用SYSTEM表空間,會(huì)極大的影響Oracle系統(tǒng)的執(zhí)行效率。為此,Oracle建議將非SYSTEM表空間設(shè)置為應(yīng)用系統(tǒng)的默認(rèn)永久表空間,并且將非TEMP臨時(shí)表空間設(shè)置為應(yīng)用系統(tǒng)的臨時(shí)表空間。這樣有利于數(shù)據(jù)庫管理員根據(jù)應(yīng)用系統(tǒng)的運(yùn)行情況適時(shí)調(diào)整默認(rèn)表空間和臨時(shí)表空間。
更改默認(rèn)臨時(shí)表空間需要使用ALTER DATABASE DEFAULT TEMPRORY TABLESPACE語句,更改默認(rèn)永久表空間需要使用ALTER DATABASE DEFAULT TABLESPACE語句。
2.例如:將臨時(shí)表空間temp_1設(shè)置為默認(rèn)的臨時(shí)表空間。
3.例如:將表空間tbs_example設(shè)置為默認(rèn)的永久表空間。
4.更改表空間的狀態(tài):
表空間有只讀和可讀寫兩種狀態(tài),若設(shè)置某個(gè)表空間為只讀狀態(tài),則用戶就不能夠?qū)υ摫砜臻g的數(shù)據(jù)進(jìn)行DML操作(INSERT、UPDATE和DELETE),但對某些對象的刪除操作還是可以進(jìn)行的,比如,索引和目錄就可以被刪除掉;若設(shè)置某個(gè)表空間為可讀寫狀態(tài),則用戶舊可以對表空間的數(shù)據(jù)進(jìn)行任何正常的操作,這也是表空間的默認(rèn)狀態(tài)。
設(shè)置表空間為只讀狀態(tài),可以保證表空間數(shù)據(jù)的完整性。通常在進(jìn)行數(shù)據(jù)庫的備份、恢復(fù)及歷史數(shù)據(jù)的完整性保護(hù)時(shí),可將指定的表空間設(shè)置成只讀狀態(tài)。但設(shè)置表空間為只讀并不是可以隨意進(jìn)行的,必須滿足三個(gè)條件:
1、該表必須為ONLINE狀態(tài)。
2、該表空間不能包含任何回滾段。
3、改表空間不能在歸檔模式下。
更改表空間的讀寫狀態(tài)需要使用ALTER TABLESPACE...READ|ONLY READ WRITE語句
5.例如:修改tbs_test_3 表空間為只讀狀態(tài)。
6.例如:修改tbs_test_3 表空間為可讀寫狀態(tài)。
IMP 可以導(dǎo)入不同用戶,但是表空間名稱是要一樣。
如果是oracle 10g或以上可以用數(shù)據(jù)泵
1、expdp 導(dǎo)出文件
2、impdp 用戶名/密碼 directory='您創(chuàng)建的目錄的名稱' dumpfile='導(dǎo)出的文件名稱' remap_schema=導(dǎo)出的用戶名稱:要導(dǎo)入的用戶名稱 remap_tablespace=導(dǎo)出的表空間名稱:要導(dǎo)入的表空間名稱
如何更改Oracle字符集
國內(nèi)最常用的Oracle字符集ZHS16GBK(GBK 16-bit Simplified Chinese)能夠支持繁體中文,并且按照2個(gè)字符長度存儲(chǔ)一個(gè)漢字。UTF8字符集是多字節(jié)存儲(chǔ),1個(gè)漢字(簡體、繁體)有時(shí)采用3個(gè)字符長度存儲(chǔ)。
Oracle支持字符集的更改,但是UTF8是Oracle中最大的字符集,也就是說UTF8是ZHS16GBK的嚴(yán)格超集。
對于子集到超集的轉(zhuǎn)換,Oracle是允許的,但是對于超集到子集的轉(zhuǎn)換是不允許的。一般對于超集到子集的轉(zhuǎn)換,建議是通過dbca刪除原來的數(shù)據(jù)庫,重新再建庫,選擇正確的字符集,然后導(dǎo)入備份。
我的方案是:先備份數(shù)據(jù),然后強(qiáng)制轉(zhuǎn)換字符集從UTF8到ZHS16GBK,然后導(dǎo)入備份數(shù)據(jù)。如果不行,才來重新建庫,設(shè)置字符集ZHS16GBK,導(dǎo)入備份數(shù)據(jù)。如果這還不行,就把更改字符集從ZHS16GBK到UTF8(這是安全的),再導(dǎo)入備份數(shù)據(jù),恢復(fù)到原始狀況。這樣就有可能避開重新建庫的麻煩。
1. 備份數(shù)據(jù)庫中所有用戶的數(shù)據(jù)
以oracle用戶登陸,執(zhí)行以下命令
# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.UTF8”
保持與數(shù)據(jù)庫服務(wù)器端一致,這樣在exp導(dǎo)出時(shí),就不會(huì)存在字符的轉(zhuǎn)換了,備份最原始的數(shù)據(jù)。
2. 評估UTF8轉(zhuǎn)換成ZHS16GBK的風(fēng)險(xiǎn)
轉(zhuǎn)換之前,要使用Oracle的csscan工具對數(shù)據(jù)庫掃描,評估字符集轉(zhuǎn)換前后,數(shù)據(jù)有可能的損壞情況。如果評估情況糟糕,那就絕對要放棄了。
先安裝屬于 CSMIG 用戶的一套表和過程。以oracle用戶登陸UNIX,
#sqlplus “/ as sysdab”
SQL@$ORACLE_HOME/ rdbms/admin/csminst.sql
SQLexit
# $ORACLE_HOME\bin\csscan -help
可以更清楚如何使用csscan。
# $ORACLE_HOME/bin/csscan system/sunday user=mmsc FROMCHAR=UTF8 TOCHAR=ZHS16GBK ARRAY=102400 PROCESS=3 csscan.log
以上命令意思是掃描用戶:mmsc中的所有數(shù)據(jù),從字符集UTF8更改為ZHS16GBK的轉(zhuǎn)換情況。然后得到三個(gè)文件:scan.txt、scan.out、scan.err。
查看scan.out,scan.err,可以看出mmsc用戶下的所有的數(shù)據(jù)都是可以轉(zhuǎn)換的,并且沒有出現(xiàn)轉(zhuǎn)換“Exceptional”的情況,因此可以更放心一點(diǎn)。
3. 更改數(shù)據(jù)庫的字符集為ZHS16GBK
前面說過,通過命令“Alter Database Characeter Set XXXX”,實(shí)現(xiàn)從超集到子集的轉(zhuǎn)換,在Oracle是不允許的。但是該命令,提供這樣的命令方式:
Alter Database Character Set INTERNAL_CONVERT/ INTERNAL_USE XXXX
這是Oracle的非公開命令。“在使用這個(gè)命令時(shí),Oracle會(huì)跳過所有子集及超集的檢查,在任意字符集之間進(jìn)行強(qiáng)制轉(zhuǎn)換,所以,使用這個(gè)命令時(shí)你必須十分小心,你必須清楚這一操作會(huì)帶來的風(fēng)險(xiǎn)”。
以oracle用戶登陸UNIX,
#sqlplus “/ as sysdba”
SQL SHUTDOWN IMMEDIATE;
SQL STARTUP MOUNT;
SQL ALTER SESSION SET SQL_TRACE=TRUE;
SQL ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL ALTER DATABASE OPEN;
SQL ALTER DATABASE CHARACTER SET ZHS16GBK;
//如果不使用“INTERNAL_USE”參數(shù),系統(tǒng)會(huì)提示出錯(cuò):
//ERROR at line 1:
//ORA-12712: new character set must be a superset of old character set
SQL ALTER SESSION SET SQL_TRACE=FALSE;
SQL SHUTDOWN IMMEDIATE;
SQL STARTUP;
此時(shí),檢查一下數(shù)據(jù)庫的字符集是否更改過來
SQL select value$ from props$ where name=’NLS_CHARACTERSET’;
VALUE$
-----------------
ZHS16GBK
緊接著檢查一下數(shù)據(jù)庫中簡體中文、繁體中文是否正常,不會(huì)出現(xiàn)亂碼。
SQLselect spid,spname,spshortname from spinfovisual_hk
…...
非常不幸,我看到了一堆亂碼,這也證明了Oracle不支持字符集從超集到子集的更改,當(dāng)時(shí)心里很緊張,很怕失敗,從而恢復(fù)到原樣。
但是根據(jù)以前的驗(yàn)證,把UTF8下的備份導(dǎo)入到ZHS16GBK中去,是OK的,所以繼續(xù)嘗試。
4. 導(dǎo)入備份的用戶數(shù)據(jù)
還是以oracle用戶登陸UNIX, 先刪除庫中的用戶mmsc:
#sqlplus “/ as sysdba”
SQLdrop user mmsc cascade;
SQLexit
再運(yùn)行createuser.sql,生成mmsc用戶。
然后使用原來的備份文件,導(dǎo)入到mmsc用戶中:
注意:先設(shè)置NLS_LANG要與當(dāng)前數(shù)據(jù)庫的一致:ZHS16GBK。這樣,導(dǎo)出時(shí)用戶會(huì)話的NLS_LANG為UTF8,與原先的數(shù)據(jù)庫字符集一致;現(xiàn)在為ZHS16GBK,與此時(shí)的數(shù)據(jù)庫字符集一致。這樣,導(dǎo)入時(shí),就會(huì)進(jìn)行字符轉(zhuǎn)換。
# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.ZHS16GBK”
#imp mmsc/mmsc@mdspdb file=DSMPD113_user_mmsc.dmp ignore=y fromuser=mmsc touser=mmsc
馬上查看數(shù)據(jù)庫中簡體、繁體中文,哈哈,沒有亂碼了,一切顯示正常。
緊接著進(jìn)行驗(yàn)證,也證明了:1個(gè)漢字此時(shí)只占用2個(gè)字符長度。問題解決了!
新聞名稱:oracle怎么改裝,oracle怎么修改
網(wǎng)站網(wǎng)址:http://chinadenli.net/article31/dsgshpd.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站策劃、品牌網(wǎng)站設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)、搜索引擎優(yōu)化、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)