嗨,我是 Oracle 领域的绝对初学者。我想学习如何将复制的 oracle 数据库克隆到一些备份,在另一台服务器上使用此备份。
Oracle 安装在 Windows Server 2003 上。
我有一些问题:
我目前与一些工作中的数据库架构师在概念上存在分歧。我在这个领域的教育完全来自 UofGoogle,所以我确信他们是对的,但无法在网上找到支持他们的证据。
我们正在讨论的数据库部分与不同领域内的制造设备有关。有一个包含所有唯一 AREA_CD 的表。每个区域可以包含多件装备(EQUIP_CD),但单件装备不能在多个区域。即这是一个(AREA_CD)对多(EQUIP_CD)的关系。
我对db设计的理解是,我们应该有一个与区域表直接相关的设备的表,其中:AREA_CD= PK & FK to area table EQUIP_CD= PK(组合PK是因为有一些设备共享相同的代号,但不一样。这是我们试图升级的遗留系统的不幸现实)。
架构师说最好的做法是通过关联表连接面积表和设备表,我认为这是专门用于多对多关系的。
如果 EQUIP_CD 指的是特定类型的设备(具有我们感兴趣的属性),其中多个设备可能存在于不同的区域,那么这对我来说是有意义的。然而,这将是一个多对多的关系,这里不是这种情况。我们有一些共享代号,指的是不同类型的设备,属性取决于它们所在的区域。
他们使用关联表的理由如下:
所以我的问题..是将关联表用于一对多关系的最佳实践吗?除了上述三个之外,这种设计还有其他理由吗?
我不是想挑战我的同事,只是想进一步学习。先感谢您!
更新:数据模型正在修复中,我们正在摆脱那些关联表。
在Oracle Text的参考10克状态,当我们使用索引的多列数据存储我们的桌子,系统地连接了文本列,标签栏的文本和索引文本为每行一个虚拟的XML文档。
此外,在某些情况下,我们可以使用用户数据存储来定义在索引期间合成文档的存储过程。该过程可以获取数据并将它们放入 XML 格式。这里显示了一个很好的例子。
有没有办法检索或显示每条记录的底层虚拟 XML 文档?如何?
由于本周末将完成的迁移,我需要更改数据库中大约 300 个过程和包。我们将从一台服务器迁移到 Exadata。
然而,数据库的开发方式非常草率。银行执行了一些直接写入磁盘的文本文件,但没有人使用目录。在 Exadata 中,由于使用了 DBFS,写入文件的路径会有所不同,为此我必须通过 UTL_FILE 更改所有调用。
让我举个例子:目前的代码是这样的:
file: utl_file.fopen = ('/file/folder/documents', filename, 'W');
Run Code Online (Sandbox Code Playgroud)
我想做什么:创建一个目录
create or replace directory directory_name as '/file/folder/documents';
Run Code Online (Sandbox Code Playgroud)
更改 300 程序:
file: = utl_file.fopen ('directory_name', filename, 'W');
Run Code Online (Sandbox Code Playgroud)
在迁移期间只更改目录:
create or replace directory directory_name as '/dbfs/documents';
Run Code Online (Sandbox Code Playgroud)
真正的问题:有没有一种方法可以搜索并替换一次更改数据库中的所有 300 个程序?我的意思是,有一种方法可以将所有 '/file/folder/documents' 更改为 directory_name 吗?
我们的磁盘空间不足。
该服务器有一个 420 GB 的 HDD,并运行一个 Microsoft SQL Server 和一个 Oracle Server(10g)。
Oracle 服务器最多使用 315 GB 空间。我们刚刚加载了一个 100GB 的 Microsoft SQL Server 数据库。现在我们有大约 5GB 可用空间,需要备份 SQL Server 数据库。
首先,我们尝试将备份移动到另一个驱动器,但这不起作用。
然后我们尝试调整我们的 Oracle Server 的分配空间的大小,它由 6 个文件组成,每个文件 20GB,每个文件使用大约 4GB。当我们尝试将此文件大小调整为 10GB 时,我们收到 Oracle 错误 ORA-03297,但显示已使用 4GB。经过多次尝试,我们可以将一些文件缩短到 16/17/18GB,但我们仍然需要更多空间。
是否有解决方案如何将 Oracle 文件的大小调整为每个 10GB?
我们尝试过 Coalesce 并释放未使用的空间,但这也不起作用。
我知道这是一件糟糕的事情,原因有很多,但我处于“完成任务”模式,我们有一个我们无法修改的软件,可以将记录写入表。其中一些记录,出于业务原因,我们不希望出现在此表中。我想我可以编写一个触发器来“中止”这些行中的任何一行而不会抛出错误(这样应用程序就不会在前端失败,我们希望它认为它做了它的事情)。我非常熟悉这个应用程序,并且知道它不会造成任何丑陋的副作用,我们只是无法修改它以按照我们需要的方式运行。
那么,这有可能吗,如果没有,还有什么方法可以解决呢?我想过让某种工作定期清理我们不想要的记录表,但我宁愿这些记录永远不会在那里开始,所以在任何时候都没有程度的“肮脏”桌子。
我使用的是 Oracle 10g 数据库。我有一个很大的表空间 MYTBS,它由十几个不同大小的数据文件(MYTBS_01,MYTBS_02,...)组成,这些文件多年来一直在添加。
现在我已经从这个表空间中删除了非常大的表,我想检索服务器上的磁盘空间。
我怎样才能从表空间中释放空间/块?
在 Oracle 数据库 10g 中,我需要创建一个具有以下权限的用户:
这可能吗?或者有解决方法吗?
我有一个选择,通过连接查找一些数据。系统运行Oracle 10.02g,选择如下
SELECT distinct t1.crit
FROM table_name1 t1
INNER JOIN table_name2 t2
ON t1.crit = t2.crit
WHERE NVL (t2.qty, 0) + NVL (t2.adds, 0) - NVL (t2.remove, 0) > 0
AND t1.process_id = 'some_process_id'
AND t1.item_no = 'some item NO'
AND t1.to_gen = 1
Run Code Online (Sandbox Code Playgroud)
其中 t1 在 (item_no, crit) 上有一个索引,t2 在 (item_no, crit, X) 上有一个索引,X 是一些附加列。
此语句的目的是找到我需要在附加表中为其生成数据的所有候选对象。当新数据生成后,t1.to_gen 列被设置为0。目前还不清楚,如果运行这个语句的软件进行中间提交,例如为一个item_no 生成一些新数据,设置t1。 to_gen = 0 并提交,然后使用相关语句的游标中的下一个 item_no。
该语句在我的环境中每天成功执行几次,但在极少数情况下,我从 oracle 收到错误,我不清楚其来源:
ora-01410: invalid RowID
Run Code Online (Sandbox Code Playgroud)
由于 select 语句不直接使用伪列 RowID,Oracle 将不得不在内部使用它。
这个问题的根源是什么?
更新:听起来很可悲,系统会进行中间提交,但这不是问题的根源。
我在网上进行了研究,但找不到与我完全相同的情况,所以我发布了此消息。
我通过远程桌面连接连接到远程服务器(Win2k3 服务器)。该服务器已安装(从 v$version 选择 *):
运行这两个句子都会返回错误:
c:\> sqlplus
SQL> conn / as sysdba
Insufficient privileges
SQL> connect system/****
Account locked
Run Code Online (Sandbox Code Playgroud)
远程计算机是安装数据库的位置,因此我没有连接到远程数据库。Windows 用户帐户属于 Administrator 和 Ora_DBA Windows 组。
Db 只有一个可用用户(我们开发的应用程序使用的用户),但它没有足够的权限来更改 SYSTEM 帐户并将其解锁。
我不知道我还能做什么,因为我无法以管理员身份连接到 de db。我希望我已经为我的问题提供了足够的数据,如果我遗漏了什么,请询问。
编辑:我再次检查了 Windows 用户成员资格:管理员、ora_dba、用户和“远程工作场所用户”(希望我已经正确翻译了最后一项)。
PWD%ORACLE_SID%.ora文件不存在(假设这是正确的)。
EDIT2:我正在连接到本地数据库。我发现 3 个已安装的 SQLPLUS:一个来自 Oracle Forms 6i(是的,我知道它确实是旧版本),另一个来自 Oracle 10 客户端,最后一个来自 Oracle …
oracle-10g ×10
oracle ×9
corruption ×1
disk-space ×1
oracle-11g ×1
security ×1
select ×1
sqlplus ×1
sysdba ×1
trigger ×1
vpd ×1
windows ×1