©
本文档使用 PHP中文网手册 发布
修改ORACLE7数据库maxdatafiles参数的方法
2000/04/13
|
|
在安装ORACLE7时,一般对maxdatafiles(数据文件的最大个数)参数值不加修改或未意识到对
其修改,而使用其默认值(往往比需要值要小)。但随着数据量的增多,需要不断地往表空间内增加数据文件,但是maxd
atafiles的值限定了数据文件的最大个数,数据文件个数增加到最大值后,若再继续追加,就会导致“数据文件个数
超过了最大值”的错误,以至后边的数据无法存入。 数据文件的最大个数因操作系统的不同而不同,但是,现在运行着的ORACLE7数据库中,数据文件的最大个数
可以达到1000个以上,即maxdatafiles的参数值可设为1000或更大,远远大于其安装时的默认值(本系
统安装时的默认值为30),如果遇到了“数据文件个数超过了最大值”的问题时,可通过修改maxdatafiles参
数来解决,下面就介绍一下具体的修改方法: 1.实验环境 ALPHA8200服务器,操作系统Digial UNIX V3.2C,Oracle7.2数据库。 2.准备工作 启动ORACLE数据库,进行下列操作: $sqldba mode=line(回车) SQLDBA>connect internal(回车) SQLDBA>alter database backup controlfile to trace;(
回车) SQLDBA>show parameter user_dump_dest(回车) 可以看到trace文件“ora_3044.trc”在/volora/oracle/rdbms/log目
录下。 将trace文件/volora/oracle/rdbms/log/ora_3044.trc拷贝成 df
ileadd.sql。 用vi编辑dfileadd.sql文件,修改maxdatafiles参数(由原来的30改为300)。 Dfileadd.sql文件如下: Dump file/volora/oracle/rdbms/log/ora_3044.trc Oracle7 Server Release7.2.2.3.0 with the64-bit opti
on- Production Release With the distributed and parallel query options PL/SQL Release2.2.2.3.0- Production ORACLE_HOME=/volora/oracle ORACLE_SID= ora72 Oracle process number:8 Unix process id:3044 System name: OSF1 Node name: slserver.sl.cnpc.co.cn Release: V3.2 Version:148 Machine: alpha Wed Apr2315:54:281997 Wed Apr2315:54:281997 *** SESSION ID:(9.1455)1997.04.23.15.54.28.359 # The following commands will create a new control
file and use it # to open the database. # No data other than log history will be lost. Addi
tional logs may # be required for media recovery of offline data fi
les. Use this # only if the current version of all online logs ar
e available. STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE"ORA72" NORESETLOG
S NOARCHIVELOG MAXLOGFILES32 MAXLOGMEMBERS2 MAXDATAFILES300 MAXINSTANCES8 MAXLOGHISTORY800 LOGFILE GROUP1'/volora/oracle/dbs/log1ora72.dbf' SIZE500K, GROUP2'/volora/oracle/dbs/log2ora72.dbf' SIZE500K, GROUP3'/volora/oracle/dbs/log3ora72.dbf' SIZE500K DATAFILE '/volora/oracle/dbs/systora72.dbf', '/volora/oracle/dbs/rbsora72.dbf', '/volora/oracle/dbs/tempora72.dbf', '/volora/oracle/dbs/toolora72.dbf', '/volora/oracle/dbs/usrora72.dbf', '/volora/oracle/dbs/jhc.dbf', '/volora/oracle/dbs/useradd.dbf' ; # Recovery is required if any of the datafiles are
restored backups, # or if the last shutdown was not normal or immedia
te. RECOVER DATABASE # Database can now be opened normally. ALTER DATABASE OPEN; 将以上dfileadd.sql文件中横线上没用的斜体部分行删掉,存盘。 最后关闭数据库,并做好数据库的备份,包括数据和控制文件的备份,起码要用export将数据全部卸出。有条
件的话,尽量做全备份,预防在数据库重建失败后瘫痪,因为下一步工作牵扯到对数据库的破坏和重新生成工作。 3.修改maxdatafiles参数的过程 3.1删除/volora/oracle/dbs目录下面所有的控制文件(共3个): $rm*.ctl(回车) 3.2重新生成数据库(生成新的控制文件、数据文件等) $sqldba mode=line(回车) SQLDBA>connect internal(回车) 运行dfileadd.sql: SQLDBA>@dfileadd.sql(回车) ORACLE instance started. Statement processed. Media recovery complete. Statement processed. SQLDBA>alter database open noresetlogs;(回车) 至此,数据库的刷新工作已完成,可以投入正常运行了,目前运行着的ORACLE7数据库,数据文件最多可建立
到300个。 在Windows 95下有一个任务栏可随时用鼠标单击任务栏上的应用程序图标切换到相应的程序,在Wind
ows 3.X下要切换应用程序使用的方法有两种,一种是用ALT+TAB切换,另一种是用CTRL+ESC(或在桌
面的空白处双击鼠标)打开任务列表从中选择切换,笔者在使用中总感到不如在Windows 95下那样方便。本文提供
一个用VB 3.0专业版在Windows 3.2中文版下编写的程序,可实现将任务列表一直显示在屏幕上,随时可用
鼠标双击任务列表中的程序名字切换,类似与Windows 95下的任务栏,使用很方便。 实现方法:在窗体中加入一列表框,将检测到的所有已打开的应用程序加入其中,用户就可以双击应用程序名字来切
换了。这里还有一个将其常居顶端的问题,这方面的实现方法在许多报刊杂志上都可以看到,本文不再叙述,本文只给出其余
功能的实现程序。 本程序在开始运行时检测已运行的应用程序并将它们加入到任务列表框中,当此后再有新的应用程序打开时,需要将
其添加到列表框中,所以设计了一个刷新按钮,如果有新的应用程序打开,可点一下它。 另外类似与Windows 本身
的任务列表功能,加入了一个切换按钮,当用户在任务列表中单击选择任务后,单击切换按钮也可切换,此外还有一个退出按
钮用来关闭任务列表。 程序如下: 在窗体中加入如下对象并设置属性: 按钮1 Caption="刷新" name=cmdrefresh 按钮2 Caption="切换" name=cmdswitch 按钮3 Caption="退出" name=cmdexit 列表框list name=lstApp 将窗体形状拉成长条状,安排好对象位置,以便减少屏幕占用空间,将其边框属性改为固定边框,不允许改变大小。
在总体声明部分写如下代码: '声明用到的API函数和常量 Option Explicit Declare Function ShowWindow Lib"User"(ByVal hWnd As
Integer, ByVal flgs As Integer) As Integer Declare Function GetWindow Lib"User"(ByVal hWnd As
Integer, ByVal wCmd As Integer) As Integer Declare Function GetWindowWord Lib"User"(ByVal hWnd
As Integer, ByVal wIndx As Integer) As Integer Declare Function GetWindowLong Lib"User"(ByVal hWnd
As Integer, ByVal wIndx As Integer) As Long Declare Function GetWindowText Lib"User"(ByVal hWnd
As Integer, ByVal lpSting As String, ByVal nMaxCount As
Integer) As Integer Declare Function GetWindowTextLength Lib"User"(ByVa
l hWnd As Integer) As Integer Declare Function SetWindowPos Lib"User"(ByVal hWnd
As Integer, ByVal insaft As Integer, ByVal x%, ByVal y%
, ByVal cx%, ByVal cy%, ByVal flgs As Integer) As Integ
er '注:上面的API函数要写在一行中 Const WS_MINIMIZE=&H20000000 Const HWND_TOP=0 Const SWP_NOSIZE=&H1 Const SWP_NOMOVE=&H2 Const SWP_SHOWWINDOW=&H40 Const GW_HWNDFIRST=0 Const GW_HWNDNEXT=2 Const GWL_STYLE=(-16) Const SW_RESTORE=9 Const WS_VISIBLE=&H10000000 Const WS_BORDER=&H800000 Const WS_CLIPSIBLINGS=&H4000000 Const WS_THICKFRAME=&H40000 Const WS_GROUP=&H20000 Const WS_TABSTOP=&H10000 Dim IsTask As Long '寻找已打开的应用程序函数 Sub FindAllApps() Dim hwCurr As Long Dim intLen As Long Dim strTitle As String lstApp.Clear hwCurr= GetWindow(Me.hWnd, GW_HWNDFIRST) Do While hwCurr If hwCurr Me.hWnd And TaskWindow(hwCurr) Then intLen= GetWindowTextLength(hwCurr)+1 strTitle= Space$(intLen) intLen= GetWindowText(hwCurr, strTitle, intLen) If intLen>0 Then lstApp.AddItem strTitle lstApp.ItemData(lstApp.NewIndex)= hwCurr End If End If hwCurr= GetWindow(hwCurr, GW_HWNDNEXT) Loop End Sub Function TaskWindow(hwCurr As Long) As Long Dim lngStyle As Long lngStyle= GetWindowLong(hwCurr, GWL_STYLE) If(lngStyle And IsTask)= IsTask Then TaskWindow= Tr
ue End Function 双击“退出”按钮,写如下代码: Sub Cmdexit_Click() Unload Me End Sub 双击“刷新”按钮,写如下代码: Sub Cmdrefresh_Click() FindAllApps'刷新任务列表 End Sub 双击“切换”按钮,写如下代码: Sub Cmdswitch_Click() Dim hWnd As Long Dim x As Long Dim lngWW As Long If lstApp.ListIndex
hWnd= lstApp.ItemData(lstApp.ListIndex) lngWW= GetWindowLong(hWnd, GWL_STYLE) If lngWW And WS_MINIMIZE Then x= ShowWindow(hWnd, SW_RESTORE) End If x= SetWindowPos(hWnd, HWND_TOP,0,0,0,0, SWP_NOMOVE
Or SWP_NOSIZE Or SWP_SHOWWINDOW) End Sub 双击窗体,写如下代码: Sub Form_Load() IsTask= WS_VISIBLE Or WS_BORDER FindAllApps End Sub 窗体更新时刷新任务列表: Sub Form_Paint() FindAllApps End Sub双击列表框写如下代码: Sub lstApp_DblClick() Switch.Value= True End Sub
|