RMAN v$block_change_tracking

在用RMAN作增量备份时,如果想提高性能的话,可以考虑启用block change tracking.因为,默认情况下,RMAN在备份(包括增量备份)时,会读取所有数据块到内存,然后检查数据块头SCN信息,发现改变了,则认为需要备份,否则不备。那么,如果启启用block change tracking的话,则RMAN可以只需要读取tracking file,发现数据文件头有改变,则被,否则不备。这样,就避免了扫描数据文件中的每一个块了。那么该怎样启用这一特性呢?

首先,数据库至少要MOUNT(因为这一动作要写入控制文件),当然,OPEN状态更是没的说了。

其次,执行命令:SQL> alter database enable block change tracking;(如果启用OMF特性,即参数DB_CREATE_FILE_DEST生效),否则,执行:SQL> alter database enable block change tracking using file ‘/u01/app/tracking/track.dbf ‘reuse;(其中,using file 关键字,表示将来生成的tracing file的路径及文件名,值得注意的是,RAC环境下,该路径一定要指向共享存储上。reuse表示重用,即会覆盖之前的tracking file,如果有的话)

然后,可以通过下面的命令查询block change tracking是否生效,即查询v$block_change_tracking:

SQL> select * from v$block_change_tracking;

最后,如果想要禁用该特性的话,也很简单:

SQL> alter database disable block change tracking;

Database altered.

当然了,禁用该特性的同时,之前生成的tracking file 也一并被删除了!

补充:如果想要对我们的tracking file 进行重命名、重定位操作的话,跟操作普通数据文件一样:

  • 干净关闭数据库,SQL>shutdown immediate/transactional/normal;
  • 生成目标文件,即使用操作系统的文件拷贝命令,cp /u01/app/tracking/track.dbf /u02/app/tracking/new_track.dbf
  • 启动数据库到MOUNT状态,然后执行 SQL>alter database rename file ‘/u01/app/tracking/track.dbf ‘ to ‘/u02/app/tracking/new_track.dbf’;
  • 打开数据库,SQL>alter database open;
SQL> alter database enable block change tracking using file ‘/u01/app/tracking/track.dbf’;
Database altered.

How to use script and scriptreplay

我们知道:在Windows环境下可以通过一些录制屏幕的软件,把屏幕捕捉下来,如camtasia studio。当然,UNIX/Linux系统下也有相关工具可以达到这个目的,那就是scriptscriptreplay:

首先,说说script工具,默认情况下,大多数Linux系统都会自带该工具,具体用法不详细记录了。想说说的就是,比较“好玩儿”的用法:

[oracle@Oracle10g ~]$ script -t 2>oracle.time -a oracle.txt

Script started, file is oracle.txt

[oracle@Oracle10g ~]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 – Production on Mon Apr 19 22:04:51 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn / as sysdba;

Connected.

SQL> exit

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production

With the Partitioning, OLAP and Data Mining options

[oracle@Oracle10g ~]$ exit

Script done, file is oracle.txt

其次,再来说说scriptreplay的用法。解释一下刚才的script命令,相当于在我们的当前路径下生成了两个文件oracle.time(记录我们的命令执行的时间-t参数表示记录命令执行时间),oracle.txt记录我们所有的执行命令,包括显示在终端上的结果。当然,这两个文件的名称和路径,我们可以任意指定。那么,我们接下来就可以利用scriptreplay命令来“播放”我们刚才的执行“录像”了,只需要在命令行上执行下述命令了:

[oracle@Oracle10g ~]$ scriptreplay oracle.time oracle.txt

就可以看到,我们刚才执行的所有命令流程了。

当然了,scriptreplay命令在默认情况下是不会安装的,所以我们需要做些“工作”,其实,该命令就是一个perl脚本文件。具体,下载安装过程:

①下载:http://www.filestube.com/2e12d7b3079daa5903ea/go.html

②安装:[oracle@Oracle10g ~]$ tar  jxvf  util-linux-2.12r.tar.bz2

会在当前路径下生成名为util-linux-2.12r的路径

③配置:以root用户执行:

[root@Oracle10g oracle]# cp  /u01/app/oracle/util-linux-2.12r/misc-utils/scriptreplay.pl        /usr/bin/scriptreplay

最后,就可以以普通用户执行scriptreplay命令了,当然我们还可以以root用户到/usr/bin路径下去把scriptrreplay命令改为我们自己喜爱的命令名称了!不过,我们在播放“录像”的时候,要注意那两个“时间文件”和“命令文件”的顺序,不要颠倒了。


[oracle@Oracle10g ~]$ script
Script started, file is typescript
[oracle@Oracle10g ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 – Production on Mon Apr 19 21:58:48 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL> conn / as sysdba;
Connected.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options
[oracle@Oracle10g ~]$ exit
Script done, file is typescript
[oracle@Oracle10g ~]$ cat typescript
Script started on Mon 19 Apr 2010 09:58:45 PM CST
[oracle@Oracle10g ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 – Production on Mon Apr 19 21:58:48 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL> conn / as sysdba;
Connected.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options
[oracle@Oracle10g ~]$ exit
Script done on Mon 19 Apr 2010 09:58:52 PM CST
[oracle@Oracle10g ~]$

Create spfile from pfile命令要注意

自从9i版本开始,Oracle数据库开始引进另外一种初始化参数文件,spfile.简单说明一点:①该参数是一个二进制文件,不可以用文本编辑器直接编辑修改;②一般驻留在Database  server端;③对参数的修改在数据库重新启动后仍然生效;④可以通过RMAN工具进行备份。Oracle现在已经不推荐使用PFILE了。数据库在启动的过程当中默认读取参数文件的顺序是:在$ORACLE_HOME/dbs路径下查找并使用名为spfileSID.ora的参数文件启动,次之查找spfile.ora文件,最后才会查找名为initSID.ora的pfile来启动数据库,若这三个文件都没有查到,则数据库在默认情况下就启不来。当然,我们也可以在启动的过程中显示指定使用一个非默认路径下的某个非默认命名的pfile来启动数据库,命令类似于{SQL>startup pfile=/u01/app/…./init.ora}。但是,我们却不可以在启动的过程中显示指定用某个SPFILE来启动数据库!

在这里,我想说明的是:我们在做PFILE与SPFILE互相“倒腾”的过程当中要稍加留意的是,一定要注意参数文件的路径要写全,如果不是利用默认的路径。

例如:我在一次解决问题的过程当中,就犯了一个低级的错误:客户应用环境下当前的SPFILE丢掉了,没有有效地参数文件备份,只有一个不能用的PFILE,实例根本就无法加载了。好在,客户在建数据库的最后一步过程中,保留了脚本。这样,就可以利用该文件来启动数据库了,启动实例之后,我就执行了:SQL>create spfile from pfile;返回结果提示,SPFILE创建成功,然后shutdown,再启动。结果报错,“ORA-03113: 通信通道的文件结束 ORA-01041: 内部错误, hostdef 扩展名不存在”,实例无法启动。我就很诧异了???后来,问题的原因就是执行SQL>create spfile from pfile的时候,没有显示指定pfile=xxxxx,也就是说,利用pfile来创建SPFILE的过程当中,pfile本身就是一个不可以用来启动实例的参数文件,那么利用该文件来创建出来的SPFILE肯定也是一个“废品”文件了。解决问题的方法:重新利用那个脚本中的参数文件启动实例,然后显示的利用该文件来创建一个可用的SPFILE。经过仔细的调整初始化参数,最后数据库有了SPFILE,可以正常启动到OPEN阶段!!!

结论:我们在做参数文件互相转换的过程当中,要谨慎确认,创建文件的源头是不是一个正确的可用的文件。

归家的路上

家,心灵的归宿!

在机场等班机的时候,才感觉藏在心里浓浓的挂念一拥而上,恨不能现在就可以在家门口冲屋里喊:“爸,妈,我回来了!”我想,家里的双亲肯定也在期待儿子的快点回家,虽然早已告诉他们我的归家日期。

爹妈在河南,儿子在福州,幸福就是一张机票!

亲人在家里,儿子在外地,团圆就是一路平安!

DBA,SYSDBA,SYSOPER三者的区别

什么是DBA?什么是SYSDBA,什么又是SYSOPER?三者究竟有何联系呢?

在Oracle数据库领域里,很多Oracle初学者(Me 2)很容易被这三个术语迷惑,就其原因还是基础概念没有弄清楚。记得自己刚开始接触Oracle的时候,也是云里雾里,现在基本弄明白,故写出来和大家分享:

DBA:在Oracle数据库里面其实只是一个角色(role)。那么什么是角色呢?可以简单的认为一个角色就是某些个权限的集合体,也就是说把多个系统权限(system privilege),对象权限(object privilege)以及角色(role)揉和在一起,然后赋给一个角色。说白了,Oracle引入角色的概念,其实是为了避免相关的系统权限和对象权限的赋予和回收的复杂性。把一堆系统权限和对象权限以及角色打包之后赋给某个新角色,然后再对这个新角色进行必要的操作就显得相当便捷和方便了。当然,在Oracle里面一个角色是可以赋给另外一个角色的,但是角色的赋给是不能够构成循环回路的。eg:先把role1给role2,然后把role2给role3,那么你就不可以再把role3给role1了。这是Oracle不允许的,其实你也不可以成功执行这样的包含回路角色的授权的!

SYSDBA:说白了就是一种系统权限而已,没有什么神秘的。当我们在SQL*PLUS命令行上执行了类似如下的操作:

SQL>conn / as sysdba;这时候,其实我们是以SYSDBA这个身份去登陆数据库的,我们当前的default schema是SYS。那么SYSDBA这个系统权限究竟允许执行哪些操作呢?

■   Perform STARTUP and SHUTDOWN operations
■   ALTER DATABASE: open, mount, back up, or change character set
■   CREATE DATABASE
■   DROP DATABASE
■   CREATE SPFILE
■   ALTER DATABASE ARCHIVELOG
■   ALTER DATABASE RECOVER
■   Includes the RESTRICTED SESSION privilege

■   Perform STARTUP and SHUTDOWN operations

■   ALTER DATABASE: open, mount, back up, or change character set

■   CREATE DATABASE

■   DROP DATABASE

■   CREATE SPFILE

■   ALTER DATABASE ARCHIVELOG

■   ALTER DATABASE RECOVER

■   Includes the RESTRICTED SESSION privilege

以SYSDBA登陆Oracle数据库时,上述几种操作是允许执行的。

SYSOPER:也是一种系统权限,只不过跟SYSOPER略有区别而已。SQL>conn /as sysoper 这种连接下,我们的default schema是PUBLIC.允许执行的操作如下:

■ Perform STARTUP and SHUTDOWN operations

■ CREATE SPFILE

■ ALTER DATABASE OPEN/MOUNT/BACKUP

■ ALTER DATABASE ARCHIVELOG

■ ALTER DATABASE RECOVER (Complete recovery only. Any form of incomplete recovery, such as UNTIL

TIME|CHANGE|CANCEL|CONTROLFILE requires connecting as SYSDBA.)

■ Includes the RESTRICTED SESSION privilege

简单区别如下:

SQL> conn sys/oracle as sysdba;

Connected to an idle instance.

SQL> show user;

USER is “SYS”

SQL> conn sys/oracle as sysoper;

Connected to an idle instance.

SQL> show user;

USER is “PUBLIC”

SQL>

Note: The SYSDBA and SYSOPER system privileges allow access to a database instance even when the database is not open. Control of these privileges is totally outside of the database itself.

SYSDBA和SYSOPER系统权限允许我们在数据库打开之前以这两种身份去访问实例。

当然,DBA还可以理解成另外两个术语的简写;Database Administrator,Data Block Address。

一句话总结三者之间的关系:

Note: The DBA role does not include the SYSDBA or SYSOPER system privileges. These are special administrative privileges that allow an administrator to perform basic database administration tasks, such as creating the database and instance startup and shutdown.

DBA 角色并未包含SYSDBA,SYSOPER这两个系统权限。他们是一类特殊的系统管理权限,允许管理员以这两种身份对数据库进行特殊的管理工作。

还有就是,不要轻易将SYSDBA,SYSOPER这两种系统权限授权给数据库的普通用户。也不要轻易将DBA角色赋给普通用户。在对数据库进行普通操作的时候,也不要以SYSDBA,SYSOPER登录。

《Oracle DBA手记》“享受”中

《Oracle DBA手记》新书到手,正在“啃食”中!感谢邹先生(banping)赠送此书与我。同样要感谢其他几位作者,感谢Oracle高手前辈写出如此好的技术性书籍,给我等newbie指点学习的方向和解决问题的方法。 2010.1.30下午在厦门市湖滨南路中山医院门口初见邹先生,特别高兴,也很欣慰,不单是他赠送此书给我,更为重要的是认识一位Oracle从业前辈。两个陌生的北方男人认识在南方的厦门,完全是因为Oracle。初次拿到书的时候感觉封面很凝重,随后慢慢翻阅学习的时候,才发觉内容是如此之精华!得知他母亲身体不好在医院治疗,他也一直忙着照顾老人。在此,祝福老人家,早日康复,祝福邹先生合家团圆,家人平安快乐!

2010.02.01

How time flyes!

2009在默默的工作和平静的生活中转瞬即逝了,还没来得及回味,2010又溜走了1/12.

Work hard & smart,Focus on Oracle & Linux.

Cherish the precious time,enjoy the colorful life,do the meaningful things.

oracle 10g SYSAUX tablespace

        The SYSAUX(System Auxiliary) tablespace is a new feature of Oracle 10g database,before 10g release,there wasn't this tablespace.After you created your database via DBCA(Database Configuration Assistant) tool,the SYSAUX tablespace was created for you automatically.

       But what's the mainly function of that tablespace? Why Oracle present the SYSAUX tablespace? Does it bring some benefit for the database or the DBA?

       Yep,the answer is ture.The SYSAUX tablespace is an auxiliary tablespace of the SYSTEM tablespace.In the earlier release before 10g,there is only way to store the components and other metadata in the SYSTEM tablespace.But now,with the SYSAUX tablespace,Oracle separate some components from SYSTEM tablespace,bring 'sth' from the SYSTEM tablespace to SYSAUX tablespace.By that,the workload of SYSTEM tablespace becomes light,decreases the space fragment in the SYSTEM tablespace,and it becomes  easy to manage the SYSTEM tablespace for DBAs.

       In addition,if the status of SYSAUX tablespace becomes offline(in fact we can bring it offline explicitly) or invalid,the Oracle database can works normally still.

       Now,let's find out which components were stored in the SYSTEM tablespace logically.First,we should be familar with the V$SYSAUX_OCCUPANTS dictionary table. V$SYSAUX_OCCUPANTS displays SYSAUX tablespace occupant information.

       So,we  need to do is only to issue a query against of the V$SYSAUX_OCCUPANTS view.

111

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production

SQL> select occupant_name,schema_name,move_procedure,space_usage_kbytes from v$sysaux_occupants;

OCCUPANT_NAME                  SCHEMA_NAME          MOVE_PROCEDURE                      SPACE_USAGE_KBYTES
------------------------------ -------------------- ----------------------------------- ------------------
LOGMNR                         SYSTEM               SYS.DBMS_LOGMNR_D.SET_TABLESPACE                  6144
LOGSTDBY                       SYSTEM               SYS.DBMS_LOGSTDBY.SET_TABLESPACE                   896
STREAMS                        SYS                                                                     512
XDB                            XDB                  XDB.DBMS_XDB.MOVEXDB_TABLESPACE                  49216
AO                             SYS                  DBMS_AW.MOVE_AWMETA                                768
XSOQHIST                       SYS                  DBMS_XSOQ.OlapiMoveProc                            768
XSAMD                          OLAPSYS              DBMS_AMD.Move_OLAP_Catalog                           0
SM/AWR                         SYS                                                                  250496
SM/ADVISOR                     SYS                                                                  176384
SM/OPTSTAT                     SYS                                                                  289216
SM/OTHER                       SYS                                                                   23424

OCCUPANT_NAME                  SCHEMA_NAME          MOVE_PROCEDURE                      SPACE_USAGE_KBYTES
------------------------------ -------------------- ----------------------------------- ------------------
STATSPACK                      PERFSTAT                                                                  0
ODM                            DMSYS                MOVE_ODM                                             0
SDO                            MDSYS                MDSYS.MOVE_SDO                                   22400
WM                             WMSYS                DBMS_WM.move_proc                                 7296
ORDIM                          ORDSYS                                                                  512
ORDIM/PLUGINS                  ORDPLUGINS                                                                0
ORDIM/SQLMM                    SI_INFORMTN_SCHEMA                                                        0
EM                             SYSMAN               emd_maintenance.move_em_tblspc                  164800
TEXT                           CTXSYS               DRI_MOVE_CTXSYS                                      0
ULTRASEARCH                    WKSYS                MOVE_WK                                              0
ULTRASEARCH_DEMO_USER          WK_TEST              MOVE_WK                                              0

OCCUPANT_NAME                  SCHEMA_NAME          MOVE_PROCEDURE                      SPACE_USAGE_KBYTES
------------------------------ -------------------- ----------------------------------- ------------------
EXPRESSION_FILTER              EXFSYS                                                                 3712
EM_MONITORING_USER             DBSNMP                                                                 1856
TSM                            TSMSYS                                                                    0
JOB_SCHEDULER                  SYS                                                                    1024

26 rows selected.

SQL> 

 

222   For a test purpose,we can bring the LogMiner component to the EXAMPLES tablespace.

 SQL> exec dbms_logmnr_d.set_tablespace('example');

PL/SQL procedure successfully completed.

SQL>

and then we issue a  query against the V$SYSAUX_OCCUPANTS to obtain the effect:

SQL> select occupant_name,schema_name,move_procedure,space_usage_kbytes

  2  from v$sysaux_occupants

  3  where occupant_name like 'LOGMNR%'

  4  ;

OCCUPANT_NAME                  SCHEMA_NAME          MOVE_PROCEDURE                      SPACE_USAGE_KBYTES

------------------------------ -------------------- ----------------------------------- ------------------

LOGMNR                         SYSTEM               SYS.DBMS_LOGMNR_D.SET_TABLESPACE                     0

SQL> 

333 ok,the SPACE_USAGE_KBYTES value of the LOGMNR   is 0,instead of  the original value of 6144.

and then,let's bring it back to the SYSAUX tablespace.

SQL> exec dbms_logmnr_d.set_tablespace('SYSAUX');

PL/SQL procedure successfully completed.

SQL> select occupant_name,schema_name,move_procedure,space_usage_kbytes
  2  from v$sysaux_occupants
  3  where occupant_name like 'LOGMNR%'
  4  ;

OCCUPANT_NAME                  SCHEMA_NAME          MOVE_PROCEDURE                      SPACE_USAGE_KBYTES
------------------------------ -------------------- ----------------------------------- ------------------
LOGMNR                         SYSTEM               SYS.DBMS_LOGMNR_D.SET_TABLESPACE                  6144

SQL> 
444 Furthermore,we can do some more experiences on the SYSAUX tablespce.
SQL> drop tablespace sysaux;
drop tablespace sysaux
*
ERROR at line 1:
ORA-13501: Cannot drop SYSAUX tablespace


SQL> 

555 we can't drop the SYSAUX tablespace.

SQL> alter tablespace sysaux offline;

Tablespace altered.

SQL> alter tablespace sysaux online;

Tablespace altered.

SQL> 

666 we can  switch the status(online to offline or else.) of the SYSAUX tablespace manually.

SQL> alter tablespace sysaux read only;
alter tablespace sysaux read only
*
ERROR at line 1:
ORA-13505: SYSAUX tablespace can not be made read only


SQL> 

777 we can not alter the SYSAUX tablespace to read only status.

SQL> alter tablespace sysaux rename to new_sys;
alter tablespace sysaux rename to new_sys
*
ERROR at line 1:
ORA-13502: Cannot rename SYSAUX tablespace


SQL> 

888  Also,we can not rename the SYSAUX tablespace.

 

———————————-The End—————————–

revoke sysdba from user_name

把sysdba权限授予给user1之后,orapwSID文件中记录了user1的信息,但是将sysdba权限从user1收回之后,orapwSID文件中依然有user1用户。这是为什么呢???
可是联机文档上明明说:
A user’s name remains in the password file only as long as that user has at least one of these two privileges. If you revoke both of these privileges, Oracle Database removes the user from the password file.

以下是我的实验步骤:
1看到字典里面记录的只有SYS用户拥有SYSDBA和SYSOPER系统权限:
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
—————————— —– —–
SYS                            TRUE  TRUE

2给普通用户user1授予sysdba的权限:
SQL> grant sysdba to user1;

Grant succeeded.

3再次查看字典验证,看到授权成功,user1也拥有了sysdba权限:
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
—————————— —– —–
SYS                            TRUE  TRUE
USER1                          TRUE  FALSE

4并且user1也记录到了orapwSID文件(我的ORACLE_SID=asher)
SQL> !strings $ORACLE_HOME/dbs/orapwasher
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
USER1
BBE7786A584F9103


5并且user1也可以以sysdba登录:
SQL> conn user1/user1 as sysdba;
Connected.
SQL> show user;
USER is “SYS”
SQL> conn sys/oracle as sysdba;
Connected.

6收回权限:
SQL> revoke sysdba from user1;

Revoke succeeded.
7接着查看字典,发现user1已经没了sysdba的权限:
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
—————————— —– —–
SYS                            TRUE  TRUE

8可是user1依然在orapwSID文件中存在:
SQL> !strings $ORACLE_HOME/dbs/orapwasher
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
USER1
BBE7786A584F9103

9重启数据再次查看:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> statup;
SP2-0042: unknown command “statup” – rest of line ignored.
SQL> startup;
ORACLE instance started.

Total System Global Area  293601280 bytes
Fixed Size                  1219016 bytes
Variable Size              75499064 bytes
Database Buffers          209715200 bytes
Redo Buffers                7168000 bytes
Database mounted.
Database opened.

10查看字典:
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
—————————— —– —–
SYS                            TRUE  TRUE
11orapwSID文件依然存在:
SQL> !strings $ORACLE_HOME/dbs/orapwasher
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
USER1
BBE7786A584F9103

SQL>

以上所有实验环境:
SQL> !uname -a
Linux RHEL4 2.6.9-89.ELsmp #1 SMP Mon Apr 20 10:34:33 EDT 2009 i686 i686 i386 GNU/Linux

SQL> select * from v$version;

BANNER
—————————————————————-
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Prod
PL/SQL Release 10.2.0.1.0 – Production
CORE    10.2.0.1.0      Production
TNS for Linux: Version 10.2.0.1.0 – Production
NLSRTL Version 10.2.0.1.0 – Production

请各位看官指点迷津!谢谢!此环境下,我的数据库没有屏蔽操作系统认证(不知道跟这个有没有关系?)!实验的结果跟联机文档上说的出现冲突,我就很是纳闷???user1根本没有赋予sysoper的权限,所以我就没有revoke sysoper from user1,我想跟这个也没有关系吧?再次谢过!希望这个问题能得到高手的解决~~~