oracle spfile在线修改时损坏的经验分享

前些天,刚接触ORACLE,知道数据库一定要运行在归档模式下:
好手多把它改为归档模式了:先查询
SQL> select name,log_mode from v$database;

NAME      LOG_MODE
--------- ------------
IPTVBMS   ARCHIVELOG
SQL> archive log list
Database log mode              Archive Mode--表示已经改为归档了
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     7517
Next log sequence to archive   7523
Current log sequence           7523
1. SQL> alter system set log_archive_dest_1=’location=/oracle/oracle10g/log/archive_log’;
该语句含义是确定归档日志的路径,实际上Oracle 10g可以生成多份一样的日志,保存多个位置,以防不测

例如再添加一个日志位置可使用以下语句
SQL>alter system set log_archive_dest_2=’location=/oracle/oracle10g/log2/archive_log’;

2.关闭数据库
SQL> shutdown immediate

3.启动数据mount状态:
SQL> startup mount;

4、修改数据库为归档模式:
SQL> alter database archivelog;

5、打开数据库,查询:
SQL> alter database open;
有一天学到参数文件怎么玩,手多也就备份了
SQL> create pfile='/opt/oracle//app/oracle/product/11.1/db/dbs/orabak/initiptvbms.ora' from spfile;

今天改SGA_TARGET SGA_MAX_SIZE时搞错单,没有加M等单位,启动时报错了
SQL> shutdown immediate
一致性关闭时,报错如下
ORA-00851:SGA_MAX_SIZE 1577058304 cannot be set to more than MEMORY_TARGET
按网上的方法解决不了?
为了使数据库启动则使用pfile启动:

Sql代码 
1.SQL> startup pfile=/opt/oracle/app/oracle/admin/iptvbms/pfile/init.ora.4272011104615 
SQL> startup pfile='/opt/oracle/app/oracle/admin/iptvbms/pfile/init.ora.4272011104615' 通过pfile创建spfile:

Sql代码 
1.create spfile='/opt/oracle/app/oracle/product/11.1/db/dbs/spfileiptvbms.ora' from pfile='/opt/oracle/app/oracle/admin/iptvbms/pfile/init.ora.4272011104615'; 

是无法解决??想了半天,搞了半天才查出有备份
总结:ORACLE一定要运行在归档模式下,一定要定期备份相关的文件;
包括参数文件,控制文件,以及数据文件;

1.因为我的库中有N多库,所以要设置环境变量
export ORACLE_SID=iptvbms
Refer to the SQL*Plus User's Guide and Reference for more information.
2.登陆
oracle@iptv-app2:~> sqlplus / as sysdba
SQL*Plus: Release 11.1.0.6.0 - Production on Fri Apr 12 11:38:57 2013
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
Connected to an idle instance.
3.用备份的启动数据库到NOMOUNT状态
SQL> startup pfile='/opt/oracle//app/oracle/product/11.1/db/dbs/orabak/initiptvbms.ora' nomount;
ORACLE instance started.
Total System Global Area  559534080 bytes
Fixed Size                  2146312 bytes
Variable Size             339742712 bytes
Database Buffers          209715200 bytes
Redo Buffers                7929856 bytes
4。记得先还原SPFILE回来
SQL> create spfile from  pfile='/opt/oracle//app/oracle/product/11.1/db/dbs/orabak/initiptvbms.ora';

File created.
5.启动到MOUNT状态
SQL> alter database mount;

Database altered.
6。开库
SQL> alter database open;

Database altered.

 

SQL> create spfile from pfile='/opt/oracle//app/oracle/product/11.1/db/dbs/orabak/initiptvbms.ora';

File created.
7。验证SPFILE是否已经OK
SQL> ho ls /opt/oracle/app/oracle/product/11.1/db/dbs/spfileiptvbms*
/opt/oracle/app/oracle/product/11.1/db/dbs/spfileiptvbms.ora

 

8。重启数据库

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
有惊无怕,可以有经验了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本人亲自调过,绝无问题. 部分代码: #define max 7 #define m 4 #include<iostream> #include<stdlib.h> using namespace std; struct table //定义页表 { int page; //页表项对应的页号 int sign; //页面否被调入主存的标志 int clock; //页面对应的主存块号 int mod_sign; //页面在主存中是否被修改过的标志 }pg[max]; int k=0; //指示当要装入新页应调出的页在主存的位置 int disk[max]; //存储页面在外存上的数据 int mem[m]; //存储页面在主存上的数据 int clk[m]; //初始化空闲的块号 int full=0; //指示已被占用的空闲块的数目 int p[m]; //存储调入主存中的页面的页号 ////////////////////////////////////////// //模拟将修改的页面的数据存入外存中 void store(int i) //将修改过的页面存入外存中 //注:本段程序并不负责检查页面是否被修改过,在调用store函数,需确保页面被修改过 { disk[i]=mem[pg[i].clock]; // 存储数据 pg[i].mod_sign=0; //将修改标志位改为0,以示页面未被修改 } ////////////////////////////////////////// //模拟将外存中的页面调入内存的块中 void DiaoRu( int ye) //将主存中的页面调入内存, //注:本段只负责调入页面,并不检查页面是否已在主存中,所以在掉本函数前,必须确定页面标志位为0 { int outpage; if( full<m) //如果主存还有空闲块,则将页面装入空闲块中, { p[full]=ye; //存储页号 pg[ye].sign=1; //修改标志位 pg[ye].clock=clk[full]; //存储分配给页面的块号 mem[pg[ye].clock]=disk[ye]; //将数据赋予相应的块 full+=1; //full表示主存中被占用了的空闲块的数目 } else //如果主存块中没有空闲块,则按照fifo算法调度页面 { outpage=p[k]; if( pg[outpage].mod_sign==1) store(outpage); //确定页面被修改过,然后调store函数 p[k]=ye; k=( k+1)%m; //k指示下一个即将被调出的页面号在数组中的位置 pg[ye].sign=1; //修改标志位 pg[ye].clock=pg[outpage].clock; //存储分配给页面的块号 pg[outpage].sign=0; //修改被调出页面的标志 pg[outpage].clock=-1; mem[pg[ye].clock]=disk[ye]; //将数据赋予相应的块 } } ////////////////////////////////////////// //模拟修改内存中页面的数据 void modify(int ye,int data) { if(pg[ye].sign==0) DiaoRu(ye); //确定页面不在主存中,然后调用DIaoRu函数,将页面调入主存 mem[pg[ye].clock]=data; //修改数据 pg[ye].mod_sign=1; //修改修改标志 } /////////////////////////////////////////// //加、减、乘、除指令 int plus(int xx,int zz) //加运算 { int a,b; if(pg[xx].sign==0) DiaoRu(xx); if(pg[zz].sign==0) DiaoRu(zz); a=mem[pg[xx].clock]; b=mem[pg[zz].clock]; return (a+b); } int sub(int xx,int zz) { int a,b; if(pg[xx].sign==0) DiaoRu(xx); if(pg[zz].sign==0) DiaoRu(zz); a=mem[pg[xx].clock]; b=mem[pg[zz].clock]; return (a-b); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值