Chasing 291 for victory, Sri Lanka were bowled out for 278 in 48.1 overs despite a fighting 37-ball 64 by Thisara Perera. Opener Kusal Perera top-scored with 80.
Zimbabwe batsmen Hamilton Masakadza and Sikandar Raza set up the win with half-centuries that took the team's total to 290-6 after being put into bat first.
In reply, Thisara Perera, hitting five fours and three sixes, fought a lonely battle after Sri Lanka slipped to 181- 5, but his departure spelt doom for the islanders.
Sri Lanka captain Angelo Mathews made 42 and Dinesh Chandimal added 34 runs to show some fight but Zimbabwe bowlers made regular breakthroughs to keep them in the contest.
Earlier, opener Masakadza gave Zimbabwe a solid start with his 73-run knock before middle-order batsman Raza added an unbeaten 81 off 67 balls -- his second successive ODI fifty.
Raza, who hit eight fours and a six during his innings, also took one wicket after opening the attack with his off- spin bowling for Zimbabwe. He was named man of the match.
It was Zimbabwe's fourth win over Sri Lanka in their last six matches. Sri Lanka now face hosts Bangladesh in the third ODI in Dhaka on Friday.
Disclaimer: No Business Standard Journalist was involved in creation of this content
