我正在尝试使用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
为什么它会给我这样的错误?
答案 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)
同样的问题让我在这里。 毕竟,我找到了链接,这对我有好处。
检查可插拔数据库的状态。
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)
这对我有用。