我在服务器主机上装了ORACLE,现在已经创建了一个数据库叫做DBONE,里面当然就有了相应的表空间了,
现在我想再创建一个数据库叫DBTWO,请问可以吗?
如果可以的话,那么我每次启动数据库时候,用STARTUP OPEN 是把哪个数据库启动呢?
我就是总也理不明白这个。希望能有人给解释下啊。
我是个刚接触ORACLE的新手。

解决方案 »

  1.   

    如果你再创建一个数据库DBTWO,那么就有两个实例(Instance)。
    用sqlplus / as sysdba进入sqlplus
    然后启动startup,这样会启动环境变量中SID指定的实例。
    例如SID=DTONE,那么就会启动DBONE。如果你创建的连接DBTWO的tns服务名为DBTWO
    那么用sqlplus sys@DBTWO as sysdba进入sqlplus
    然后启动startup,就会启动DBTWO。
      

  2.   

    我的服务器是LINUX系统,没有环境变量这个概念啊。
      

  3.   

    用环境变量ORACLE_SID区分两个数据库,在UNIX下,如果要操作DBONE,可以用
    $export ORACLE_SID=dbone
    然后打开或关闭数据库都可以。在windows下,则用
    CMD:\>SET ORACLE_SID=DBONE
      

  4.   

    我说的就是linux的环境变量。
    你安装数据库是应该知道ORACLE_BASE,ORACLE_HOME,ORACLE_SID,PATH这些环境变量吧
      

  5.   

    恩,知道这些,我也设置了,这些是写在文件里的吧。
    ORACLE_SID是我安装的时候创建的数据库的SID,那么我每次启动STARTUP OPEN都是默认把这个打开了,
    如果我想在连接的时候就打开其他的数据库,怎么办?
      

  6.   

    你看我这样理解对吗?
    我在SQLPLUS里面CONN SYS/PSWD AS SYSDBA,这个命令是连接到一个空闲例程,它还没有去跟哪个数据库实例发生联系吧?
    然后,当我STARTUP OPEN的时候,系统就默认为我打开了DBONE数据库,因为我现在就只有这一个数据库实例,假如我在此之前已经创建好了DBTWO数据库,那么当我用STARTUP OPEN 这个命令的时候,它会默认打开DBONE,但如果我把$export ORACLE_SID=DBTWO 这个命令执行生效,那么我在执行STARTUP OPEN就会是打开DBTWO数据库了,是吗?
      

  7.   


    如果你想打开数据库A
    配置一个连接到A的tns服务名AS
    sqlplus sys@AS as sysdba
    Enter password: ******
    SQL> startup用sqlplus / as sysdba登录,对新手有一定的迷惑性
      

  8.   

    谢谢,大概了解了,
    但是ORACLE服务器端呢?我启动一个监听程序是不是就是可以监听向DBONE和DBTWO发出的连接请求了呢?
      

  9.   

    是的,一个listener就可以监听多个数据库实例
      

  10.   

    哦!!耶!!
    谢谢啦!!
    一个DBMS可以创建多个ORACLE数据库实例,这里我创建的是DBONE和DBTWO两个,而我同样在LISTNER.ORA中配置了这两个实例的列表,
    然后,进入LSNRCTL,启动监听器,接着,我将LINUX系统的ORACLE_SID环境变量设置为DBONE,并在SQLPLUS中以CONN SYS/PSWD AS SYSDBA连接到空闲例程,启动数据库DBONE实例,就是用STARTUP OPEN就可以了。对吧!!如果客户端要连接就用客户单的TNSNAME.ORA中的DBONE的连接符来连接上这个服务器的DBONE实例。
    假如我希望在服务器上启动DBTWO数据库实例,就要将LINUX系统的ORACLE_SID环境变量设置为DBTWO,并在SQLPLUS中以CONN SYS/PSWD AS SYSDBA连接到空闲例程,启动数据库DBTWO实例,就是用STARTUP OPEN就可以了。是上面和个逻辑吗??
      

  11.   


    Yes, you are right!
      

  12.   

    sqlplus / as sysdba,这个也可以在Windows下的命令行使用吗?
      

  13.   

    linux里面的 env 出来的东西不是环境变量是什么?
      

  14.   

    其实你完全没必要创建多个数据库,你可以在一个数据库里面创建多个方案(Schema)各个Schema直接可以互相没有任何影响,如果想让两者能互相访问也好办。我相信完全能满足你的需要。
      

  15.   


    sqlplus 连接时有本地连接和@SID两种方式,不过是本地连接的话,如果是多实例的话,需要指定ORACLE_SID就可以,如果是@SID这样的形式的话,就是通过tnsname里的servicename来区分了,
      

  16.   

    你这里的DBTWO是一个新的实例,他有自己独自的SGA和独自的进程,可以和里一个DBONE完全隔离,Oracle支持一个操作系统里运行两个实例,在Window里分别启动两个OracleServiceDBONE和OracleServiceDBTWO,如果是linux,可以通过分别设置ORACLE_SID=DBONE,然后进入sqlplus通过startup.启动,成功启动以后,这两个实例都会自动注册到listener里,你可以通过lsnrctl status来查看。
      

  17.   

    我的服务器是LINUX系统,没有环境变量这个概念啊。 
    ==================================================
    有啊,别忘了,先有 unix,后有的 dos、windows,环境变量这个概念没准是 windows 从 unix 偷来的。呵呵。
      

  18.   

    是啊,功能要求当然可以实现,但是这样做的弊端是在太多了。
    多个SCHEMA之间的对象交叉在同一个数据文件中,这对安全性和独立性都是影响。
    多个大项目如果共用一个数据库,而仅仅通过SHCEMA来区别的话,你想想会是一个什么局面?
    我某个项目毙掉了,要删除其相关数据文件和表空间,那么不就把其他项目的数据也删掉了吗?
      

  19.   


    谢谢,我是两种连接方式都有的。ORACLE_SID还是每次启动的时候都指定的好,我喜欢条理清楚的逻辑。
    默认的值和启动动作只会让我反感。
    尽管现在只有一个数据库实例,但每次启动的时候我还是会先指定ORACLE_SID这个变量,然后再启动。
    傻吧?!
    没办法,强迫症!