首页  编辑  

修改ORACLE7数据库maxdatafiles参数的方法

Tags: /超级猛料/Database.数据库相关/Oracle/oracle系统配置,优化,连接/   Date Created:

修改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<0 Then Beep: Exit Sub

  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

软件世界