我如何解决这个问题" ORA-01109:数据库未打开"错误?

时间:2014-12-03 19:50:38

标签: oracle sqlplus database-administration

我正在尝试使用SQLPlus创建自己的数据库。所以首先我以管理员身份登录:

sqlplus sys/sys_password as sysdba

然后我尝试创建一个名为sqlzoo的新用户:

CREATE USER sqlzoo IDENTIFIED BY sqlzoo 
DEFAULT TABLESPACE tbs_perm_01sqlzoo 
TEMPORARY TABLESPACE tbs_perm_01sqlzoo 
QUOTA 20M ON tbs_perm_01sqlzoo;

这给了我以下错误:

ERROR at line 1:
ORA-01109: database not open

为什么它会给我这样的错误?

11 个答案:

答案 0 :(得分:14)

由于错误状态 - 数据库未打开 - 它先前已关闭,有人在启动过程中将其保留。它们可能是有意的,也可能是无意的(即它应该是开放的,但未能这样做)。

假设数据库本身没什么问题,你可以用一个简单的语句打开它:

ALTER DATABASE OPEN

答案 1 :(得分:3)

我遇到了同样的问题。以下是我解决问题的方法。我正在Windows 10上的oracle数据库12c可插拔数据库(pdb)上工作。

- 使用sqlplus从终端登录为sysdba;以下是一个例子:

  

sqlplus sys / @ orclpdb as sysdba

- 首先检查您的数据库状态;

  

SQL>从v $ pdbs中选择名称,open_mode;

- 它显示数据库已安装在我的情况下。如果未安装您的,则应首先安​​装数据库。

- 接下来打开数据库进行读/写

  

SQL> ALTER PLUGGABLE DATABASE OPEN;

- 再次检查状态。

  

SQL>从v $ pdbs中选择名称,open_mode;

- 现在你的dababase应该是开放的,用于读/写,你应该能够创建模式等。

答案 2 :(得分:2)

你试过 SQL> alter database open; ?首次登录后?

答案 3 :(得分:1)

如果您的数据库已关闭,那么在作为SYSDBA登录时您可以假设这一点。虽然登录命令将像sqlplus sys / sys_password一样执行为sysdba,那时你将得到"连接到空闲实例"从数据库回复。此消息表明您的数据库已关闭。您应该首先检查一下alert.log文件,了解数据库关闭的原因。如果你发现它被正常击落,你可以发出" startup"用于启动数据库的命令,然后执行create user命令。如果您发现数据库存在缺少数据文件或其他问题,则需要先恢复数据库并打开数据库以执行create user命令。

"更改数据库打开"命令仅在Mount阶段时由数据库接受。如果数据库已关闭,那么它将无法接受"更改数据库打开"命令。

答案 4 :(得分:1)

同样的问题让我在这里。 毕竟,我找到了链接,这对我有好处。

Source link

检查可插拔数据库的状态。

  

SQL>启动; ORACLE实例开始了。

     

系统全局总面积788529152字节固定大小2929352   bytes变量大小541068600字节数据库缓冲区239075328   bytes重做缓冲区5455872字节数据库已安装。数据库   打开。 SQL>从v $ pdbs中选择名称,open_mode;

     

名称OPEN_MODE   ------------------------------ ---------- PDB $ SEED安装PDBORCL安装PDBORCL2安装PDBORCL1 <登记/>   MOUNTED

     

我们需要在UPGRADE状态下启动PDB $ SEED PLOGGABLE DATABASE

     

SQL&GT;立即停止;

     

数据库已关闭。数据库已卸下。 ORACLE实例关闭。

     

SQL&GT;启动升级;

     

ORACLE实例已启动。

     

系统全局总面积788529152字节固定大小2929352   bytes变量大小541068600字节数据库缓冲区239075328   bytes重做缓冲区5455872字节数据库已安装。数据库   打开。

     

SQL&GT; ALTER PLOGGABLE DATABASE ALL OPEN UPGRADE;可插拔数据库   改变。

     

SQL&GT;从v $ pdbs中选择名称,open_mode;

     

名称OPEN_MODE   ------------------------------ ---------- PDB $ SEED MIGRATE PDBORCL MIGRATE PDBORCL2 MIGRATE PDBORCL1 <登记/>   MIGRATE

答案 5 :(得分:1)

  

打开可插拔数据库orclpdb;`

为我工作。

orclpdb是可插入数据库的名称,该名称可能因人而异。

答案 6 :(得分:1)

由于错误状态-数据库未打开-先前已关闭,有人在启动过程中将其留下。它们可能是有意的,也可能是无意的(即,本来应该是开放的,但没有这样做)。

假设数据库本身没有问题,则可以使用简单的语句打开它。 (由于该问题是在SQLPlus上下文中专门提出的,请记住强制在语句末尾放置一个语句终止符(Semicolon),否则会导致错误。分号字符是一个语句终止符。它是ANSI SQL-92标准。)

ALTER DATABASE OPEN;

答案 7 :(得分:0)

请运行此脚本

ALTER DATABASE OPEN

答案 8 :(得分:0)

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

typedef struct dan {
    char ime[10];
    char stage[10];
    int posetioci;
    int dan;
    struct dan *sled;
}Dan;

Dan *ucitavanje(FILE* input) {
    Dan* glava = NULL, * tek = NULL, * temp;

    temp = malloc(sizeof(Dan));

    while (sscanf(input, "%c %c %d %d", temp->ime, temp->stage, &temp->posetioci, &temp->dan) == 4) {         
    // ^ This is line that gets error


        if (glava == NULL) {
            glava = temp;
            tek = glava;
        }
        else {
            tek->sled = temp;
            tek = tek->sled;
            tek->sled = NULL;
        }
        temp = malloc(sizeof(Dan));
    }
    return glava;
}


int main() {
    FILE* input = fopen("egzit.txt", "r");
    if (!input) exit(1);

    Dan* glava = ucitavanje(input);

    fclose(input);
    return 0;
}

对我有用

答案 9 :(得分:0)

我的错误

SQL> 启动法国

答案 10 :(得分:0)

  1. 打开 SQLPLUS 并使用 sys 作为 sysdba 登录。
  2. 之后运行alter pluggable database <> open;

这对我有用。