是否有一种便捷的方法可以使用单个新表空间或与数据来源不同的表空间将模式导入 Oracle 11gR2?
例如,我从 OLDDB 导出了 BLOG_DATA,其中所有用户数据都存储在 USERS 表空间中。
在 NEWDB 上,我想导入 BLOG_DATA 模式,但将用户对象存储在专门为此用户创建的 BLOG_DATA 表空间中。
我创建了 BLOG_DATA 用户,创建了 BLOG_DATA 表空间并将其设置为该用户的默认表空间,并添加了适当的无限配额。
CREATE TABLESPACE blog_data DATAFILE SIZE 1G;
CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data;
GRANT connect,resource TO blog_data
Run Code Online (Sandbox Code Playgroud)
该模式是从 OLDDB 导出的,类似于
exp blog_data/secretpassword@OLDDB file=blog_data.dmp
Run Code Online (Sandbox Code Playgroud)
在阅读了 Phil 在下面的出色回答后,我发现自己想知道:
由于数据除了默认表空间(用户拥有配额的唯一表空间)之外别无他处,这是否会有效地强制 imp 将所有用户对象放在该默认表空间中?
imp blog_data/secretpassword@NEWDB file=blog_data.dmp
Run Code Online (Sandbox Code Playgroud)
这会将整个 blog_data 模式放在 NEWDB 的 blog_data 表空间中吗?有什么理由为什么这不起作用,或者我会遇到某些对象等问题?
更新:
我做了一个快速测试,发现情况确实如此。Imp将对象放置在该用户的默认表空间中,前提是它不能将其放置在原始表空间中(例如,该表空间不存在)。完整说明:http : //www.dolicapax.org/? p= 57
不过,我认为像 Phil 建议的那样使用数据泵可能是首选。
随着 Oracle 工程系统的引入,DBA 在某种程度上更接近于基础设施设计决策,并且期望至少对数据库的网络设计要求有一些意见。至少这是我发现自己的情况:)
部署 ODA 进行测试后,我发现自己采用了当前设置:
系统控制器 0 具有连接到典型边缘交换机 Catalyst 2960 系列的公共绑定接口 (bond0)。管理接口 (bond1) 连接到相同类型的第二个边缘交换机。
类似地,系统控制器 1 的公共接口连接到第二个交换机,而管理接口连接到第一个交换机。
这样,如果其中一个开关出现故障,操作员将能够通过公共界面或管理界面到达每个系统控制器以促进诊断。
在 Cisco 端,为 ODA 的 4 个绑定接口配置了 EtherChannel 组。这两个交换机单独连接到网络的其余部分,两者之间没有直接链接。
乍一看,这确实是一个合理的设计,但我对不同故障场景的思考越多,我似乎提出的问题就越多。
考虑到这些边缘型交换机本身并不是冗余的,集群能够处理由于电源故障导致的一台交换机不可用,或者一台交换机无法转发数据包似乎是相当重要的。
数据库客户端(在本例中为 Zend 服务器应用程序服务器)每个都类似地通过绑定接口连接到两个交换机中的一个。这就带来了一些关于负载均衡的问题:我对11gR2 RAC的理解,简单的连接到SCAN地址,很可能让客户端走很长一段路到主网,然后通过另一个交换机回来,这几乎不能考虑要非常有效率。
如果交换机出现故障或停止转发数据包,会发生什么情况?连接会通过 SCAN 找到可访问的 VIP 侦听器吗?RAC 是否会以某种方式检测网络故障并将 SCAN 和 VIP 移动到具有工作且可访问的公共接口的系统控制器?老实说,我看不出它会如何。
虽然客户端在故障转移场景中通过核心网络并返回很长一段路是可以接受的,但在正常生产中避免它肯定会很好。
我确信 Oracle 对这一切应该如何协同工作有一个非常清晰的认识,但恐怕我并没有那么清楚地看到这一切。
边缘级/非冗余交换机是否可以实现完全冗余?我们能否以某种方式对客户端连接在生产和故障转移情况下的路由位置添加一些控制?也许有一种很好的方法可以将两台交换机互连,以允许一台交换机上的客户端和另一台上的数据库侦听器之间直接进行通信?
在这一点上,我正在寻找应应用于典型高可用性 ODA 实现的任何最佳实践和基本网络设计注意事项。
希望这对任何面临为其 ODA 制定网络设计决策的 DBA 有用:)
更新:
ODA 在主动备份配置中配置了绑定。我认为这可能允许设置绑定上的每个接口都连接到不同的交换机,而无需任何交换机端配置。
有谁知道是不是这种情况?
[root@oma1 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: …Run Code Online (Sandbox Code Playgroud) 昨晚,我们其中一个 Oracle 数据库机上的恢复区已满。这是在其中一个数据库警报日志中报告的,我们能够在下一次日志切换之前清除一些空间,此时生产将停止。
多一点警告当然会很好,比如当磁盘组已满 70% 时。
我们有哪些选项可以监控 ASM 内的磁盘使用情况?
这是一个非常复杂的场景,但我认为最先进的挑战可能会对 dba.se 的许多高端用户感兴趣。
问题
我正在使用 Oracle GoldenGate 为文档生产系统开发洲际数据复制解决方案,有点类似于 wiki。主要目标是在全球范围内提高应用程序性能和可用性。
该解决方案必须允许从多个位置同时读/写访问同一个数据池,这意味着我们需要一些聪明的方法来防止或解决没有用户交互的冲突更新。
专注于碰撞预防,我们必须允许全局锁定对象(文档、插图、一组元数据等),从而防止多个用户同时编辑来自不同位置的同一对象 - 最终导致冲突。
类似地,对象必须保持锁定状态,直到任何用户连接的数据库收到该对象的更新数据,否则用户可能会开始编辑没有最新更新的旧对象。
背景
该应用程序对延迟有些敏感,这使得从远程位置访问中央数据中心的速度变慢。像许多以内容为中心的系统一样,读/写比率在 4 比 1 的范围内,使其成为分布式架构的理想选择。如果管理得当,后者还将努力确保站点或网络中断期间的可用性。
我使用了一种有点非常规的多循环双向复制拓扑。这将复杂性保持在可管理的级别 { 2(n-1) 方式},增加了站点中断的弹性,并允许相当简单地添加或删除站点。一个小缺点是,通过中央主数据库在最远程站点之间复制事务可能需要长达 30 秒的时间。
在所有站点之间直接复制的更传统的设计会将时间缩短一半,但也会显着增加配置 { n(n-1) 方式}的复杂性。
五个位置意味着 20 路复制,而不是我设计中的 8 路复制。
此图显示了我当前跨欧洲、亚洲和北美数据中心的测试环境。生产环境预计会有更多的位置。

所有数据库都是 Oracle 11.2.0.3 和 Oracle GoldenGate 11.2.1。
到目前为止我的想法
我一直在思考通过在中央数据库的数据库链接上将一行插入到“锁定”表中来进行锁定,同时让解锁(前面提到的行的更新或删除)与更新的行一起复制数据。
在获取锁和打开对象进行编辑之前,我们必须代表用户检查中央和本地数据库中锁的可用性。编辑完成后,我们必须释放本地数据库中的锁,然后通过中央数据库将更改和锁的释放复制到所有其他位置。
但是,对高延迟数据库链接的查询有时会非常慢(测试显示单个插入需要 1.5 秒到 7 秒),而且我不确定我们是否可以保证删除锁的更新或删除语句是要复制的最后一条语句。
调用远程 PL/SQL 过程进行检查和锁定至少会将操作限制为单个远程查询,但 7 秒仍然是很长的时间。像两秒钟这样的事情会更容易接受。我希望可以以某种方式优化数据库链接。
还可能存在其他问题,例如在从中央数据库成功复制本地锁定表中的行之前尝试删除或更新该行。
从好的方面来说,使用这种解决方案,如果与中央数据库的通信中断,让应用程序进入只读状态,或者在数据中心不可用时重定向客户端,应该相对简单。
有没有人做过类似的事情?解决这个问题的最佳方法是什么?
就像我最初说的那样,这是一个相当复杂的解决方案,请随时询问任何不清楚或遗漏的地方。
在Oracle Database Appliance,默认部署只给你一个control file.
我觉得这有点令人费解。单个控制文件会导致自动配置的企业管理器 DB 控制台中的策略违规,而 Oracle 的建议仍然是,据我所知,您应该始终在不同的驱动器和文件系统上至少拥有两个控制文件。就个人而言,为了保险起见,我一直都有三份副本。
ODA 使用 ASM 进行配置,并且使用三重镜像驱动器确实具有良好的存储冗余。在此配置中使用单个控制文件运行是否可以?
将第二个控制文件添加到同一个磁盘组可能没有多大意义,将控制文件多路复用到 SSD 磁盘组或每个节点的操作系统驱动器是否更有意义?
oracle-11g-r2 oracle-asm oracle-database-appliance oracle-12c
我正在参加斯坦福在线的免费 DB 课程,坦率地说,其中一项练习给我带来了一些麻烦。我有一种感觉,这应该非常简单,所以对于 DBA,我显然不太擅长 SQL。
我们正在使用一个简化的场景来评价电影。
对于同一评论者两次对同一部电影评分并第二次给予更高评分的所有情况,返回评论者的姓名和电影名称。
这是架构:
Movie ( mID, title, year, director )
Reviewer ( rID, name )
Rating ( rID, mID, stars, ratingDate )
Run Code Online (Sandbox Code Playgroud)
我应该怎么做?
在过去的 6 个小时里,我一直在尝试在 Ubuntu 上安装 Oracle 11g。显然,我并不是唯一一个为此而苦苦挣扎的人,因为网上有很多(通常是误导性的)“文档”,关于如何解决人们在 Ubuntu 上安装 Oracle 11g 时总会遇到的各种错误。
我遵循了一个这样的“指南” - (this one),并遵循了所有说明。然后我花了最后 5 个小时尝试配置 Oracle,但无济于事。
当我运行时/etc/init.d/oracle-xe configure,我得到了响应(几分钟后):
Starting Oracle Net Listener...Done
Configuring database...
Database Configuration failed. Look into /u01/app/oracle/product/11.2.0/xe/config/log for details
Run Code Online (Sandbox Code Playgroud)
以下是我的 /u01/app/oracle/product/11.2.0/xe/config/log 文件夹中文件的内容:
CloneDbCreation.log
Control file created.
PL/SQL procedure successfully completed.
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2233344 bytes
Variable Size 616565760 bytes
Database Buffers 444596224 bytes …Run Code Online (Sandbox Code Playgroud) 我希望确保 php web 应用程序中的所有查询都正确使用了绑定变量,以尽量减少对查询的解析。
我想知道 Oracle 如何解析将列与值列表进行比较的查询。Oracle 会认为这些语句是相同的,还是列表必须在绑定变量内?
select char from alphabet where char not in ('a', 'b');
select char from alphabet where char not in ('c', 'd');
Run Code Online (Sandbox Code Playgroud)
如果列表的内容必须在绑定变量中,是否可以使用单个变量来完成,或者必须将列表中的每个项目放在一个单独的变量中?
select char from alphabet where char not in (:list);
select char from alphabet where char not in (:c1, :c2);
Run Code Online (Sandbox Code Playgroud)
如果后者为真,列表中具有不同项数的查询是否仍被认为具有相同的结构?
select char from alphabet where char not in (:c1, :c2);
select char from alphabet where char not in (:c1, :c2, :c3);
Run Code Online (Sandbox Code Playgroud) oracle ×6
oracle-asm ×2
goldengate ×1
import ×1
installation ×1
locking ×1
network ×1
oracle-12c ×1
oracle-xe ×1
parse ×1
php ×1
query ×1
rac ×1
replication ×1
ubuntu ×1