重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

包含oracle如何红字冲销的词条

oracle数据库连接的时候 出现 连接名 该输入什么

首先应该保证数据库的服务启动

创新互联公司主要从事网站建设、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务宾川,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

在myeclipse的数据库视图中点 右键-new 弹出database driver的窗口,

Driver template选择oracle(thin driver),

Driver name 输入oracle

connection URL=jdbc:oracle:thin:@localhost:1521:oracle 注意localhost:1521:oracle中的oracle是数据库得sid换成你自己数据库的sid就可以

username:登陆数据库具有system权限的用户名

password:登陆数据库具有system权限的密码

点击add jar 选择ojdbc14.jar的存放位置,没有得可以到百度下一个叫ojdbc14.jar的文件。

点击test driver 到此成功配置。

关于启动数据库后提示ora-12505的解决方法:

第二种可能发现sid配置没有错误,但是还是报错,那可能就是oracle得监听配置出了问题,需要检查listener.ora文件,用记事本打开,

正确配置如下:

# listener.ora Network Configuration File: e:\oracle\product\10.2.0\db_1

etwork\admin\listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = e:\oracle\product\10.2.0\db_1)

(PROGRAM = extproc))(SID_DESC =

(GLOBAL_DBNAME = oracle)

(ORACLE_HOME = e:\oracle\product\10.2.0\db_1)

(SID_NAME = oracle)))LISTENER =(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))))红字部分改成oracle创建时候的sid 保存退出。

oracle在没有闪回的情况下怎样找回以删了的表

多项研究表明,40% 的应用程序故障都是由操作员或用户的错误造成的。人非圣贤,孰能无过?但是,这些错误很难避免,而且在没有事先规划和使用正确技术的情况下尤其难以恢复。这样的错误会导致“逻辑”数据损坏,或者导致 IT 基础架构的一个或多个组件停止运行。纠正个别组件的错误相对来说简单,而检测并纠正逻辑数据的损坏,例如意外删除了有价值的数据时,所耗费的操作将导致业务产出的巨大损失。典型的用户错误可能包括意外删除了有价值的数据,错误删除了数据和错误删除了表。避免人为错误 Oracle 数据库体系结构利用了人为错误数据库恢复领域独有的技术进展。Oracle 闪回技术提供了一组新特性,可及时查看数据并在时间上前后滚动数据。使用闪回特性,可以查询历史数据、执行更改分析,以及执行自助修复,以便在数据库联机时从逻辑损坏中恢复。利用 Oracle 闪回技术,您完全可以撤销过去的操作!Oracle9i 引入了闪回查询,从而提供了可从人为错误中恢复的简单、强大和全面的非破坏性机制。它允许用户查看过去某个时间点的数据状态,而无需更改任何数据库结构。 Oracle 数据库 10g 扩展了闪回技术,提供了基于数据库、表、行和事务级别的快速、方便的恢复。闪回技术使恢复过程实现了革命性变化,您只需对更改的数据进行操作。现在,错误恢复所需的时间就相当于错误发生的时间。Oracle 10g 闪回技术包括闪回数据库、闪回表、闪回删除、闪回版本查询以及闪回事务查询。 可以轻松地利用闪回技术进行非修复性操作,如使用闪回查询进行历史审计、利用闪回数据库撤销测试更改。Oracle 数据库 11g 引进了一个创新的方法,使用闪回数据存档来管理和查询长期的历史数据。该版本还提供了简单的一步式事务撤销操作,实现了新的闪回事务功能。 Oracle 数据库 11g 中的新特性 闪回数据存档 闪回数据存档能够以高度的应用程序透明性、安全性及高效的方式自动跟踪和维护对所有 Oracle 数据的历史更改。作为 Oracle Total Recall 选件的组成部分,闪回数据存档为企业提供了快速、集中和极其高效的解决方案,以满足管理所有历史数据的需要。闪回数据存档自动跟踪对数据库中所存储数据的每个更改,同时维护一个安全、高效和易于访问的历史数据存档。捕获的历史数据可以根据业务需要保存任意长的时间,并且可以使用闪回 SQL 查询方便地进行访问。在现有表和新建表上均可立即启用历史数据跟踪,更重要的是,以一种完全应用程序透明的方式进行跟踪。 闪回数据存档提供了一个高性能的、存储优化的、具有集中管理界面的解决方案,可以满足组织对数据保留和更改控制的需求。使用闪回数据存档进行历史数据跟踪的主要好处包括: 应用程序透明: 在应用程序没有更改或更改很小的情况下,可以在一个或多个表上立即启用历史数据捕获。因此,客户可以使用该特性捕获打包应用程序以及自行开发的应用程序的历史数据。 无缝访问: 可以使用熟悉的闪回 SQL 结构轻松访问历史数据。闪回数据存档包括对闪回查询的支持。应用程序可以及时无缝地查询不同时间点的表历史数据。无需拍摄特殊快照既可利用该特性。 安全性: 历史数据一旦生成,任何用户都不能进行修改。这就实现了即取即用,而无需特殊或额外的设置。对内部历史表的访问限制为只读。不允许用户(包括管理员)进行 DML 操作。由于通过闪回查询机制提供了无缝访问,因此应用程序无需直接查询内部历史表。 最小的性能开销: 常规用户事务几乎没有影响。闪回数据存档采用轻型机制来标记要存档的跟踪表上的 DML 操作。通过稍后介绍的后台进程异步生成实际历史记录并进行存档。 存储优化: 在内部对历史数据进行分区和高度压缩,以减少占用的存储空间。闪回数据存档采用高效的压缩模式来压缩内部历史表。此外,它还依据范围分区模式对内部历史表进行自动分区。闪回数据存档中的压缩和分区都是自动管理的,无需特殊管理。 集中管理: 闪回数据存档提供了一个基于策略的集中管理界面,实现了大量正在进行中的管理任务自动化。使用闪回数据存档,可以方便地对表进行分组并设置常规保留策略。新表将从所在的闪回数据存档中自动继承保留参数。Oracle 将根据指定的保留策略自动清除所有跟踪表中过期的历史数据。这就可以将管理员从重复的历史数据管理中解放出来,避免了与人工维护有关的成本高昂的错误(如,错误清除了历史数据)。 闪回事务 大型数据库应用程序依赖复杂的事务序列,以确保一组插入、更新或删除的原子性和一致性。如果出现一个“问题”事务,管理员必须向前追溯,了解哪些更改受该事务的影响并确定任何依赖关系(例如,“问题”事务之后修改了相同数据的事务),从而确保撤销该事务,保留原始的、好的数据状态和任何相关数据。执行这种事务分析可能很费力,尤其对非常复杂的应用程序。通过闪回事务,使用一个 PL/SQL 操作即可实现单个事务(还可以包含它依赖的所有事务)的闪回,或者使用直观的 EM 向导来识别并闪回有问题的事务。闪回事务依赖于给定事务及其相关事务的撤销数据和存档重做日志的可用性,以便撤销更改。Oracle 数据库 10g 第 2 版中的新特性恢复点 当需要进行 Oracle 数据库时间点恢复操作时,DBA 必须确定数据必须回滚到的时间或 SCN。Oracle 数据库 10g 第 2 版用恢复点简化了时间点恢复。恢复点是用户定义的一个名称,与闪回数据库、闪回表和恢复管理器 (RMAN) 结合使用时可以代替 SCN 或时钟时间,可以通过企业管理器或者用 SQL*Plus 或 RMAN 以命令行方式创建。使用恢复点,无需调查事务的 SCN 或时间,使用户能够收藏数据库事务事件。有保证的恢复点确保了始终维护足够的闪回日志,以便返回到恢复点。这意味着快速恢复区将不删除闪回日志,除非当前的保证恢复点不再需要这些日志。可在进行主要数据库更改(如数据库批处理作业或模式升级)之前创建这些特殊恢复点,从而可在需要撤销更改时使用这些恢复点进行闪回。通过RESETLOGS 闪回数据库 通过RESETLOGS 闪回数据库使 RESETLOGS 操作之前创建的闪回日志可用于闪回数据库操作。在 Oracle 数据库 10g 第 2 版中,使用 RESETLOGS 打开数据库后即保留闪回日志。如果直到执行了 RESETLOGS 之后才发现长期存在的逻辑错误,这种情况下该特性非常有用,需要在 RESETLOGS 之前进行闪回。在 Oracle Data Guard 环境中,该功能允许物理备用数据库以读写方式打开,以便稍后闪回更改并将更改转换回物理备用数据库。如果切换操作后发现逻辑错误,可以将主数据库和备用数据库闪回到切换操作前的 SCN 或时间点。Oracle 数据库 10g 第 1 版中的新特性闪回数据库 闪回数据库可快速地将 Oracle 数据库倒回至以前的某个时间,以便纠正由逻辑数据损坏或用户错误造成的任何问题。闪回数据库就像数据库的“倒退按钮”。它提供数据库的时间点恢复,而无需先恢复数据库备份。当您希望消除从磁带恢复数据库备份所花的时间时,数据库时间点恢复是一种快速方法。 闪回数据库功能(可使用 FLASHBACK DATABASE 命令从 RMAN 和 SQL*Plus 启用)与传统的时间点恢复的效果类似。它允许您将数据库返回到其近期的状态。若要启用闪回数据库功能,用 DBA 配置闪回恢复区。快速恢复区是 Oracle 数据库 10g 的一个新特性,它为 Oracle 数据库中所有与恢复相关的文件和操作提供了统一的存储位置。除了闪回数据库日志外,恢复区还包含存档重做日志和 RMAN 备份。有关快速恢复区的详细信息,请参考 Oracle 备份和恢复文档。 Oracle 在快速恢复区内自动创建和管理闪回日志。因为快速恢复区配置了空间定额,闪回日志要受制于这些磁盘空间限制。闪回日志的大小区别很大,这取决于在给定的闪回日志间隔期间数据库更改的读/写速度。旧程序块版本的副本被写入到闪回日志中。如果一天之内更新了 10% 的数据库程序块,则 24 小时闪回日志的大小约为您数据库大小的十分之一。如果将数据库恢复到过去较早时期可能要求更多的磁盘空间,则 DBA 可能会动态地更改此磁盘定额。 闪回为 Data Guard 提供了易于使用的方法来纠正用户错误。闪回数据库既可用在主数据库上又可用在备份数据库上,可快速地将数据库恢复到较早的时间点,从而避免用户错误。同时,如果管理员决定故障切换到备用数据库,但那些用户错误已被应用于备用数据库(例如,由于启用了实时应用特性),则管理员只需将备用数据库闪回到某个安全的时间点。启用闪回数据库的性能开销不到 2%。您可能不希望牺牲任何生产数据库的性能开销,而是实现一种平衡。如果能在数分钟而不是数小时内恢复数据库,则可避免公司上百万美元的收益损失,您愿意将 2% 的资源用于闪回数据库吗?启用闪回数据库功能有以下几方面好处: 免去了恢复备份的时间。当数据库因遇到灾难性故障而关闭时,公司因无法做生意而导致大量收入损失。 消除了备用数据库重做应用延迟。 闪回数据库与 Data Guard 无缝集成。备用数据库现在可以轻松快速闪回到过去的任意时间点,这样在应用重做过程中就不需要延迟。 意外错误纠正。 闪回数据库提供了 Oracle 数据库的连续快照。数据库可以回退到 SCN 或时间戳。 闪回表 当发生人为错误或应用程序错误时,您可能想将一个或多个表状态恢复至故障发生以前的时间点。使用闪回表,DBA 能够将一个或一组表快速轻松地联机恢复到指定时间点。闪回表可在恢复表的同时自动保留其相关属性(如当前索引、触发器和限制),而无需 DBA 查找和恢复应用程序特有的属性。闪回表缓解了执行更为复杂的时间点恢复操作的需求。以下命令将 ORDERS 和 ORDER_ITEMS 表闪回到 7 月 7 日下午 2:33。 FLASHBACK TABLE orders, order_items TO TIMESTAMP (JUL-07-2003, 02:33:00);和闪回查询一样,闪回表也依靠撤销数据来恢复表。因此撤销数据必须可用,这样闪回表才能成功。自动撤销管理特性允许您使用 UNDO_RETENTION 初始化参数指定保留撤销数据的时间。通过使用此参数并适当地规定撤销表空间大小,DBA 能够控制使用闪回表的情况下可修复表的回退时间长短。 DBA 可以使用闪回表特性快速地从人为错误中恢复,它还可以用作自助式修复工具以便从意外修改或删除中恢复。应用程序开发人员可以将闪回表功能合并到他们定制的应用程序中。凭借基于时间点对象的恢复可用性、快速恢复和易用性,该工具相比于介质恢复提供更多的好处。闪回表联机执行恢复操作 将指定表中的所有数据恢复到时间戳或 SCN 描述的先前的时间点。 自动恢复所有的表属性(如索引、触发器以及应用程序所必需的内容),这些应用程序利用闪回的表才能发挥作用。 在分布式环境中维护任何远程状态。例如,所有应用程序要求的表修改都被闪回。 按照约束规定保持数据完整性。Oracle 保留了所有从属对象和参考的完整性。 即使在闪回操作以后,仍然能够将其恢复到最初状态。 闪回删除 回收站是一个虚拟容器,所有被删除的对象都驻留在这里。在回收站中,这些对象占据与创建它们时所占据的相同空间。如果在 USERS 表空间中创建表 EMP,那么删除的表 EMP 保留在 USERS 表空间中。并不移动删除的表和任一相关对象(如索引、约束、嵌套表和其他相关对象),仅对它们进行重命名,使其前缀为 BIN$$。可以继续访问删除表中的数据,甚至可以依据删除表使用闪回查询。在删除回收站对象前,每个用户对回收站对象都拥有相同的权利和权限。可以通过查询新回收站视图来查看删除表。回收站中的对象将保留在数据库中,直到删除对象的所有者决定使用新清除命令永久性删除这些对象。按用户的定额对回收站中的对象计数。但闪回删除是一种非破坏性特性。如果发生下面的情况,将通过空间恢复过程自动清除回收站中的对象用户创建新表或添加导致其超出定额的数据。 表空间需要扩展其文件大小,以适应创建/插入操作。 错误删除了表?没问题。使用闪回删除快速撤销删除。 闪回查询 闪回查询是随 Oracle9i 一起引入的,它提供了查看存在于以前的数据的能力。默认情况下,数据库上的操作使用最近提交的可用数据。如果希望查询过去某个时间的数据库,那么,可以使用闪回查询特性进行此项操作。此特性可以指定时间或系统更改编号 (SCN),并使用提交的数据从对应时间中进行查询。当使用自动撤销管理时,闪回查询机制最有效。 Oracle 数据库将撤销操作当作第一等级的数据库对象。撤销操作具有持久性,可使数据库系统继续有效,也可导致数据库系统崩溃或关闭。为获取更佳性能,它还与其他数据库对象分享数据库缓冲存储器。Oracle 数据库使用超出事务处理提交范围的撤销操作,提供长期运行查询的读取一致性,并从逻辑损坏中恢复。 Oracle 数据库提供了直接指定为保留而进行的撤销数量的方法。此系统自动回收过期的撤销操作,以便为新事务生成撤销提供空间。撤销保留值的选择取决于长期运行查询的长度以及逻辑损坏的恢复需求。然而,用户可以不选择指定的撤销保留,以及允许系统为指定的撤销空间提供最佳保留。此最佳保留考虑到长期运行查询以及从逻辑损坏中恢复的最佳可能范围。并不保证默认的撤销保留。如果用尽用于现行事务的过期撤销,那么,系统可以使用最早的未过期撤销操作。 如果UNDO_RETENTION 设置为大于 5 天,那么,Oraclee 数据库 10g 第 1 版中的一项新功能是可以查询过去 5 天以前的数据。只要为撤销表空间数据文件分配足够的磁盘空间,那么,Oracle 将维护一段时间内的撤消操作。下面描述了确保数据库可以使用依赖于撤销操作的闪回查询和其他闪回特性所需要的步骤:确保数据库使用一个撤销表空间。将 UNDO_MANAGEMENT 初始化参数设置为自动指定。 将UNDO_RETENTION 初始化参数设置为一个可以使撤销操作保留足够时间的值,从而可以及时成功返回您的最长查询或者从人为错误中恢复。 为了保证未过期的撤销不被覆盖,设置撤销表空间的 RETENTION GUARANTEE 子句。 闪回查询的一个独有特性是可以查看过去的数据,然后正确选择如何处理此信息。您可以进行分析,然后撤销更改,或者捕获更改的数据以供将来处理。闪回查询机制非常灵活,可以用于很多场合。可用于:查询过去存在的数据。 将当前数据与过去的数据进行比较。可以比较单独行或进行更复杂的比较,如查找交集或合并。 恢复已删除或更改的数据。 闪回版本查询 闪回版本查询提供了审计表行以及检索有关更改行事务信息的方法。它检索所有提交的行版本,这些行位于或曾经位于发出查询的时间和过去某一时间点之间。它利用自动撤销管理完成此项操作。 闪回版本查询是 SQL 的扩展,可用于检索指定表中不同行的版本,此表存在于特定时间段内。对于任一指定的表,每次执行 COMMIT 语句时,都会创建一个新行版本。闪回版本查询返回存在于指定时间段内的每个行版本的行。使用 SELECT 语句的 VERSIONS BETWEEN 子句调用闪回版本查询功能。 闪回版本查询提供了新的附加列,这些列提供了有关行数据事务的详细信息,此行数据允许 DBA 查明 Oracle 数据库中数据更改的时间和方式。 VERSIONS_XID — 创建此行版本的事务 id VERSIONS_OPERATION — 创建此行版本的操作(如删除、插入和更新) VERSIONS_STARTSCN — 此行版本首次中出现时的 SCN VERSIONS_ENDSCN — 此行版本首次进行更改时的 SCN。 闪回版本查询是 DBA 运行分析和回答“这是怎么发生的?”问题的强大工具。DBA 不仅可以运行手动分析,而且闪回版本查询还是应用程序开发人员的强大工具。可以构建用于审计目的的自定义应用程序。并不是每个人都能够真正解释他/她的操作。 闪回事务查询 您可能会发现表中的数据不知何故被不正确地更改了。为了研究该更改,可使用多个闪回查询及时查看指定点的行数据。更高效的方法是,使用闪回版本查询特性查看一定时间内对行进行的所有更改以及相关的事务 id。该特性允许将 VERSIONS BETWEEM 子句附加至 SELECT 语句,后者指定 SCN 或希望查看其间行值发生变化的时间戳范围。 一旦确定错误事务,就可使用闪回事务查询特性识别该事务进行的其他更改,并请求撤销 SQL 来冲销这些更改。您可以通过 FLASHBACK_TRANSACTION_QUERY 视图获得事务历史记录和撤消 SQL。 如果需要将错误事务的结果倒退回去,可以手动执行撤销 SQL 语句,从而可以轻松地从用户或应用程序错误中恢复。闪回事务查询可以提高对数据库中问题的联机诊断能力,并利于执行事务分析和审计。总结 人为错误是导致系统故障的主要原因之一。这些错误很难避免,而且在没有事先规划和使用正确技术的情况下尤其难以恢复。“正确”技术是:Oracle 数据库 11g。为什么犯错误只需几秒,而恢复却要花费数小时或数天?不应如此并且现在也不会如此。闪回通过只在更改数据上运行引发了恢复变革。一条命令即可修复人为错误导致的损坏。闪回技术在去除了恢复的复杂性的同时,缩短了从难以预测的人为错误恢复的时间。

如何连接到linux上的oracle数据库

装好oracle数据库,我们准备用PLSQL Developer 这个软件来连接服务器的数据库!

下面简单介绍设置此软件并连接oracle数据库的方法:

一、下载并安装好PLSQL Developer(绿色版的也可以);

二、下载并解压

Oracle免安装版的客户端:

三、建立tns配置文件。

1、在解压的:“nstantclient-basic-nt-11.2.0.3.0”文件夹的下面建文件夹,路径像这样“nstantclient-basic-nt-11.2.0.3.0\neidown\admin“,其实这个倒是无所谓的,只是看起来与服务端上的更接近而已,与文章后面的环境变量要对应。

2、拷贝服务端目录“$ORACLE_HOME$\network\admin\tnsnames.ora”到客户端的“nstantclient-basic-nt-11.2.0.3.0\neidown\admin“目录,这个文件的内容如下:(也可自行建立)

# tnsnames.ora Network Configuration File: /home/oradb/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

ORCL =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl.localdomain)

)

)

复制代码以上的代码 做个简要的介绍,本例中安装在linux中的oracle数据库,其环境配置如下:

ORACLE_BASE=/home/oradb/oracle

ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

ORACLE_SID=orcl

PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin 

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib 

LANG=C

复制代码拷贝到客户端后,用记事本打开它,修改如下几个参数:

# tnsnames.ora Network Configuration File: /home/oradb/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

ORCL =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl.localdomain)

)

)

复制代码重要:以上除了HOST是服务器ip外,其他三个红字必须与服务端的这个文件一致,否则连接的时候将会导致ORA-12514错误。

四、设置PLSQL Developer程序的oci库路径。

运行PLSQL Developer程序,在弹出的登录框点“取消”

在菜单“工具-首选项”中的“连接”中,

找到“Oracle主目录名”,输入

解压的:“nstantclient-basic-nt-11.2.0.3.0”文件夹的路径 比如: 

"D:\PLSQL\instantclient_11_2"

找到“OCI库”,输入

解压的:“nstantclient-basic-nt-11.2.0.3.0”文件夹下oci.dll文件的路径,比如:

"D:\PLSQL\instantclient_11_2\oci.dll"

如下图:

五、设置windows的环境变量

(右键“我的电脑”-属性-高级-环境变量)

添加2个系统变量:

1、是指向TNS文件所在目录的,这个目录是Oracle的TNS文件所在目录。TNS文件就是保存了连接信息的文件tnsnames.ora。

本例中 TNS_ADMIN  的值: D:\Program Files\PLSQL Developer\instantclient_11_2\network\admin

2、是指定数据库使用的编码。如果不设置成以下值,那么连接上数据库后,你看到的所有中文的内容将会是乱码,都是一堆问号。

本例中 NLS_LANG  值:AMERICAN_AMERICA.AL32UTF8

如下图:

如果服务器中的数据库字符编码是GBK则设置为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

如果设置不对会乱码。

注意:设定了环境变量之后,要注销或者重启电脑生效。    

英文中冲帐怎么说?

reverse,如果你使用过英文财务系统,会发现按钮上都是reverse

冲销的话用write

off,上面的reverse类似大陆的红字冲销,即做相反的分录反过来冲账

一般在国外系统(比如Oracle/SAP)中都是模块化管理,例如在AR/AP中你只需要做一笔entry,只用选择debit或credit的单独一边账户,那么另一边一定对应的是trade

debtors(creditors)

control,所以你按Reverse按钮的时候,系统是自动生成一条负数的entry去冲销之前的entry。而如果你要做general

ledger的时候呢,debit和credit是都需要手动指定的,这时候一般都算作是write

off,当然GL也有reverse的功能,跟AR/AP是一样的。

Oracle ERP 开帐总账传票

1、是帐套输入科目编码,不需要写字的。

2、传票冲销点击你先前的那张,然后选择冲销就行了。


网页名称:包含oracle如何红字冲销的词条
当前网址:http://cqcxhl.cn/article/hoocgi.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP