본관은 해주(海州). 자는 순위(舜爲). 군수 오경원(吳慶元)의 손자, 오현상(吳顯相)의 아들이며, 어머니는 성재순(成載淳)의 딸이다.
1827년 증광문과에 병과로 급제한 뒤, 겸설서·규장각직각·이조참의·대사성이 되었고, 1851년(철종 2) 대사헌 이노병(李魯秉)이 영의정 권돈인(權敦仁)과 인사를 둘러싸고 말썽을 빚어 물러나자 대사헌이 된 뒤 여러 번 그 직을 맡았고, 철종 말년에 판서가 되었다. 경상도관찰사(慶尙道觀察使)에 임명된 해는 1868년이며, 1869년에 예문관제학에 임명되었고. 1870년에 김병학에게 경상도관찰사 시절 6만 8,000여 냥의 범용(犯用)에 대한 탄핵을 받았다.
대원군이 정권을 잡은 뒤에도 중용되어 예조판서·홍문관제학·의정부우참찬 등의 고위직을 천임하였다. 또한, 병인·신미양요 후 지방방비가 중요시되었으므로 외직을 맡아 경상감사로 부임하였다.
그러나 다음 해 말 재임 6개월간 6만 8,000여 냥의 범용(犯用)에 대한 김병학의 탄핵을 받았으나, 선조의 음덕으로 방축(放逐)당하는 형벌에 그쳤다. 그러나 호비(戶裨)와 막비(幕裨)는 체포되었고, 그 사실을 보고하지 않은 경상감사 김세호(金世鎬)에게는 감봉처분이 내려졌다.
그 뒤 고종은 횡령한 16만 8,000여 석을 탕감하여주고, 뒷처리는 경상도 자체에서 해결하도록 조처하였다. 대원군이 물러나고 민씨세력이 정권을 장악한 직후 사면되어, 곧 한성부판윤에 임명되었다.
또한, 영의정 이유원(李裕元)의 추천으로 부정부패한 포도청 대신에 민간의 송사를 담당하였으며, 판윤에 오래 재직할 수 있도록 보장받았다. 시호는 문정(文靖)이다.