1.???????? 準(zhǔn)備
成都創(chuàng)新互聯(lián)專(zhuān)注于霸州企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),商城系統(tǒng)網(wǎng)站開(kāi)發(fā)。霸州網(wǎng)站建設(shè)公司,為霸州等地區(qū)提供建站服務(wù)。全流程按需定制設(shè)計(jì),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
原數(shù)據(jù)庫(kù)的實(shí)例名為linuxdb,控制文件、數(shù)據(jù)文件、聯(lián)機(jī)日志文件存放在/home/oracle/ora9/oradata/linuxdb目錄,將所有的文件拷貝到另外一個(gè)目錄/home/oracle/ora9/oradata/dbtest。
再將linuxdb 的初始化文件也復(fù)制一份出來(lái),執(zhí)行如下的sql:
Create pfile='/home/oracle/ora9/oracle/dbs/pfiledbtest.ora' from spfile='/home/oracle/ora9/oracle/dbs/spfilelinuxdb.ora';
我們將修改實(shí)例名為dbtest。
下面我們開(kāi)始一步一步地進(jìn)行處理。
2.???????? 加載初始化文件
打開(kāi)pfiledbtest.ora文件,修改對(duì)應(yīng)的dump屬性的路徑名,實(shí)例名字,控制文件路徑等。
然后執(zhí)行如下命令:
[oracle@localhost oracle]$ export ORACLE_SID=dbtest
[oracle@localhost oracle]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Mon Aug 17 16:57:36 2009
Copyright (c) 1982, 2002, Oracle Corporation.? All rights reserved.
Connected to an idle instance.
SQL startup pfile='/home/oracle/ora9/oracle/dbs/pfiledbtest.ora' nomount
ORACLE instance started.
Total System Global Area? 236000356 bytes
Fixed Size?????????????????? 451684 bytes
Variable Size???????????? 201326592 bytes
Database Buffers?????????? 33554432 bytes
Redo Buffers???????????????? 667648 bytes
SQL
這樣加載初始化文件就成功了。
下面接著進(jìn)行,加載控制文件。
3.???????? 加載控制文件
先執(zhí)行如下命令。
SQL alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00205: error in identifying controlfile, check alert log for more info
好像是控制文件的路徑不對(duì),修改初始文件再次加載。
SQL alter database mount;
alter database mount
*
ERROR at line 1:
ORA-01103: database name 'LINUXDB' in controlfile is not 'DBTEST'
根據(jù)錯(cuò)誤信息提示,是實(shí)例名字不一致,但是控制文件是二進(jìn)制的,用vi打開(kāi)之后沒(méi)法編輯,只能通過(guò)用重建控制文件可以解決。
在/home/oracle/ora9/oradata/dbtest目錄下刪除老的三個(gè)控制文件。然后開(kāi)始重建控制文件。
SQL CREATE CONTROLFILE SET DATABASE "DBTEST" RESETLOGS FORCE LOGGING NOARCHIVELOG
2?? MAXLOGFILES 16
3?? MAXLOGMEMBERS 3
4?? MAXDATAFILES 100
5?? MAXINSTANCES 8
6?? MAXLOGHISTORY 292
7?? LOGFILE
8?? GROUP 1 '/home/oracle/ora9/oradata/dbtest/redo01.log' SIZE 50M,
9?? GROUP 2 '/home/oracle/ora9/oradata/dbtest/redo02.log' SIZE 50M,
10?? GROUP 3 '/home/oracle/ora9/oradata/dbtest/redo03.log' SIZE 50M
11?? DATAFILE
12?? '/home/oracle/ora9/oradata/dbtest/cwmlite01.dbf',
13?? '/home/oracle/ora9/oradata/dbtest/devbase_20090408.dbf',
14?? '/home/oracle/ora9/oradata/dbtest/drsys01.dbf',
15?? '/home/oracle/ora9/oradata/dbtest/example01.dbf',
16?? '/home/oracle/ora9/oradata/dbtest/indx01.dbf',
17?? '/home/oracle/ora9/oradata/dbtest/odm01.dbf',
18?? '/home/oracle/ora9/oradata/dbtest/system01.dbf',
19?? '/home/oracle/ora9/oradata/dbtest/tools01.dbf',
20?? '/home/oracle/ora9/oradata/dbtest/undotbs01.dbf',
21?? '/home/oracle/ora9/oradata/dbtest/users01.dbf',
22?? '/home/oracle/ora9/oradata/dbtest/xdb01.dbf'
23?? CHARACTER SET ZHS16GBK;
CREATE CONTROLFILE SET DATABASE "DBTEST" RESETLOGS FORCE LOGGING NOARCHIVELOG
*
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01990: error opening password file '/home/oracle/ora9/oracle/dbs/orapw'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
根據(jù)錯(cuò)誤提示,是缺少密碼驗(yàn)證文件,用下面的命令創(chuàng)建密碼文件。
$cd $ORACLE_HOME/dbs
orapwd password=chenli file=orapwdbtest
SQL CREATE CONTROLFILE SET DATABASE 'dbtest' RESETLOGS FORCE LOGGING NOARCHIVELOG
2?? MAXLOGFILES 16
3?? MAXLOGMEMBERS 3
4?? MAXDATAFILES 100
5?? MAXINSTANCES 8
6?? MAXLOGHISTORY 292
7?? LOGFILE
8?? GROUP 1 '/home/oracle/ora9/oradata/dbtest/redo01.log' SIZE 50M,
9?? GROUP 2 '/home/oracle/ora9/oradata/dbtest/redo02.log' SIZE 50M,
10?? GROUP 3 '/home/oracle/ora9/oradata/dbtest/redo03.log' SIZE 50M
11?? DATAFILE
12?? '/home/oracle/ora9/oradata/dbtest/cwmlite01.dbf',
13?? '/home/oracle/ora9/oradata/dbtest/devbase_20090408.dbf',
14?? '/home/oracle/ora9/oradata/dbtest/drsys01.dbf',
15?? '/home/oracle/ora9/oradata/dbtest/example01.dbf',
16?? '/home/oracle/ora9/oradata/dbtest/indx01.dbf',
17?? '/home/oracle/ora9/oradata/dbtest/odm01.dbf',
18?? '/home/oracle/ora9/oradata/dbtest/system01.dbf',
19?? '/home/oracle/ora9/oradata/dbtest/tools01.dbf',
20?? '/home/oracle/ora9/oradata/dbtest/undotbs01.dbf',
21?? '/home/oracle/ora9/oradata/dbtest/users01.dbf',
22?? '/home/oracle/ora9/oradata/dbtest/xdb01.dbf'
23?? CHARACTER SET ZHS16GBK;
Control file created.
現(xiàn)在創(chuàng)建成功了。
創(chuàng)建控制文件成功了,下面重新啟動(dòng)數(shù)據(jù)庫(kù)。
SQL startup nomount
ORACLE instance started.
Total System Global Area? 236000356 bytes
Fixed Size?????????????????? 451684 bytes
Variable Size???????????? 201326592 bytes
Database Buffers?????????? 33554432 bytes
Redo Buffers???????????????? 667648 bytes
SQL alter database mount;
Database altered.
SQL alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL alter database open RESETLOGS;
Database altered.
查看表中的記錄,正確的。
修改實(shí)例名成功。
4.???????? 總結(jié)
由上面的操作可以看到,在數(shù)據(jù)庫(kù)維護(hù)中,最重要的是數(shù)據(jù)文件,初始化文件可以從別的實(shí)例拷貝過(guò)來(lái),然后修改??刂莆募梢灾匦聞?chuàng)建,只要數(shù)據(jù)文件正確,就可以重建初始化文件和控制文件之后,恢復(fù)數(shù)據(jù)庫(kù)。
遇到的錯(cuò)誤:
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-00200: controlfile could not be created
ORA-00202: controlfile: '/home/ora/ora9/oradata/dbtest/control01.ctl'
ORA-27040: skgfrcre: create error, unable to create file
Linux Error: 2: No such file or directory
請(qǐng)查看初始化文件中,控制文件的路徑是正確,控制文件的路徑上的目錄是否有權(quán)限創(chuàng)建文件,如果這些問(wèn)題都解決了,那么應(yīng)該能成功創(chuàng)建控制文件。
1、改密碼
(1).打開(kāi)doc命令框鍵入:sqlplus /nolog
(2).輸入:connect / as sysdba
(3).修改密碼:alter user userName identified by passWord;
(4).解鎖:alter user userName account unlock;
(5).退出:exit;
2、開(kāi)服務(wù)
(1).先開(kāi)核心服務(wù)(OracleServiceOrcl)
(2).在開(kāi)監(jiān)聽(tīng)服務(wù)(OracleDb11g_home1TNSListener)
3、改配置(位置:D:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN\下面的兩個(gè)文件ip listener.ora和tnsnames.ora
改為本機(jī)ip)
4、啟動(dòng)oracle (位置:D:\plsqldev\plsqldev.exe),根據(jù)用戶(hù)名和密碼進(jìn)行登錄
5、新建用戶(hù)
(
create user userName identified by "Pwd";
)
6、授權(quán) (grant resource to userName;)
7、建表
create table tabName
(
id type primary key,
name type,
desc type
);
輸入sqlplus /nolog 回車(chē)一閃就關(guān)了,解決方法:
1.先在D:\oracle\product\10.2.0\db_1\BIN下找到sqlplus.exe,用管理員的身份運(yùn)行,不關(guān)了,就這么開(kāi)著,然后輸入上面的相關(guān)命令就可以了
您好,您這樣:
1、停止所有的Oracle服務(wù)。
這個(gè)沒(méi)有什么好解釋的,根據(jù)你的oracle 安裝的不同
包括數(shù)據(jù)庫(kù)的服務(wù),監(jiān)聽(tīng)器等等.
2、修改initSID.ora文件,修改instance_name為新的SID
找到你的初始化參數(shù)文件,里面有下面的一下參數(shù).
db_name = "testdb"
instance_name = testdbl
service_names = testdb
改成
db_name = "testdb"
instance_name = oral
service_names = oral
注意,db_name不要改,因?yàn)槲覀兊臄?shù)據(jù)庫(kù)還是叫testdb,但是它的服務(wù)也就是sid,改成oral,否則會(huì)報(bào)錯(cuò).修改之后,保存好這個(gè)文件
3、修改注冊(cè)表的ORACLE_SID
在注冊(cè)表的local machine 下面的software下面,找到oracle 的hom0主鍵,下面有個(gè)參數(shù),叫做ORACLE_SID,改成oral 記住,只改這一個(gè).其他的不用改了,比方說(shuō)服務(wù).等等,否則會(huì)報(bào)錯(cuò).
4、修改listener.ora中的SID_NAME
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\oracle\ora81)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = testdb)
(ORACLE_HOME = E:\oracle\ora81)
(SID_NAME = oral)
)
)
把里面的SID_NAME 給成oral,如上面的例子所表示.
5、oradim刪除原來(lái)SID的服務(wù),添加新SID的服務(wù)
這步比較復(fù)雜,涉及到oradim命令的用法.下面我簡(jiǎn)單的介紹一下它 的用法
創(chuàng)建例程:
-NEW -SID sid | -SRVC 服務(wù) [-INTPWD 口令] [-MAXUSERS 數(shù)量] [-STARTMODE a|m] [-PFILE 文件] [-TIMEOUT 秒]
編輯例程:
-EDIT -SID sid [-NEWSID sid] [-INTPWD 口令] [-STARTMODE auto|manual] [-PFILE 文件名] [-SHUTMODE a|i|n]
[-SHUTTYPE srvc|inst|srvc,inst] [-TIMEOUT 秒]
刪除例程:
-DELETE -SID sid | -SRVC 服務(wù)名稱(chēng)
啟動(dòng)服務(wù)和例程:
-STARTUP -SID sid [-USRPWD 口令] [-STARTTYPE srvc|inst|srvc,inst] [-PFILE 文件名]
關(guān)閉服務(wù)和例程:
-SHUTDOWN -SID sid [-USRPWD 口令] [-SHUTTYPE srvc|inst|srvc,inst] [-SHUTMODE a | i | n]
查詢(xún)幫助:
-? | -h | -help
-SID sid
指定要啟動(dòng)的實(shí)例名稱(chēng)
-SRVC 服務(wù)
指定要啟動(dòng)的服務(wù)名稱(chēng)
-USRPWD 口令
指定內(nèi)部用戶(hù)的口令,如果作為NT管理員登錄,不用此參數(shù)
-PFILE 文件名
為實(shí)例指明初始化參數(shù)文件,如果參數(shù)文件在Oracle的默認(rèn)位置,則不需要此命令
-STARTTYPE srvc|inst|srvc,inst
表示要啟動(dòng)什么
srvc————只啟動(dòng)服務(wù)
inst————啟動(dòng)實(shí)例,服務(wù)必須已經(jīng)啟動(dòng)并開(kāi)始工作了
srvc,inst —服務(wù)和實(shí)例都啟動(dòng)
-SHUTTYPE srvc|inst|srvc,inst
表示要終止什么,參數(shù)選項(xiàng)同上
-STARTMODE a|m
表示啟動(dòng)實(shí)例所使用的模式
a————auto方式(自動(dòng))
m————manual方式(手動(dòng))
-SHUTMODE a|i|n
表示終止實(shí)例所使用的關(guān)閉模式
a————abort方式
i————immediate方式
n————normal方式
例子:
在服務(wù)里生成一個(gè)新的實(shí)例管理服務(wù),啟動(dòng)方式為手工
oradim -NEW -SID test -STARTMODE manual -PFILE "D:\Oracle\admin\test\pfile\inittest.ora
oradim -NEW -SRVC OracleServicetest -STARTMODE manual -PFILE "D:\Oracle\admin\test\pfile\inittest.ora
注:有效的服務(wù)名為 “OracleService” 后跟“ SID”
-SID test 與 -SRVC OracleServicetest 等價(jià)
刪除此實(shí)例或服務(wù)
oradim -DELETE -SID test
oradim -DELETE -SRVC OracleServicetest
編輯此實(shí)例,啟動(dòng)方式改為手動(dòng)
oradim -EDIT -SID test -STARTMODE manual
編輯此實(shí)例,啟動(dòng)方式改為自動(dòng)
oradim -EDIT -SID test -STARTMODE auto
啟動(dòng)test
oradim -STARTUP -SID test
oradim -STARTUP -SID test -STARTTYPE srvc,inst
只啟動(dòng)test服務(wù)
oradim -STARTUP -SID test -STARTTYPE srvc
只啟動(dòng)test實(shí)例
oradim -STARTUP -SID test -STARTTYPE inst
關(guān)閉test
oradim -SHUTDOWN -SID test
oradim -SHUTDOWN -SID test -SHUTTYPE srvc,inst
在testdb中
我們使用
oradim –DELETE –SID testdb
刪除了testdb 實(shí)例
然后
oradim –NEW –SID oral
添加新的實(shí)例
注意,這個(gè)命令,可以寫(xiě)到控制文件和注冊(cè)表的服務(wù)里面,我更改后,可以看到在服務(wù)里面,服務(wù)名稱(chēng)已經(jīng)改過(guò)來(lái)了.
但是這個(gè)時(shí)候還是不可以登錄到oracle.提示為權(quán)限不足.
6、orapwd生成新SID的口令
具體的orapwd,我想大家都知道了,要?jiǎng)?chuàng)建一個(gè)密碼文件就要用它,至于為什么我們需要重新創(chuàng)建密碼文件,我還不是很清楚,等我弄清楚了之后,我會(huì)把更新我的文檔.
需要注意的是,生成的密碼文件,一定要保存到orale home\database下面
而且密碼文件的名字一定要PWDsid.ora
具體的為什么我還不是很清楚.
好了.現(xiàn)在你可以通知你的客戶(hù)端,把他們的tnsname.ora中的
SZ =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.47.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oral)
)
)
service_name 都改成oral ,就可以用了